Kubernetes 从入门到精通-ReplicaSet控制器
一、RS 核心概念
1.什么是 ReplicaSet?
-
Pod 副本管理器:确保指定数量的相同 Pod 副本始终运行;
-
高可用保障:自动替换失败或被删除的 Pod;
-
扩缩容基础:通过调整副本数实现水平伸缩;
-
Deployment 的底层组件:Deployment 通过管理 ReplicaSet 实现滚动更新。
2.核心功能
3.与 Deployment 的关系
特性 | ReplicaSet | Deployment |
主要职责 | 维护 Pod 副本数 | 管理应用生命周期 |
更新机制 | 无滚动更新能力 | 支持滚动更新和回滚 |
版本控制 | 无版本管理 | 通过 ReplicaSet 快照管理版本 |
直接使用频率 | 低(通常由 Deployment 管理) | 高(生产环境首选) |
4.工作原理
二、ReplicaSet案例详解
1.核心字段说明
- selector.matchLabels:必须与 Pod 模板的 metadata.labels 完全匹配。
- selector.matchExpressions:支持表达式匹配,根据匹配规则满足metadata.labels即可。
- replicas:整数,表示期望运行的 Pod 数量。
- template:与 Pod 定义相同,但不支持 apiVersion 和 kind。
2.案例
[root@master-1 yaml]# cat rs-nginx.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: nginx-rs-v1labels:apps: myweb #rs的标签
spec:#必须存在的Pod副本数replicas: 3# 定义标签选择器,其会基于标签选择器关联Pod,控制pod数量3# 相比于rc资源,rs资源有以下优点:# - 必须写selector;# - 不仅支持标签选择器,还支持表达式匹配;#关键选择器(必须匹配template中的标签)selector:# 定义标签选择器# matchLabels:# apps: v1# 基于表达式匹配matchExpressions:# 定义key的名称- key: apps# 定义valuevalues: - "v1"- "v2"# 定义key和value之间的关系,有以下几种关系:# In:# key的值,在vlaues列表中任意其一即可。# NotIn:# key的值,不能在values列表中。# Exists:# 只有有key就行,value任意。如果是Exists,则不允许定义values字段。# DoesNotExist:# 不能包含指定的key。其他的key和value任意。如果是DoesNotExist,则不允许定义values字段。operator: In#operator: NotIntemplate:metadata:labels: #pod的标签apps: v1env: testspec:containers:- name: nginximage: nginx:1.22.1imagePullPolicy: IfNotPresentports:- containerPort: 80resources:requests:cpu: 100mmemory: 128Mi[root@master-1 yaml]# kubectl apply -f rs-nginx.yaml
如下图所示,删除pod后,rs会自动又创建一个pod,以保障与定义的pod数量相同
3.基础操作
3.1 rs控制器基础操作
#查看rs、pod
[root@master-1 yaml]# kubectl get rs,pods --show-labels -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS
replicaset.apps/nginx-rs-v1 3 3 3 15m nginx nginx:1.22.1 apps in (v1,v2) apps=mywebNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/nginx-rs-v1-6l782 1/1 Running 0 15m 10.244.1.2 node-2 <none> <none> apps=v1,env=test
pod/nginx-rs-v1-bb8vq 1/1 Running 0 13m 10.244.1.3 node-2 <none> <none> apps=v1,env=test
pod/nginx-rs-v1-rqpvd 1/1 Running 0 15m 10.244.0.2 node-1 <none> <none> apps=v1,env=test#查看详细信息
[root@master-1 yaml]# kubectl describe rs nginx-rs-v1#删除rs,会删除所有pod
[root@master-1 yaml]# kubectl delete rs nginx-rs-v1
3.2 扩缩容操作
#手动扩容
[root@master-1 yaml]# kubectl scale rs nginx-rs-v1 --replicas=5#通过编辑文件扩容 修改spec.replicas值
[root@master-1 yaml]# kubectl edit rs nginx-rs-v1
如下图,已成功扩缩容pod
3.3 常见问题排查
- pod未被创建
检查点
资源配额是否充足
节点选择器/污点配置
镜像拉取策略是否正确
ReplicaSet 事件日志
- 多余的 Pod 未被删除
可能原因:
Pod 标签与选择器不匹配
存在孤儿 Pod(手动创建或残留)
多个控制器管理相同 Pod
[root@master-1 yaml]# kubectl describe rs nginx-rs-v1
三、总结
ReplicaSet 是 Kubernetes 中确保 Pod 副本数量的核心控制器:
- 主要职责是维护指定数量的相同 Pod;
- 通过标签选择器识别管理的 Pod;
- Deployment 的底层实现依赖于 ReplicaSet;
- 生产环境中通常不直接使用,而是通过 Deployment 管理;
- 理解 ReplicaSet 工作原理是掌握 Kubernetes 编排的基础。