我正在尝试在部署中对卷和卷安装进行模板化。
我想要的输出是:
volumeMounts:
- name: appsettings
mountPath: /usr/share/nginx/html/appsettings.json
subPath: appsettings.json
volumes:
- name: appsettings
configMap:
name: appsettings-file
这是我的values.yml:
volumemounts:
- name: appsettings
mountPath: /usr/share/nginx/html/appsettings.json
subPath: appsettings.json
volumes:
- name: appsettings
configMap:
name: appsettings-file
这是我的模板:
{{- with .Values.volumemounts }}
volumeMounts:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.volumes }}
volumes:
{{- print . | nindent 4 }}
{{- end }}
这是输出:
volumeMounts:
- mountPath: /usr/share/nginx/html/appsettings.json
name: appsettings
subPath: appsettings.json
volumes:
- configMap:
name: appsettings-file
name: appsettings
如果我将values.yml中的第2行和第6行更改为
- aname: appsettings
输出是:
volumeMounts:
- aname: appsettings
mountPath: /usr/share/nginx/html/appsettings.json
subPath: appsettings.json
volumes:
- aname: appsettings
configMap:
name: appsettings-file
所以看来 helm 总是按字母顺序获取数组。 (我也尝试使用
print
而不是 toYaml
,当然它给出了一个错误,但我看到它仍然获取按字母顺序排序的数组:[map[configMap:map[name:appsettings-file] name:appsettings]]
)
我错过了什么?我该怎么做?
toYaml
实际上按字母顺序排列字典键。这通常并不重要; Kubernetes 将同等对待两个版本的 pod 规范。如果您希望字典按特定顺序序列化,则需要手动写出键。
在这种特殊情况下,我可能不会尝试使 pod 规范的低级细节变得可配置。我会将其写在模板文件中。如果整个 ConfigMap 挂载是可选的,请将其放在单个共享
{{ if .Values.mountConfig }}
选项后面。这也将删除 toYaml
调用。