Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 在kubernetes头盔上,如何用新的配置值替换pod_Docker_Kubernetes_Config_Kubernetes Helm - Fatal编程技术网

Docker 在kubernetes头盔上,如何用新的配置值替换pod

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中解决这一问题的问题仍然悬而未决:

我正在使用舵图部署吊舱,并使用“配置图”管理配置

我直接编辑ConfigMap以更改配置文件,然后使用kubectl delete删除POD,以使新配置生效

使用helm有没有简单的方法可以用新配置替换正在运行的pod,而无需执行“kubectl delete”命令

舵手升级-重建吊舱


要做到这一点。

我们发现,使用
--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}}