Module 03 · Managing Applications with Kubernetes
ReplicaSetReplicaSet 深度解析
定义与功能
看完本视频,您将能够:定义 ReplicaSet、解释 ReplicaSet 的工作原理,以及列出使用 ReplicaSet 的益处。
单 Pod 部署的局限性
如果应用程序部署在单个 Pod 上,它将无法在以下情况下执行某些操作:
- 请求量急剧增加(manifold)或发生中断(outages)。
- 单 Pod 部署无法适应应用程序不断增长的需求。
ReplicaSet 的价值
ReplicaSet 可以解决这些局限性:
- 负载均衡(Load Balancing):实现跨 Pod 的负载均衡。
- 高可用性(High Availability):通过冗余 Pod 消除单点故障,处理中断,最大限度地减少停机时间和服务中断。
- 自动重启/修复:如果出现问题,自动重启部署。
- 核心保证:ReplicaSet 始终确保正确数量的 Pod 处于运行状态。
⚠️ 请注意:ReplicaSet 取代了 ,应优先使用 ReplicaSet。
ReplicaSet 的工作原理
ReplicaSet 总是尝试将副本的实际状态匹配到期望状态。
- 伸缩与冗余:ReplicaSet 通过增加或删除 Pod 来实现伸缩(scaling)和冗余(redundancy),有助于保持可用性(availability)。
- 它会替换失败的 Pod。
- 它会删除多余的 Pod,以维持期望状态。
ReplicaSet 与 Deployment
在集群中创建 Deployment 时,会自动创建一个 ReplicaSet。
| 角色 | 职责 | 推荐用法 |
|---|---|---|
| Deployment | 📢 管理 ReplicaSet,向 Pod 发送声明式更新(declarative updates),并拥有许多其他实用功能。 | 强烈推荐使用 Deployment 来管理 ReplicaSet。 |
| ReplicaSet | 维持 Pod 副本数量。 | 推荐由 Deployment 管理,而不是作为独立的组件。 |
通过标签管理 Pod
Kubernetes 的设计宗旨是保持对象类型的独立性。因此:
- ReplicaSet 不拥有任何 Pod。
- 它使用 Pod 标签(pod labels)来决定获取(acquire)哪些 Pod,从而使部署达到期望状态。
# 示例:部署模板 (Deployment Template)
metadata:
labels:
# 定义标签
spec:
# 定义 Pod 候选者的规范
- 模板元数据(metadata)定义了潜在 Pod 候选者(potential pod candidates)的标签和规范(spec)。

创建与操作 ReplicaSet
验证 ReplicaSet 的自动创建
- 创建一个 Deployment。
- 使用
get ReplicaSet命令验证 ReplicaSet 是否已自动生成。
- 默认情况下,ReplicaSet 只会复制到一个 Pod。
- 描述(
describe)Pod,您将看到 Pod 的详细信息,以及它是由同一个 ReplicaSet 控制的。

从头创建 ReplicaSet
要从头创建 ReplicaSet,请应用一个 YAML 文件,并将 kind 属性设置为 ReplicaSet,如下所示:
YAML
kind: ReplicaSet
# ... 其他配置
spec:
replicas: 1 # 定义副本数量
- 如果将
replicas定义为 1,您将得到一个 Pod。这类似于在 YAML 文件中未指定副本数量而创建默认 Pod。
步骤演示
- 使用
create ReplicaSet命令创建 ReplicaSet。
- 输出显示 ReplicaSet 已创建。
- 使用
get pods命令确认 Pod 已创建并处于Running状态。 - 使用
get rs命令(rs是 ReplicaSet 的简称)查看名称和其他详情。
📣 再次提醒:建议创建包含 ReplicaSet 的 Deployment,而不是创建独立的 ReplicaSet。

伸缩 Deployment

在伸缩部署之前,必须确保您已有一个 Deployment 和一个 Pod。
- 使用
create命令创建一个 Deployment。
- 输出确认 Deployment 已创建。
- Deployment 默认会创建一个 Pod,您可以使用
get pods命令确认。 - 使用
get deploy命令查看 Deployment 详情,例如:部署名称为hello-kubernetes。
- 使用
scale命令伸缩 Deployment,并设置期望的副本数量。
- 示例:将副本数量设置为 3。
- 输出确认部署已伸缩。
- 使用
get pods命令,您将看到三个 Pod 正在运行。- ReplicaSet 新创建了两个 Pod(例如:一个以
5mflw结尾,另一个以hbt7v结尾)。
- ReplicaSet 新创建了两个 Pod(例如:一个以


ReplicaSet 如何维护期望状态
ReplicaSet 总是努力将实际状态匹配到期望状态。
维护:删除 Pod
- 使用
get pods命令,确认三个 Pod 正在运行。 - 使用
delete pod命令删除其中一个 Pod(例如:以5mflw结尾的 Pod)。 - 观察:
- 期望状态与实际状态不匹配。
- ReplicaSet 自动用一个新的 Pod 替换被删除的 Pod。
- 再次使用
get pods命令。
- 输出显示 ReplicaSet 立即创建了一个新 Pod(例如:以
6lw4r结尾)。 - Pod 总数恢复到三个,ReplicaSet 维护了期望状态。
维护:手动创建 Pod
- 使用
get pods命令,确认三个 Pod 正在运行。 - 使用
create pod命令手动创建一个 Pod(例如:以mx9rp结尾的 Pod)。 - 再次使用
get pods命令。
- 输出显示现在有四个 Pod。
- 期望状态与实际状态不匹配。
- ReplicaSet 会将新创建的 Pod(例如:以
mx9rp结尾的 Pod)标记为删除并自动移除。 - 再次使用
get pods命令。
- 输出显示 Pod 总数恢复到三个。
- ReplicaSet 再次维护了期望状态。
总结要点
| 序号 | 知识点 | 细节 |
|---|---|---|
| 1 | 高可用性 | ReplicaSet 通过冗余提供高可用性。 |
| 2 | 伸缩能力 | ReplicaSet 通过创建或删除 Pod 来实现伸缩。 |
| 3 | 创建方式 | 可以使用 CLI 或 YAML 描述符创建 ReplicaSet。 |
| 4 | 核心原则 | ReplicaSet 始终尝试将实际状态匹配到期望状态。 |
| 5 | 最佳实践 | 推荐使用 Deployment 来管理 ReplicaSet,而不是直接使用 ReplicaSet。 |