我正在使用头盔图来部署使用管理配置的“ConfigMap”的pod。
我直接编辑ConfigMap以更改配置文件,然后使用kubectl delete删除pod,以使新配置生效。
有没有简单的方法使用 helm 用新配置替换正在运行的pod而不执行“ kubectl delete ”命令
答案 0 :(得分:12)
我们发现使用--recreate-pods
将立即终止该部署的所有正在运行的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 }}
[...]
答案 1 :(得分:3)
你可以运行
掌舵升级--recreate-pods
这样做。
答案 2 :(得分:2)
如果您需要滚动更新而不是立即终止pod,请添加
date: "{{ .Release.Time.Seconds }}"
进入规格/模板/元数据/标签。
该版本将进行配置更改,如果将其设置为spec / stategy / type,则会触发滚动更新。
如果您刚刚更改了ConfigMap或Secret,请查看https://helm.sh/docs/developing_charts/#automatically-roll-deployments-when-configmaps-or-secrets-change
答案 3 :(得分:0)
@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}}