【问题标题】:Helm chart restart pods when configmap changesHelm chart 在 configmap 更改时重新启动 pod
【发布时间】:2019-03-10 13:28:07
【问题描述】:

当有 confimap 或秘密更改时,我正在尝试重新启动 pod。我已经尝试过与以下描述相同的代码:https://github.com/helm/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change 但是,更新 configmap 后,我的 pod 没有重新启动。您知道这里可能做错了什么吗?

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ template "app.fullname" . }}
  labels:
    app: {{ template "app.name" . }}
    {{- include "global_labels" . | indent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ template "app.name" . }}
      release: {{ .Release.Name }}
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yml") . | sha256sum }}
        checksum/secret: {{ include (print $.Template.BasePath "/secret.yml") . | sha256sum }}

【问题讨论】:

    标签: kubernetes yaml kubernetes-helm


    【解决方案1】:

    Helm 和 Kubernetes 都没有为 ConfigMap 更改提供特定的滚动更新。解决方法已经有一段时间了,只是修补触发滚动更新的部署:

    kubectl patch deployment your-deployment -n your-namespace -p '{"spec":{"template":{"metadata":{"annotations":{"date":"$(date)"}}}}}'
    

    你可以看到状态:

    kubectl rollout status deployment your-deployment
    

    请注意,这适用于 nix 机器。直到添加此 feature

    2021 年 5 月 5 日更新

    Helm 和 kubectl 现在提供这个:

    掌舵:https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments

    kubectl:kubectl rollout restart deploy WORKLOAD_NAME

    【讨论】:

    • 非常感谢。即使这不是“开箱即用”功能,Helm 不应该处理这种情况吗?
    • 是的,应该是这样,但我猜 K8s 中并没有这个功能,所以 Helm 中可能也没有解决它。
    • ...问题中的模板已经包含与您对补丁所做的几乎相同的更改,那么手动执行它有什么帮助?
    • 但是问题的变化是一个 ConfigMap,并且从今天开始不会自动触发更新。如果是日期之类的另一个更改,它将触发更新。您也可以通过 helm 更新而不是 ConfigMap 更改来触发它。
    • @Rico 这里的 JSON 参数不太有效(我认为 Stack Overflow 去除了您最初用于命令替换的重音)。给定一个诸如 bash 之类的 shell,它可以工作(在 Mac 和 Ubuntu 上测试):'{"spec":{"template":{"metadata":{"annotations":{"date": '$(date +'%s')' }}}}}' 给出带有日期值的有效 JSON。
    【解决方案2】:

    https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deploymentsHelm3 现在有这个功能了。当 configmap 模板文件发生变化时部署部署。

    【讨论】:

    • 我觉得这应该是当今公认的答案。比手动调用 patch 更简洁、更直接。
    【解决方案3】:

    它对我有用,下面是我的 deployment.yaml 文件中的代码 sn-p,确保您的 configmap 和秘密 yaml 文件与注释中提到的相同:

    spec:
      template:
        metadata:
          annotations:
            checksum/config: {{ include (print $.Template.BasePath "/my-configmap.yaml") . | sha256sum }}
            checksum/secret: {{ include (print $.Template.BasePath "/my-secret.yaml") . | sha256sum }}
    

    【讨论】:

      【解决方案4】:

      我使用此功能https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments 部署了带有 configmap 的 pod。 当我在运行时编辑 configmap 时,它没有触发滚动部署。

      【讨论】:

      • 如果您自己编辑配置,在运行时,在 Helm 应用之间,......那么这是完全正常的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2020-09-30
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多