WIll“ Helm Upgrade”是否可以不受升级影响而重新启动PODS?

时间:2019-10-29 06:23:44

标签: kubernetes kubernetes-helm

我的掌舵图有大约12个PODS。当我更改了某些值后执行helm upgrade时,除一个外,所有POD都会重新启动。

我的问题是

helm upgrade即使不受升级影响,也会重新启动PODS吗?

以其他方式放置

只有helm upgrade受升级影响时才重新启动POD吗?

4 个答案:

答案 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