Kubernetes

ReplicaSet 完整详解

·7 分钟阅读·2420 字
📋 目录

ReplicaSet 完整详解

核心概念 ReplicaSet 是 Kubernetes 底层副本控制器,精确维持指定数量的 Pod 副本,由 Deployment 自动创建和管理。

1. 基本定义

  1. API资源apps/v1,简写 rs,全称 ReplicaSet(副本集)。
  2. 核心职责:精确维持集群中指定数量、匹配标签的 Pod 副本。
    只做一件事:保证集群里始终有 replicas 个正常运行的 Pod。
  3. 定位:底层控制器,几乎不会单独直接创建使用,日常都是由 Deployment 自动创建、管理。
  4. 层级关系:
    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数量

  1. 现有Pod < replicas:新建Pod(用template模板创建)
  2. 现有Pod > replicas:随机删除多余Pod,直到数量匹配
  3. 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

关键字段说明:

  1. replicas:期望运行Pod总数;
  2. selector:必选,用于筛选Pod,必须和template.labels完全对应;
  3. template:Pod模板,定义镜像、探针、资源、存储等。

4. ReplicaSet 和 Deployment 的关系(重点)

4.1. Deployment 不直接操作Pod,只操纵RS

  • 初次创建Deployment:自动生成一个RS;
  • 修改Deployment镜像/环境变量/容器配置:
  1. 创建新的ReplicaSet(新版本模板)
  2. 滚动扩容新RS、逐步缩容旧RS,实现滚动发布
  • 回滚操作:重新扩容历史旧RS,缩容当前新版本RS

4.2. 多RS共存现象

执行 kubectl get rs -n ns 能看到多条记录:

  • 1个活跃RS(当前业务运行版本,副本数>0)
  • 多个历史RS(副本数=0,保存发布记录,用于回滚)
    revisionHistoryLimit 控制保留多少历史RS。

4.3. 为什么不直接单独使用ReplicaSet?

RS 只有副本维持能力,缺少发布策略、版本回滚、滚动更新逻辑:

  1. RS 没有 strategy 更新策略;修改template不会自动滚动更新,只会新建Pod,新旧Pod同时存在;
  2. RS 无版本历史记录、无一键回滚能力;
  3. Deployment封装了发布流程,是无状态业务上层封装,屏蔽RS底层细节。

简单总结:

  • ReplicaSet = 底层副本控制器,只负责保副本数量;
  • Deployment = 上层发布控制器,管理多个RS实现发布、回滚、零停机更新。

5. ReplicaSet 生命周期状态

  1. 正常运行:replicas > 0,持有业务Pod;
  2. 历史闲置:replicas = 0,Deployment滚动更新后旧RS缩容至0,保留用于回滚;
  3. 彻底删除:删除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 核心特点总结

  1. 核心功能:持续维持固定数量、标签匹配的Pod;
  2. 依赖 selector 绑定Pod,template 创建Pod;
  3. 无发布、回滚、滚动更新能力,属于底层基础控制器;
  4. 几乎不会单独创建,由Deployment自动生成、管理;
  5. Deployment每次更新都会生成新RS,历史RS保留供回滚;
  6. 区别:RS只管副本数量,Deployment管应用发布全流程。

8. 易混对比

对象层级核心能力使用场景
ReplicaSet底层维持指定Pod副本数Deployment内部自动创建
Deployment上层滚动更新、版本回滚、扩缩容、自愈无状态微服务标准使用

关联文档