我正在使用 helm 图表来部署带有管理配置的“ConfigMap”的 pod。
我直接编辑 ConfigMap 以更改配置文件,然后使用 kubectl delete 删除 pod,以使新配置生效。
是否有任何简单的方法使用helm用新配置替换正在运行的 pod 而无需执行“ kubectl delete ”命令
我正在使用 helm 图表来部署带有管理配置的“ConfigMap”的 pod。
我直接编辑 ConfigMap 以更改配置文件,然后使用 kubectl delete 删除 pod,以使新配置生效。
是否有任何简单的方法使用helm用新配置替换正在运行的 pod 而无需执行“ kubectl delete ”命令
我们发现 using--recreate-pods
将立即终止该部署的所有正在运行的 pod,这意味着您的服务会出现一些停机时间。换句话说,您的 pod 不会滚动更新。
在 Helm 中解决这个问题的问题仍然存在:https ://github.com/kubernetes/helm/issues/1702
相反,helm 建议在注释中将配置文件的校验和添加到部署中。这样,部署将具有不同的哈希值,并且基本上看起来“新”,从而使其正确更新。
sha256sum 函数可用于确保在另一个文件更改时更新部署的注释部分:
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]
如果您需要滚动更新而不是立即终止 pod,请添加
date: "{{ .Release.Time.Seconds }}"
进入规范/模板/元数据/标签。
然后,该版本将进行配置更改,如果设置为 spec/stategy/type,则会触发滚动更新。
如果您刚刚更改了 ConfigMap 或 Secret,请查看https://helm.sh/docs/developing_charts/#automatically-roll-deployments-when-configmaps-or-secrets-change
你可以跑
掌舵升级 --recreate-pods
去做这个。
@Oliver 解决方案对我不起作用,因为没有通过更新部署注释来重新创建 pod。
解决方案是根据您的 values.yaml 文件使用动态配置映射名称。
在 values.yaml 中:
configVersion: # Change those numbers to force recreating pods
myApp: 1
在您的配置图中:
metadata:
name: {{ .Release.Name }}-my-config-v{{ .Values.configVersion.myApp}}
在您的部署中:
- configMapRef:
name: {{ .Release.Name }}-my-config-v{{ .Values.configVersion.myApp}}