如果图表值发生变化,Helm 升级会滚动重启 Pod

问题描述

我有一个简单的 Helm 图表,其中包含一个 Deployment 和一个 ConfigMap。 ConfigMap 如下所示:

apiVersion: v1
kind: ConfigMap
Metadata:
  name: {{ .Values.APP_NAMESPACE }}-config
data:
  LOGGED_OUT_MSG: "{{ .Values.LOGGED_OUT_MSG }}"

ConfigMap 作为 envfrom 挂载在 Pod 模板中:

...
envFrom:
  - configMapRef:
      name: {{ .Values.APP_NAMESPACE }}-config

对于我的一个非生产环境,我有文件 override.yaml

# override.yaml
LOGGED_OUT_MSG: "You are logged out (DEV)"

然后我像这样进行 Helm 升级

$ helm upgrade -f override.yaml mychart .

我假设会发生的是,如果我对 override.yaml 进行更改并运行上面的 helm upgrade 命令,Helm 会注意到 LOGGED_OUT_MSG 的值已更改并执行滚动重新启动我的 Pod。然而,这不会发生。相反,我必须手动删除 Pod 以便更改生效。

有没有办法运行 helm upgrade 以便 override.yaml 中的更改触发 Helm 滚动重启 Pod?

解决方法

默认情况下无法做到这一点 AFAIK。 您正在寻找 stakater 的 reloader。 “Reloader 可以观察 ConfigMap 和 Secret 中的变化,并对 Pod 及其相关的 DeploymentConfig、Deployment、Daemonset 和 Statefulset 进行滚动升级。”

这将需要在您的集群中安装该工具并向您的部署添加注释。

https://github.com/stakater/Reloader