在kubernetes helm上如何用新的配置值替换pod

时间:2017-05-30 17:19:32

标签: docker kubernetes config kubernetes-helm

我正在使用头盔图来部署使用管理配置的“ConfigMap”的pod。

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

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

4 个答案:

答案 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 }}
[...]

来自此处的文档:https://github.com/kubernetes/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change

答案 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}}