deployment有几种控制器,是如何关联起来的

ReplicationController

ReplicaSet

ReplicationReplicaSet 是 Kubernetes 中与副本管理相关的两个不同概念,不过在 Kubernetes 中更常用的术语是 ReplicationController 而不是 Replication。我会详细解释 ReplicationControllerReplicaSet 之间的区别。

1. ReplicationController

  • 定义: ReplicationController 是 Kubernetes 中早期的一种控制器,用于确保在集群中有固定数量的 Pod 副本在运行。它会监控 Pod 的状态,并在需要时创建或删除 Pod 以维持所需的副本数量。
  • 功能:
  • 确保集群中运行的 Pod 数量与用户指定的数量一致。
  • 自动恢复失败的 Pod,保持应用程序的高可用性。
  • 用法:
  • ReplicationController 是 Kubernetes 最早引入的一种副本控制机制。它定义了 replicas 字段,用于指定希望运行的 Pod 副本数量。
  • 随着 Kubernetes 的发展,ReplicationController 已逐渐被 ReplicaSet 所取代。

2. ReplicaSet

  • 定义: ReplicaSetReplicationController 的改进版本,是 Kubernetes 中的一种控制器,用于管理 Pod 副本。它提供了更强大的功能,特别是在选择和管理 Pod 时,支持更多的标签选择器(label selectors)。
  • 功能:
  • ReplicationController 类似,ReplicaSet 确保集群中有固定数量的 Pod 在运行。
  • ReplicaSet 支持更灵活的标签选择器(如集合匹配),可以精确控制哪些 Pod 由该 ReplicaSet 管理。
  • 由于 Deployment 是基于 ReplicaSet 实现的,因此 ReplicaSet 通常被间接使用。
  • 用法:
  • ReplicaSet 通常不是直接使用的,用户一般通过 Deployment 来间接创建和管理 ReplicaSet
  • 每次对 Deployment 进行更新时,都会生成一个新的 ReplicaSet 来管理新版本的 Pod。

两者之间的区别

  • 标签选择器: ReplicaSet 支持更复杂的标签选择器(如集合匹配),而 ReplicationController 只支持简单的等式匹配。
  • 应用场景: 由于 ReplicaSetReplicationController 的升级版本,ReplicationController 已逐渐被弃用,推荐使用 ReplicaSet 或通过 Deployment 间接使用 ReplicaSet
  • 管理方式: ReplicaSetDeployment 紧密集成,通常用户通过 Deployment 来管理 ReplicaSet,而 ReplicationController 更常用于早期的 Kubernetes 版本或特定的场景。

总结

  • ReplicationController 是 Kubernetes 早期的 Pod 副本管理控制器,功能较为简单。
  • ReplicaSet 是对 ReplicationController 的改进版本,支持更复杂的标签选择器,并且与 Deployment 紧密集成,用于管理 Pod 副本。

Deployment 通过一套机制来知道并管理哪些 ReplicaSet。这种机制主要依赖于标签选择器(Label Selector)和 Kubernetes 的控制器逻辑。以下是 Deployment 如何确定它管理的 ReplicaSet 的详细解释:

1. 标签选择器(Label Selector)

  • 定义:
  • 每个 Deployment 都有一个标签选择器(Label Selector),用于选择 ReplicaSet 和它们所管理的 Pod。这个选择器根据一组标签来过滤符合条件的资源对象。
  • Deployment 创建一个新的 ReplicaSet 时,它会在 ReplicaSet 和其管理的 Pod 上附加一组标签,这些标签可以唯一标识这个 ReplicaSet 和它所管理的 Pod。
  • 如何识别:
  • Deployment 的标签选择器通常是由用户在定义 Deployment 时设置的,或者由 Kubernetes 自动生成。
  • 这个选择器帮助 Deployment 确定哪些 ReplicaSet 是它管理的。只有符合标签选择器条件的 ReplicaSet 会被 Deployment 识别和管理。

2. ReplicaSet的 Owner Reference

  • 定义:
  • ReplicaSet 会包含一个称为 Owner Reference 的字段,这个字段指向它的所有者,即创建它的 Deployment。通过这个引用关系,Kubernetes 知道 ReplicaSet 是由哪个 Deployment 创建和管理的。
  • 作用:
  • Owner Reference 确保了 ReplicaSet 的生命周期与其对应的 Deployment 绑定在一起。比如,当你删除一个 Deployment 时,Kubernetes 也会自动删除由该 Deployment 创建的所有 ReplicaSet 和相关的 Pod。

3. 滚动更新与版本控制

  • **创建新的 **ReplicaSet:
  • Deployment 进行滚动更新时,它会创建一个新的 ReplicaSet 来部署新的版本的 Pod。新的 ReplicaSet 会使用与 Deployment 关联的标签选择器和 Owner Reference
  • **保留旧的 **ReplicaSet:
  • 在滚动更新过程中,旧的 ReplicaSet 可能会被保留,以便在需要回滚时恢复旧版本的 Pod。Deployment 会通过标签选择器和 Owner Reference 继续管理这些旧的 ReplicaSet

4. Deployment 与 ReplicaSet的层级关系

  • Deployment 是更高级别的控制器,它管理一组 ReplicaSet,而每个 ReplicaSet 又管理一组 Pod。
  • Deployment 通过标签选择器找到并管理符合条件的 ReplicaSet,并通过 Owner Reference 保持对这些 ReplicaSet 的控制。
  • 由于 Deployment 可以管理多个 ReplicaSet,它能够同时处理应用的不同版本,确保滚动更新和回滚的顺利进行。

总结

  • Deployment 通过 标签选择器(Label Selector) Owner Reference 来识别和管理相关的 ReplicaSet
  • 标签选择器用于选择符合条件的 ReplicaSet 和 Pod,而 Owner Reference 维护了 ReplicaSetDeployment 之间的所有权关系。
  • 在更新应用程序时,Deployment 会创建新的 ReplicaSet,并继续管理旧的 ReplicaSet 直到更新完成。

这种机制使得 Deployment 能够有效地管理和控制应用程序的生命周期,保证集群中应用的持续稳定运行。

本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。