智能
助手
最大化  清空记录 停止  历史记录
翻译选中文本
选中一段文本后进行翻译
名词解释
选中一段文本后进行名词解释
知识图谱生成
通过图谱展示知识信息
登录用户在知识浏览页面可用
答案生成
AI自动回答一个问答功能中的问题
登录用户在问答浏览页面,且问题开放回答中可用
知识摘要
自动为当前知识生成摘要
知识浏览页面可用
知识问答
针对当前知识进行智能问答
知识浏览面可用
   52  
查询码: 00000226
6. Kubernetes常用资源对象列表-6.8.1 rs(ReplicaSet )控制副本案例
作者: 文艺范儿 于 2026年01月03日 发布在分类 / Docker & K8S / K8S基础 ,于 2026年01月03日 编辑
K8S

6. Kubernetes常用资源对象列表

6.8 常用资源对象案例

6.8.1 rs(ReplicaSet )控制副本案例

注意:RC (replicationcontrollers)是 Kubernetes 早期的 Pod 副本管理控制器ReplicaSet 是 RC 的升级版,支持更灵活的标签选择器(set-based selectors)。 RS 仅控制匹配标签的 Pod。

ReplicaSet 是 Kubernetes 中确保 Pod 副本数量稳定的控制器,属于 apps/v1API 组,核心作用是:

  • 通过 标签选择器(Label Selector) 识别目标 Pod;
  • 对比 当前副本数期望副本数(spec.replicas),自动创建/删除 Pod 以维持一致;
  • 支持 水平扩缩容(修改 replicas字段)。

与 Deployment 的关系:

  • Deployment 管理 ReplicaSet(通过 ReplicaSet 间接管理 Pod),提供滚动更新、回滚等高级能力;
  • ReplicaSet 直接管理 Pod,是更底层的副本控制器(无更新策略,仅负责副本数量)。

案例1:基础副本控制(固定3个pod)

场景:创建一个 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

案例2:扩缩容(动态调整副本数)

场景:基于案例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.
笔记
0人参与


 历史版本

备注 修改日期 修改人
创建版本 2026-01-03 22:52:41[当前版本] 文艺范儿

  目录
    文艺知识分享平台 -V 5.2.5 -wcp