我想将Secret或ConfigMap内容的哈希值追加到资源名称中,以便触发滚动更新,并保留该资源的旧版本,以防新配置中出现错误。
这几乎可以通过使用 "helm.sh/resource-policy": keep
但这些内容永远不会被清理掉。在Helm中有没有一种方法可以说 "除了最后两个之外,保留所有的",或者有其他方法可以实现这种行为?
$ helm version
version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
为了在Secret或Configmap发生变化时更新资源,您可以在您的部署中添加校验注解。
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
您可以使用 舵机回滚指令
更新。
假设你的配置图是用以下方法生成的 values.yaml
文件,您可以添加一个 _helper.tpl 功能
{{- define "mychart.configmapChecksum" -}}
{{ printf "configmap-%s" (.Values.bar | sha256sum) }}
{{- end }}
并使用 {{ include "mychart.configmapChecksumed" . }}
作为configmap名称和部署时的参考。
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "mychart.configmapChecksumed" . }}
annotations:
"helm.sh/resource-policy": keep
data:
config.properties: |
foo={{ .Values.bar }}
部署.yaml
...
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
# Provide the name of the ConfigMap containing the files you want
# to add to the container
name: {{ include "mychart.configmapChecksumed" . }}
请注意,您必须保持 "helm.sh/resource-policy": keep
注释,告诉舵手不要删除以前的版本。
您不能使用 {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
直接作为configmap的名称,因为如果使用了
error calling include: rendering template has a nested reference name