Skip to content

控制器-ReplicaSet(rs)

ReplicaSet概述

ReplicaSet(副本集)是 Kubernetes 中的核心控制器,其首要任务是确保指定数量的 Pod 副本始终在集群中运行。 它常作为 Deployment 的幕后支撑,负责维护应用的稳定副本数,是 Kubernetes 实现高可用性和自我修复能力的基础。

ReplicaSet 的核心机制

ReplicaSet 自动为您处理副本数量的“多退少补”,具体包含以下核心能力:

  • 确保副本数量:您只需在 YAML 中通过 replicas 字段声明需要的 Pod 数量,ReplicaSet 便会持续监控,当Pod被误删或节点故障时自动创建新Pod,维持预期数量。
  • 自我修复能力:能自动发现并替换失败或失联的 Pod,无需管理员介入。
  • 声明式扩缩容:支持水平扩展,直接修改 replicas 或运行 kubectl scale 命令,即可实时调整实例数量以应对负载变化。
  • 灵活的标签选择:采用 matchLabels(基于键值对)的标签选择器来管理 Pod,增强了资源匹配的灵活性。
  • 支持自动伸缩:可以与水平Pod自动伸缩器配合,根据 CPU 等指标动态调整副本数,实现弹性伸缩。

ReplicaSet 的资源清单示例

YAML 文件是操作 ReplicaSet 的主要方式之一。以下是一个维护 3 个 Nginx Pod 副本的完整示例:

Yaml
apiVersion: apps/v1        # 指定 API 版本
kind: ReplicaSet           # 资源类型为 ReplicaSet
metadata:
  name: nginx-replicaset   # ReplicaSet 的名称
  labels:
    app: nginx
spec:
  replicas: 3              # 定义 3 个 Pod 副本
  selector:                # 指定管理哪些 Pod
    matchLabels:
      app: nginx           # 必须匹配下方模板中的 labels
  template:                # Pod 模板
    metadata:
      labels:
        app: nginx         # 此 labels 必须与 selector.matchLabels 一致
    spec:
      containers:
      - name: nginx
        image: nginx:1.21

ReplicaSet 与 Deployment 的关系

在生产环境中,我们通常不直接使用 ReplicaSet,而是使用 Deployment 来间接管理它。

特性ReplicaSetDeployment
角色底层副本管理模块高层部署管理工具
滚动更新不支持支持,确保应用无中断升级
版本回滚不支持支持,可一键回退到历史版本
生产建议作为底层构建块直接使用,是生产环境的最佳实践

您在 kubectl 中创建 Deployment 时,Kubernetes 会在后台自动创建并管理一个或多个 ReplicaSet,用于支持应用的发布、回滚等操作。

常用 kubectl 操作

除了创建,日常管理中也会经常使用以下命令来与 ReplicaSet 交互:

操作kubectl 命令
查看kubectl get rskubectl get replicaset
详情kubectl describe rs <rs名称>
扩缩容kubectl scale rs <rs名称> --replicas=5
删除kubectl delete rs <rs名称>
自动伸缩kubectl autoscale rs <rs名称> --min=3 --max=10 --cpu-percent=50

主要限制与使用原则

  • 主要限制

    • 不支持滚动更新:直接修改 ReplicaSet 的 Pod 模板会导致其管理的所有 Pod 被立即且同时重建,这会引发服务中断。
    • 不支持版本回滚:ReplicaSet 本身不具备版本管理能力,一旦更新失败,恢复过程复杂。
    • 历史版本管理缺失:Deployment 在每次更新时会生成一个新的 ReplicaSet 并保留旧版本,这构成了其回滚功能的基础,而 ReplicaSet 自身没有这种机制。
  • 核心使用原则

    • 尽量使用 Deployment:官方的核心建议是,除非有特殊需求,否则生产环境应始终使用 Deployment 而非直接操作 ReplicaSet。