| 备注 | 修改日期 | 修改人 |
| 创建版本 | 2026-01-03 22:52:41[当前版本] | 文艺范儿 |
注意:RC (replicationcontrollers)是 Kubernetes 早期的 Pod 副本管理控制器,ReplicaSet 是 RC 的升级版,支持更灵活的标签选择器(set-based selectors)。 RS 仅控制匹配标签的 Pod。
ReplicaSet 是 Kubernetes 中确保 Pod 副本数量稳定的控制器,属于 apps/v1API 组,核心作用是:
replicas字段)。与 Deployment 的关系:
场景:创建一个 ReplicaSet,确保集群中始终运行 3 个 Nginx Pod,使用标签 app=nginx-rs标识目标 Pod。
2# 1. yaml配置
[root@k8s-master-01 ~]# vim nginx-rs-basic.yaml
[root@k8s-master-01 ~]# cat nginx-rs-basic.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-rs-basic
namespace: default
labels:
app: nginx-rs # ReplicaSet 自身的标签(用于管理)
spec:
replicas: 3 # 期望副本数:始终保持 3 个 Pod
selector: # 标签选择器:匹配带有 app=nginx-rs 标签的 Pod
matchLabels:
app: nginx-rs
template: # Pod 模板:定义如何创建 Pod
metadata:
labels:
app: nginx-rs # 必须与 selector.matchLabels 一致,否则 RS 无法管理 Pod
spec:
containers:
- name: nginx
image: harbor.wyasw.com/library/nginx:1.21
ports:
- containerPort: 80
# 2. 创建ReplicaSet
[root@k8s-master-01 ~]# kubectl apply -f nginx-rs-basic.yaml
# 3. 验证副本数量
# 查看 ReplicaSet 状态(确认 DESIRED/READY 均为 3)
[root@k8s-master-01 ~]# kubectl get rs nginx-rs-basic -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
nginx-rs-basic 3 3 3 42s nginx harbor.wyasw.com/library/nginx:1.21 app=nginx-rs
# 查看 Pod 列表(确认 3 个 Pod,且标签为 app=nginx-rs)
[root@k8s-master-01 ~]# kubectl get pods -l app=nginx-rs
NAME READY STATUS RESTARTS AGE
nginx-rs-basic-blhn2 1/1 Running 0 55s
nginx-rs-basic-pkccd 1/1 Running 0 55s
nginx-rs-basic-v9g88 1/1 Running 0 55s
# 4. 验证副本稳定性
# 删除 1 个 Pod
[root@k8s-master-01 ~]# kubectl delete pod nginx-rs-basic-blhn2
# 再次查看 Pod 列表(确认仍有 3 个 Pod,且新 Pod 名称不同)
[root@k8s-master-01 ~]# kubectl get pods -l app=nginx-rs
NAME READY STATUS RESTARTS AGE
nginx-rs-basic-m4szl 1/1 Running 0 8s
nginx-rs-basic-pkccd 1/1 Running 0 2m55s
nginx-rs-basic-v9g88 1/1 Running 0 2m55s
场景:基于案例1的 ReplicaSet,将副本数从 3 扩容到 5,再缩容到 2,验证 RS 的扩缩容能力。
# 1. 扩容到 5 个副本
# 方法1:编辑 ReplicaSet(命令式)
kubectl edit rs nginx-rs-basic
修改 spec.replicas: 3→ spec.replicas: 5,保存退出。
# 方法2:patch 命令(声明式)
kubectl patch rs nginx-rs-basic -p '{"spec":{"replicas":5}}'
# 验证扩容结果
kubectl get rs nginx-rs-basic
# 预期 DESIRED/CURRENT/READY 均为 5
# 2. 缩容到 2 个副本
kubectl patch rs nginx-rs-basic -p '{"spec":{"replicas":2}}'
# 验证缩容结果
kubectl get rs nginx-rs-basic
# 预期 DESIRED/CURRENT/READY 均为 2
# 查看 Pod 列表(仅剩 2 个 Pod)
kubectl get pods -l app=nginx-rs
注意:缩容时 RS 会随机删除多余 Pod(无优雅终止策略,直接发送 SIGTERM),生产环境建议用 Deployment 配合 terminationGracePeriodSeconds控制缩容行为。
# 3. 删除rc时会自动删除其创建的Pod
[root@k8s-master-01 ~]# kubectl get rs nginx-rs-basic
NAME DESIRED CURRENT READY AGE
nginx-rs-basic 2 2 2 16m
[root@k8s-master-01 ~]#
[root@k8s-master-01 ~]# kubectl delete rs nginx-rs-basic
replicaset.apps "nginx-rs-basic" deleted from default namespace
[root@k8s-master-01 ~]# kubectl get rs nginx-rs-basic
Error from server (NotFound): replicasets.apps "nginx-rs-basic" not found
[root@k8s-master-01 ~]# kubectl get pods -o wide
No resources found in default namespace.