Docker 在kubernetes头盔上,如何用新的配置值替换pod
我正在使用舵图部署吊舱,并使用“配置图”管理配置 我直接编辑ConfigMap以更改配置文件,然后使用kubectl delete删除POD,以使新配置生效 使用helm有没有简单的方法可以用新配置替换正在运行的pod,而无需执行“kubectl delete”命令 舵手升级-重建吊舱Docker 在kubernetes头盔上,如何用新的配置值替换pod,docker,kubernetes,config,kubernetes-helm,Docker,Kubernetes,Config,Kubernetes Helm,我正在使用舵图部署吊舱,并使用“配置图”管理配置 我直接编辑ConfigMap以更改配置文件,然后使用kubectl delete删除POD,以使新配置生效 使用helm有没有简单的方法可以用新配置替换正在运行的pod,而无需执行“kubectl delete”命令 舵手升级-重建吊舱 要做到这一点。我们发现,使用--recreate pods将立即终止该部署的所有正在运行的pods,这意味着您的服务会有一些停机时间。换句话说,你的播客不会有滚动更新 在Helm中解决这一问题的问题仍然悬而未决:
要做到这一点。我们发现,使用
--recreate pods
将立即终止该部署的所有正在运行的pods,这意味着您的服务会有一些停机时间。换句话说,你的播客不会有滚动更新
在Helm中解决这一问题的问题仍然悬而未决:
相反,helm建议在注释中将配置文件的校验和添加到部署中。这样,部署将有一个不同的散列,并在helm看来本质上是“新的”,从而使其正确更新
sha256sum函数可用于确保在其他文件更改时更新部署的注释部分:
从这里的文档:如果您需要滚动更新而不是立即终止POD,请添加
date: "{{ .Release.Time.Seconds }}"
进入规范/模板/元数据/标签
然后,该版本将进行配置更改,如果设置为spec/stategy/type,则会触发滚动更新
如果您刚刚更改了ConfigMap或Secret,请看一看@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}}
如果您需要零停机部署,我不推荐这种方法。
--recreate pods
标志立即终止部署的所有正在运行的pods。这对存储在存储库中的头盔图表有效吗?我认为这破坏了存储库的用途,所有的图表都必须在本地提取。嗯,不知道你的意思。如果这段代码在helm图表中,而该图表在存储库中,那么它应该可以正常工作。但是它是否适用于Helm工件库,比如S3,其中的文件以mychart-0.1.0.tgz格式保存?据我所知,这没有什么区别。Tiller通过模板运行图表,得出相同的结果。除非我的心智模型在某个地方出错,否则存储在git中的图表和存储在其他地方的图表没有区别。它在这里不起作用。通过描述部署,我可以看到新的批注元数据,但是没有重新创建pod。可能是您犯了与我相同的错误,我不小心将批注放在了部署上(spec.metadata.annotations),pod没有重新启动。他们告诉您将注释放在模板上(spec.template.metadata.annotations),当我将注释移动到模板上时,它就起作用了。
- configMapRef:
name: {{ .Release.Name }}-my-config-v{{ .Values.configVersion.myApp}}