ReplicaSet 完整详解
核心概念 ReplicaSet 是 Kubernetes 底层副本控制器,精确维持指定数量的 Pod 副本,由 Deployment 自动创建和管理。
1. 基本定义
- API资源:
apps/v1,简写rs,全称 ReplicaSet(副本集)。 - 核心职责:精确维持集群中指定数量、匹配标签的 Pod 副本。
只做一件事:保证集群里始终有replicas个正常运行的 Pod。 - 定位:底层控制器,几乎不会单独直接创建使用,日常都是由 Deployment 自动创建、管理。
- 层级关系:
Deployment→ 管理多个ReplicaSet→ ReplicaSet 管理一批Pod
2. ReplicaSet 的工作逻辑
2.1. 匹配规则(selector)
RS 通过 selector.matchLabels 筛选归属于自己的 Pod:
- 集群中标签匹配、无所属控制器的 Pod,会被该RS接管;
- Pod标签改动后脱离RS管控;
- 一个Pod只能被一个RS匹配。
2.2. 持续调谐循环(控制回路)
控制器不停对比:期望副本数 spec.replicas vs 当前就绪Pod数量
- 现有Pod < replicas:新建Pod(用template模板创建)
- 现有Pod > replicas:随机删除多余Pod,直到数量匹配
- Pod崩溃、节点宕机、驱逐:RS感知Pod消失,立刻新建补齐副本
2.3. 模板 template
spec.template 是Pod模板,RS创建Pod时复用这份定义;
Deployment修改镜像/配置,会生成全新RS,旧RS保留用于回滚。
3. 标准YAML结构(独立RS示例,仅作理解,生产不单独用)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: web-rs-v1
spec:
# 期望副本数
replicas: 3
# 标签选择器,匹配Pod
selector:
matchLabels:
app: web
version: v1
# Pod创建模板
template:
metadata:
labels:
app: web
version: v1
spec:
containers:
- name: nginx
image: nginx:1.24
关键字段说明:
replicas:期望运行Pod总数;selector:必选,用于筛选Pod,必须和template.labels完全对应;template:Pod模板,定义镜像、探针、资源、存储等。
4. ReplicaSet 和 Deployment 的关系(重点)
4.1. Deployment 不直接操作Pod,只操纵RS
- 初次创建Deployment:自动生成一个RS;
- 修改Deployment镜像/环境变量/容器配置:
- 创建新的ReplicaSet(新版本模板)
- 滚动扩容新RS、逐步缩容旧RS,实现滚动发布
- 回滚操作:重新扩容历史旧RS,缩容当前新版本RS
4.2. 多RS共存现象
执行 kubectl get rs -n ns 能看到多条记录:
- 1个活跃RS(当前业务运行版本,副本数>0)
- 多个历史RS(副本数=0,保存发布记录,用于回滚)
由revisionHistoryLimit控制保留多少历史RS。
4.3. 为什么不直接单独使用ReplicaSet?
RS 只有副本维持能力,缺少发布策略、版本回滚、滚动更新逻辑:
- RS 没有
strategy更新策略;修改template不会自动滚动更新,只会新建Pod,新旧Pod同时存在; - RS 无版本历史记录、无一键回滚能力;
- Deployment封装了发布流程,是无状态业务上层封装,屏蔽RS底层细节。
简单总结:
- ReplicaSet = 底层副本控制器,只负责保副本数量;
- Deployment = 上层发布控制器,管理多个RS实现发布、回滚、零停机更新。
5. ReplicaSet 生命周期状态
- 正常运行:
replicas > 0,持有业务Pod; - 历史闲置:
replicas = 0,Deployment滚动更新后旧RS缩容至0,保留用于回滚; - 彻底删除:删除Deployment时,所有关联RS会被级联删除。
6. 常用操作命令
# 查看所有副本集
kubectl get rs -n namespace
# 查看详细匹配规则、副本数、事件
kubectl describe rs web-796d6597d
# 手动扩缩容(几乎不用,由Deployment控制)
kubectl scale rs web-rs-v1 --replicas=5
# 直接删除RS(不推荐,会删掉所有业务Pod)
kubectl delete rs web-796d6597d
7. ReplicaSet 核心特点总结
- 核心功能:持续维持固定数量、标签匹配的Pod;
- 依赖 selector 绑定Pod,template 创建Pod;
- 无发布、回滚、滚动更新能力,属于底层基础控制器;
- 几乎不会单独创建,由Deployment自动生成、管理;
- Deployment每次更新都会生成新RS,历史RS保留供回滚;
- 区别:RS只管副本数量,Deployment管应用发布全流程。
8. 易混对比
| 对象 | 层级 | 核心能力 | 使用场景 |
| ReplicaSet | 底层 | 维持指定Pod副本数 | Deployment内部自动创建 |
| Deployment | 上层 | 滚动更新、版本回滚、扩缩容、自愈 | 无状态微服务标准使用 |
关联文档