【发布时间】:2019-11-12 14:35:22
【问题描述】:
我正在使用 helm 图表来部署带有“ConfigMap”管理配置的 pod。
我直接编辑 ConfigMap 对配置文件进行更改,然后使用 kubectl delete 删除 pod,以使新配置生效。
有没有简单的方法使用 helm 将正在运行的 pod 替换为新配置而不执行“kubectl delete”命令
【问题讨论】:
标签: docker kubernetes config kubernetes-helm
我正在使用 helm 图表来部署带有“ConfigMap”管理配置的 pod。
我直接编辑 ConfigMap 对配置文件进行更改,然后使用 kubectl delete 删除 pod,以使新配置生效。
有没有简单的方法使用 helm 将正在运行的 pod 替换为新配置而不执行“kubectl delete”命令
【问题讨论】:
标签: docker kubernetes config kubernetes-helm
我们发现使用 --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 }}
[...]
【讨论】:
如果您需要滚动更新而不是立即终止 pod,请添加
date: "{{ .Release.Time.Seconds }}"
进入规范/模板/元数据/标签。
该版本将进行配置更改,如果设置为 spec/stategy/type,则会触发滚动更新。
如果您刚刚更改了 ConfigMap 或 Secret,请查看 https://helm.sh/docs/developing_charts/#automatically-roll-deployments-when-configmaps-or-secrets-change
【讨论】:
你可以运行
helm upgrade --recreate-pods
这样做。
【讨论】:
--recreate-pods 标志会立即终止部署的所有正在运行的 Pod。
@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}}
【讨论】: