【问题标题】:kubectl - running rollout restart only when configmap changeskubectl - 仅在 configmap 更改时运行 rollout restart
【发布时间】:2023-01-25 02:49:05
【问题描述】:

我有一个 devops 管道,分为三个步骤:

  • kubectl apply -f configmap.yml
  • kubectl apply -f deployment.yml
  • kubectl rollout restart deployment/test-service

我认为当 configmap.yml 更改时, rollout restart 步骤很有用。但是当只有 deployment.yml 发生变化时,我担心“额外的”rollout restart 步骤没有用,应该避免。

我应该只在 configmap.yml 更改时执行 rollout restart 还是我不应该关心?

【问题讨论】:

    标签: kubernetes continuous-deployment continuous-delivery


    【解决方案1】:

    这不是一个直接的答案,但最终对于评论来说太长了,我认为它是相关的。如果您使用kustomize又名kubectl apply -k),那么你会得到以下行为:

    • ConfigMaps 是在其名称后附加基于内容的哈希生成的
    • Kustomize 将生成的名称替换为您的Deployment
    • 这意味着 Deployment 仅在 ConfigMap 的内容更改时被修改,导致隐式重新部署由 Deployment 管理的 pod。

    这在很大程度上可以让您获得所需的行为,但需要对您的部署管道进行一些更改。

    【讨论】:

      【解决方案2】:

      最佳实践是使用 configmap 的散列来注释部署的 pod。如果 configmap 的内容发生变化,注解也会发生变化,所有 pod 都将滚动更新。如果 configmap 没有改变,什么也不会发生。

      例如。带舵:

      annotations:
        checksum/config: {{ include (print .Template.BasePath "/configmap.yaml") . | sha256sum }}
      

      来自grafana example

      如果您不使用 helm,您可以让脚本在您的管道中创建哈希。

      这样就不再需要推出重新启动步骤。如果 configmap 和/或部署发生变化,Pod 将始终重启。否则什么也不会发生。

      【讨论】:

        【解决方案3】:

        不确定你是注入配置图部署。如果你有安装体积你不需要推出重启根本。它会得到更新自动地.如果使用子路径它不会更新配置图自动地。

        阅读我的文章:Update configmap without restarting POD

        现在如果你能放一个(健康)状况如果有任何变化配置图它应该推出在管道中然后很好。

        没有必要,如果有任何变化部署.yaml它会自动推出新的容器,而不是默认行为部署.

        【讨论】:

        • 即使安装了 configmap,您可能仍需要重新启动——无法保证给定的应用程序无需重新启动即可响应配置文件中的更改。
        • 哦,是的,你是对的,那是在应用程序代码和 arch 上,先生……!谢谢指正..!
        • 如果它是通过 subPath 安装的,则它不会在下一个更新周期更新。
        • 是的,谢谢,subpath 没有自动更新 configmap,更新了文章中提到的答案。
        猜你喜欢
        • 1970-01-01
        • 2018-10-04
        • 2021-10-26
        • 2021-10-28
        • 2022-08-17
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        相关资源
        最近更新 更多