问题描述
我有一个简单的 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 进行滚动升级。”
这将需要在您的集群中安装该工具并向您的部署添加注释。