即使 PODS 不受升级影响,“掌舵升级”是否会重新启动它们?

Cha*_*ndu 8 kubernetes kubernetes-helm

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

我的问题是

helm upgrade不受升级影响的 PODS会重启吗?

换一种说法

是否helm upgrade仅在受升级影响时才重新启动 POD?

Dat*_*atz 19

该标志在 Helm 2 中--recreate-pods被标记为已弃用,并在Helm 3 中被移除

Helm 建议添加其他文件的校验和,这些文件可能会像这样更改

      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
Run Code Online (Sandbox Code Playgroud)

或添加带有随机数的注释,强制在每次推出时进行更新:

      annotations:
        rollme: {{ randAlphaNum 5 | quote }}
Run Code Online (Sandbox Code Playgroud)

请参阅 Helm 文档:https : //v3.helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments

  • 当我添加`rollme:{{ randAlphaNum 5 | 在我的所有部署中引用 }}`,`helm Upgrade` 会重新启动所有部署 (2认同)

And*_*own 16

--recreate-pods已在 helm 3 中删除,这肯定引起了一些 helm 用户的注意。

我强制使用部署 Pod 规范中的时间戳重新创建 Pod。请注意,它必须在规范中,这在部署顶层不起作用:

spec:
  template:
    metadata:
      annotations:
        releaseTime: {{ dateInZone "2006-01-02 15:04:05Z" (now) "UTC"| quote }}
Run Code Online (Sandbox Code Playgroud)


jt9*_*t97 10

就我而言,掌舵仅重启受升级影响的 pod

如果您想重新启动所有 pod,您可以使用 --recreate-pods 标志

--recreate-pods -> 如果适用,为资源执行 pods 重启

例如,如果您有仪表板图表,则可以使用此命令重新启动每个 Pod。

helm upgrade --recreate-pods -i k8s-dashboard stable/k8s-dashboard
Run Code Online (Sandbox Code Playgroud)

有一个github 问题为其提供了另一种解决方法

每次需要重新启动 Pod 时,请更改该注释的值。一个好的注释可能是时间戳

首先,向 pod 添加注释。如果您的图表属于部署类型,请在 spec.template.metadata.annotations 中添加注释。例如:

kind: Deployment
spec:
  template:
    metadata:
      labels:
        app: ecf-helm-satellite-qa
      annotations:
        timestamp: "{{ .Values.timestamp }}"
Run Code Online (Sandbox Code Playgroud)

部署那个。现在,每次在 helm 命令中设置时间戳。Kubernetes 将在不停机的情况下推出新的更新。

helm upgrade ecf-helm-satellite-qa . --set-string timestamp=a_random_value
Run Code Online (Sandbox Code Playgroud)

  • Helm 3 中删除了 `--recreate-pods`。(请参阅下面我的回答。) (5认同)