9

我正在使用 helm 图表来部署带有管理配置的“ConfigMap”的 pod。

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

是否有任何简单的方法使用helm用新配置替换正在运行的 pod 而无需执行“ kubectl delete ”命令

4

4 回答 4

25

我们发现 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 }}
[...]

从这里的文档:https ://helm.sh/docs/charts_tips_and_tricks/#automatically-roll-deployments-when-configmaps-or-secrets-change

于 2018-06-12T07:52:30.517 回答
4

如果您需要滚动更新而不是立即终止 pod,请添加

date: "{{ .Release.Time.Seconds }}"

进入规范/模板/元数据/标签。

然后,该版本将进行配置更改,如果设置为 spec/stategy/type,则会触发滚动更新。

如果您刚刚更改了 ConfigMap 或 Secret,请查看https://helm.sh/docs/developing_charts/#automatically-roll-deployments-when-configmaps-or-secrets-change

于 2019-03-27T14:05:02.960 回答
3

你可以跑

掌舵升级 --recreate-pods

去做这个。

于 2017-05-30T19:13:31.827 回答
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}}
于 2019-09-07T00:54:52.490 回答