我的掌舵图有大约12个PODS。当我更改了某些值后执行helm upgrade
时,除一个外,所有POD都会重新启动。
我的问题是:
helm upgrade
即使不受升级影响,也会重新启动PODS吗?
以其他方式放置:
只有helm upgrade
受升级影响时才重新启动POD吗?
答案 0 :(得分:7)
标志 --recreate-pods
在Helm 2中被标记为已弃用,并在Helm 3中被移除。
Helm建议添加其他可能已更改为
的校验和
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
或添加带有随机数的注释,该注释会在每次展示时强制进行更新:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
请参阅Helm文档:https://v3.helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
答案 1 :(得分:1)
就我而言,舵只重启受升级影响的吊舱
如果要重新启动所有Pod,可以使用--recreate-pods标志
-recreate-pods->如果适用,对资源执行Pod重新启动
例如,如果您有仪表盘图,则可以使用此命令重新启动每个吊舱。
helm upgrade --recreate-pods -i k8s-dashboard stable/k8s-dashboard
有一个github issue为它提供了另一种解决方法
每次需要重新启动Pod时,请更改该注释的值。一个很好的注释可能是时间戳
首先,将注释添加到窗格中。如果您的图表属于Deployment类,则将注释添加到spec.template.metadata.annotations。例如:
kind: Deployment
spec:
template:
metadata:
labels:
app: ecf-helm-satellite-qa
annotations:
timestamp: "{{ .Values.timestamp }}"
部署它。现在,每次您在helm命令中设置时间戳记时。 Kubernetes将在不停机的情况下推出新的更新。
helm upgrade ecf-helm-satellite-qa . --set-string timestamp=a_random_value
答案 2 :(得分:0)
--recreate-pods
已在头盔3中删除,并且肯定引起了some helm users的关注。
我强制使用部署Pod规范中的时间戳来重新创建Pod。请注意,它必须在规范中,这在部署顶层不起作用:
spec:
template:
metadata:
annotations:
releaseTime: {{ dateInZone "2006-01-02 15:04:05Z" (now) "UTC"| quote }}
答案 3 :(得分:0)
您需要先删除作业, 并运行
helm history <release_name>
helm rollback <release_name> <number> --recreate-pods