Administrator
发布于 2026-08-14 / 5 阅读
0
0

第五章.k8sPod控制器-Pod控制器1

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=0e85828f19fba96334ebaebea2da3e2f&p=23

第五章 k8s Pod控制器(一):RC与RS控制器

课程引入

  • 上一节讲解了控制器的核心概念:控制器可理解为Pod的“监护人”,核心职责是将实际运行的Pod状态持续调谐到用户定义的期望状态,若Pod不符合要求会将其终止或调整至符合预期。
  • Pod控制器包含多种类型,本章首先讲解功能具备替换关系的RC(ReplicationController)与RS(ReplicaSet)两类Pod控制器。

1. RC(ReplicationController)基础概念

  • 全称为ReplicationController,官方提供别名简写为RC,后续可通过get rc等简写命令操作资源;编写资源清单时官方明确建议所有字段写完整形式,不要使用缩写或别名,也可通过kubectl explain rc查看RC的所有可用字段与对应描述,直接复制即可使用。
  • 核心作用:保障容器应用的Pod副本数与用户定义的期望副本数保持一致,属于持续调谐过程,不断将实际Pod数量趋向目标期望值。
  • 核心特性:
    • 若Pod异常退出,RC会自动创建新Pod替代;若Pod数量超出期望值,会自动回收多余Pod。
    • 若集群资源不足,无法满足极高期望副本数(如100万)时,RC会持续尝试创建,无法真正达到目标值。

2. RC控制器实操演示

2.1 实验环境准备

  • 先清理历史实验残留:执行kubectl get pod确认无Pod资源;执行kubectl get svc发现存在2个残留Service资源,执行kubectl delete svc <service名1> <service名2>删除残留Service,删除命令支持批量指定多个资源对象名称。

2.2 RC资源清单核心字段说明

  • 提前准备RC资源清单文件rc-demo.yaml,核心字段含义如下:
    • apiVersion:使用核心组v1版本,核心组可省略书写。
    • kind:资源类型为RC(ReplicationController),建议写完整类型。
    • metadata:定义RC的名称、标签等元数据。
    • spec(期望配置):
      • replicas:定义期望的Pod副本数,注意是Pod的总数量而非单个Pod内的容器数量。
      • selector:标签选择器,要求必须是目标Pod标签的子集,否则RC会报错无法创建(旧版本会进入无限循环创建不匹配的Pod,新版增加了前置校验逻辑避免该问题)。
      • template:Pod模板,是RC的子属性,用于定义RC创建的Pod的完整配置,模板内metadata.labels必须与selector匹配,满足子集关系。
      • template.spec:Pod的期望配置,包含容器组、环境变量、端口等配置,支持复用Pod的就绪探测、存活探测、钩子等能力。
    • 环境变量配置:通过env关键字定义,可干预容器运行结果,示例中定义了GET_HOST_FROM值为DNS、张三值为123的2个环境变量,以及80端口暴露配置。

2.3 RC创建与特性验证

  • 创建RC:执行kubectl create -f rc-demo.yaml创建RC资源,执行kubectl get rc可看到RC的期望副本数、实际副本数均为3,符合预期。
  • 执行kubectl get pod可看到RC创建的3个Pod,命名格式为<RC名称>-<MD5值>。
  • 核心特性验证:
    1. 自动恢复副本数:手动删除1个Pod后,RC会自动创建新的Pod,数量恢复为3,新Pod命名与删除的Pod不同。
    2. 标签匹配规则:执行kubectl get pod --show-labels可查看Pod的标签信息
      • 给Pod新增标签(不删除原有匹配selector的标签):Pod数量不变,仍属于RC管理范围。
      • 执行kubectl label pod <pod名> app=薪享宏福 --overwrite修改Pod的selector匹配标签的key-value值(需加--overwrite参数覆盖已有标签):RC会判定该Pod不属于自身管理,自动创建新Pod补足副本数,原Pod不再被RC管理(可类比为孩子改姓后不再被原监护人管理,监护人会自动补充新的孩子以满足数量要求)。
      • 将修改后的标签改回原值:该Pod重新被RC管理,此时Pod总数变为4,RC会自动删除最早创建的Pod,将数量恢复为3,优先保留运行时间更久、可能承载更多业务数据的Pod(可类比为公司裁员优先淘汰刚入职、业务价值更低的员工)。
    3. 动态调整副本数:执行kubectl scale rc rc-demo --replicas=10,RC会自动将Pod数量调整为10;执行kubectl scale rc rc-demo --replicas=5,Pod数量会恢复为5,无需手动创建/删除多个Pod资源,大幅降低管理成本。

3. RS(ReplicaSet)控制器基础

  • 新版本Kubernetes官方建议使用RS(ReplicaSet)取代RC,二者核心功能一致,仅名称和选择器逻辑有差异。
  • RS资源清单核心字段说明:
    • apiVersion:属于apps/v1版本组。
    • kind:资源类型为ReplicaSet,简写为RS。
    • spec(期望配置):
      • replicas:定义期望Pod副本数,示例中为3。
      • selector:可通过kubectl explain rs.spec.selector查看RS选择器的可用字段与含义,其下包含两类配置:
        • matchLabels(匹配标签):与RC的选择器逻辑一致,要求Pod标签是选择器标签的子集即可匹配。
        • matchExpressions(匹配运算符):支持更灵活的集合运算逻辑,可通过实验进一步演示用法。

AI 总结

本章核心讲解了Kubernetes Pod控制器的两类核心成员RC与RS的核心逻辑、实操方法与特性:RC作为最早的Pod副本控制器,核心能力是保障Pod副本数与期望值一致,支持自动恢复异常Pod、动态调整副本数,需满足标签选择器与Pod标签的子集关系;RS是RC的官方替代方案,选择器支持更灵活的匹配规则,二者核心调谐逻辑一致,可大幅降低多副本Pod的管理成本。


评论