繁体   English   中英

kubectl - 仅在 configmap 更改时运行 rollout restart

[英]kubectl - running rollout restart only when configmap changes

我有一个 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还是我不应该关心?

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

  • ConfigMaps生成时在其名称后附加基于内容的 hash
  • Kustomize 将生成的名称替换为您的Deployment
  • 这意味着Deployment仅在ConfigMap的内容发生变化时才会被修改,从而导致隐式重新部署由Deployment管理的 pod。

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

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

例如带头盔:

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

来自grafana 示例

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM