基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Deployment 和 ReplicaSet 的关系是什么?

知识点图片

在 Kubernetes (K8s) 中,DeploymentReplicaSet 是层级关系。简单来说:Deployment 管理 ReplicaSet,而 ReplicaSet 管理 Pod。

你可以把它们的关系理解为:Deployment 是“老板/项目经理”,ReplicaSet 是“工头/组长”,Pod 是“工人”。

以下是详细的关系解析:

1. 层级结构 (Hierarchy)

Kubernetes 的控制器是通过层级来工作的:

  1. Deployment (最高层): 定义应用的期望状态(比如版本、副本数)。
  2. ReplicaSet (中间层): 确保指定数量的 Pod 副本在运行。
  3. Pod (最底层): 实际运行容器的单元。

2. 核心职责区别

  • ReplicaSet (RS) 的职责:

    • 它的核心任务只有一个:保证 Pod 的数量
    • 如果定义了需要 3 个副本,ReplicaSet 会一直监控。如果有一个 Pod 挂了,它就补一个;如果多了一个,它就杀掉一个。
    • 它不具备复杂的版本更新能力。
  • Deployment 的职责:

    • 它是一个更高级的抽象,用于管理应用的生命周期
    • 它不直接管理 Pod,而是通过控制 ReplicaSet 来间接管理 Pod。
    • 它的核心能力包括:滚动更新 (Rolling Update)回滚 (Rollback)暂停/恢复

3. 它们是如何协作的?(最关键的点)

Deployment 和 ReplicaSet 的关系在应用更新时体现得淋漓尽致。

假设你有一个应用 App-v1,Deployment 会创建一个 ReplicaSet-v1 来管理 3 个 Pod。

当你把镜像更新为 App-v2 时,Deployment 会这样做:

  1. Deployment 创建一个新的 ReplicaSet-v2(初始副本数为 0)。
  2. Deployment 指挥 ReplicaSet-v2 增加 1 个 Pod。
  3. Deployment 指挥 ReplicaSet-v1 减少 1 个 Pod。
  4. 重复这个过程,直到 ReplicaSet-v2 达到 3 个 Pod,而 ReplicaSet-v1 变为 0 个 Pod。

在这个过程中:

  • Deployment 负责制定策略(一次替换几个?更新速度多快?)。
  • ReplicaSet 负责执行命令(具体的创建和删除 Pod)。
  • 旧的 ReplicaSet-v1 通常会被保留(虽然副本数为 0),这是为了方便你执行 回滚 (Undo) 操作。如果你发现 v2 有 bug,Deployment 只需要把 v1 的副本数加回去,把 v2 的减掉即可。

4. 通俗类比

  • Deployment (项目经理): 负责发布新版本计划。他说:“我们要把所有员工的工作服从蓝色换成红色,为了不影响工作,我们要分批次换。”
  • ReplicaSet (工头): 负责具体招人和裁人。
    • 旧工头 (RS-v1) 负责管穿蓝衣服的人。
    • 新工头 (RS-v2) 负责管穿红衣服的人。
  • 过程: 项目经理告诉新工头招 1 个红衣人,告诉旧工头辞退 1 个蓝衣人。最后,所有人都归新工头管,大家都穿红衣服。旧工头虽然手下没人了,但还在公司待命,万一红衣服有问题,项目经理会让他把蓝衣人再招回来。

5. 总结与最佳实践

特性 Deployment ReplicaSet
主要用途 无状态应用的部署、更新、回滚 确保 Pod 副本数量
用户操作 用户直接操作对象 用户通常直接操作
更新策略 支持滚动更新、重建等 不支持(需要手动删除重建)
YAML 定义 kind: Deployment kind: ReplicaSet

结论:
在绝大多数情况下,你只需要编写和操作 Deployment 的 YAML 文件。Kubernetes 会自动为你创建和管理底层的 ReplicaSet。不要手动去修改或删除 ReplicaSet,除非你非常清楚自己在做什么,否则 Deployment 可能会为了恢复期望状态而与你的操作发生冲突。

00:00
00:00