首页 > 解决方案 > 创建部署时将 pod-template-hash 添加到副本集名称的确切原因是什么?

问题描述

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment提到 adeployment创建 areplicaSet但将 a 附加pod-template-hash到 the 的名称replicaSet并添加pod-template-hashasreplicaSet的标签。

我最好的猜测是deployment创建多个replicaSets,并且这个哈希确保副本不重叠。那是对的吗?

标签: kubernetesdeploymentreplicaset

解决方案


正确,文档很好地说明了这一点:

pod-template-hash标签由 Deployment 控制器添加到 Deployment 创建或采用的每个 ReplicaSet 。

此标签确保 Deployment 的子 ReplicaSet 不会重叠。它是通过PodTemplate对 ReplicaSet 进行哈希处理并使用生成的哈希值作为添加到 ReplicaSet 选择器、Pod 模板标签以及 ReplicaSet 可能具有的任何现有 Pod 中的标签值来生成的。

由于许多不同的原因,这是必要的:

  • 当您应用新版本的部署时,根据部署的配置方式和探测方式,以前的 Pod / Pod 可能会一直运行,直到新的 Pod / Pod 没有运行和准备好,然后才会优雅地终止。因此,可能会发生不同ReplicaSet(以前和当前)的 Pod 同时运行。
  • 部署历史记录可供查阅,如果当前版本停止正常运行(例如,您更改了需要使用的图像并且它只是错误地崩溃),您可能还想回滚到较旧的版本。每个修订版都有自己的 ReplicaSet,可以根据需要进行扩展或缩减,如文档中所述

推荐阅读