RC/RS 在 Kubernetes 中的角色类比

假设你开了一家奶茶店,需要始终保持 3 个店员在岗。如果有人请假(Pod 崩溃),就得立刻叫替补来;如果人多了,就得让多余的人下班。这个管理店员数量的角色,就是 RC/RS 在 K8s 里的作用。

  • 店员 → K8s 里的 Pod(比如运行 Nginx 的容器)
  • 你(店长) → RC/RS 控制器
  • 始终保持 3 个店员 → RC/RS 里的 replicas: 3(期望副本数)

理解 RS 的工作流程

定义招聘标准

你需要告诉店员统一穿红色工服(标签),方便识别哪些人是自己店的。对应到 K8s 中,RS 会通过标签选择器定义要管理哪些 Pod。

  • 所有店员必须穿红色工服(Pod 必须带 app: milktea 标签)
  • 只能是全职(排除带 type: parttime 标签的人)
维持店员数量
  • 一开始没人 → 按招聘标准招 3 个穿红工服的店员(创建 3 个 Pod)
  • 有人请假(Pod 崩溃)→ 发现只有 2 人在岗,立刻招 1 个补上(RS 自动新建 1 个 Pod)
  • 突然来了 5 人(Pod 多了)→ 让多余的 2 人下班(RS 自动删除 2 个 Pod)
  • 店铺扩张(需要 5 个店员)→ 修改招聘计划(replicas: 5),RS 会自动多招 2 人
核心工作逻辑

RS 会每秒循环做两件事:

  1. 统计当前带 app: milktea 标签的 Pod 数量
  2. 对比期望数量(replicas: 3),多了就删,少了就按模板新建

部署 RS 实例

创建 YAML 配置文件
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

执行部署命令
kubectl apply -f nginx-rs.yaml

验证部署结果
kubectl get rs
kubectl get pods -l app=nginx

测试 RS 功能

模拟 Pod 故障
kubectl delete pod nginx-rs-abc123

RS 会自动检测到 Pod 数量不足,并创建新的 Pod 替代。

扩展服务规模
kubectl scale rs nginx-rs --replicas=5

RS 会自动创建 2 个新的 Pod 以满足扩展需求。

RC 与 RS 的区别

  • RC(老店长):只能按简单规则管理 Pod(如 app=nginx
  • RS(新店长):支持更复杂的标签选择规则(如 app in (nginx, apache)

为什么推荐使用 Deployment

Deployment 是更高层次的抽象,它:

  • 自动创建和管理 RS
  • 支持滚动更新和版本回滚
  • 提供更完善的应用生命周期管理

就像区域经理管理多个店长,Deployment 管理多个 RS,而 RS 管理具体的 Pod。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐