Kubernetes-控制器介绍

在 Kubernetes(K8s)的容器编排体系中,** 控制器(Controller)** 是实现资源自动化管理的核心组件。它们通过 "期望状态" 与 "实际状态" 的持续比对,自动完成 Pod 的创建、更新、删除等操作,让应用运维更高效。本文将拆解 K8s 中最常用的 7 类控制器,帮你理清它们的适用场景与核心能力。

一、ReplicationController(RC):副本管理的 "初代元老"

核心定位 :K8s 最早的副本管理控制器,用于保证指定数量的 Pod 始终运行。工作逻辑 :通过标签选择器匹配 Pod,若实际 Pod 数量少于replicas(期望副本数),则自动创建新 Pod;若多于则删除多余 Pod。局限性 :仅支持精确标签匹配,不支持集合式标签(如matchExpressions),且功能已被ReplicaSet替代,目前仅用于兼容旧版本。

二、ReplicaSet(RS):副本管理的 "主力选手"

核心定位 :ReplicationController 的升级替代版,是 K8s 副本管理的基础控制器。核心能力

  • 支持更灵活的标签选择器(精确匹配 + 集合匹配,如matchExpressions: {key: app, operator: In, values: [todo-list]});
  • 持续维护replicas指定的 Pod 数量,故障 Pod 会被自动重建;
  • 可配合Deployment实现滚动更新,但不建议单独使用(缺乏版本回滚等高级能力)。

典型场景:作为 Deployment 的 "底层组件" 存在,很少单独部署。

三、Deployment:无状态应用的 "最佳拍档"

核心定位 :K8s 中最常用的控制器,专为无状态应用 设计,基于 ReplicaSet 实现更丰富的运维能力。核心能力

  1. 滚动更新:逐步替换旧 Pod 为新 Pod,避免服务中断;
  2. 版本回滚:可回退到任意历史版本(基于 ReplicaSet 的版本记录);
  3. 自愈能力:Pod 故障时自动重建,始终维持期望副本数;
  4. 扩缩容 :支持手动 / 自动调整replicas数量。

典型场景 :Web 服务、API 接口等无状态应用的部署(如本文中的todo-list服务)。

四、DaemonSet:节点级任务的 "专属工具"

核心定位 :保证每个(或指定)节点上运行且仅运行一个 Pod 的控制器。核心能力

  • 新节点加入集群时,自动在该节点创建对应的 Pod;
  • 节点从集群移除时,自动删除该节点上的 Pod;
  • 支持节点选择器(nodeSelector),仅在匹配标签的节点上部署。

典型场景:节点监控(如 Prometheus Node Exporter)、日志采集(如 Fluentd)、网络插件(如 Calico)等需要在每个节点运行的组件。

五、Job:一次性任务的 "执行者"

核心定位 :用于运行一次性批处理任务 ,任务完成后 Pod 自动终止。核心能力

  • 任务成功完成后,Pod 状态变为Completed
  • 支持backoffLimit(任务失败重试次数);
  • 支持parallelism(并行执行的 Pod 数量)。

典型场景:数据备份、报表生成、临时计算(如前文的 "计算 2000 位圆周率")。

六、CronJob:定时任务的 "调度员"

核心定位 :基于 Job 实现的定时任务控制器 ,类似 Linux 的crontab核心能力

  • 通过schedule字段配置 Cron 表达式(如*/1 * * * *表示每分钟执行一次);
  • 自动创建 Job 执行定时任务;
  • 可配置历史任务的保留数量(避免资源堆积)。

典型场景 :定时数据同步、定时日志清理、定时接口调用(如本文中定时请求todo-list的接口)。

七、StatefulSet:有状态应用的 "守护者"

核心定位 :专为有状态应用 设计的控制器,保证 Pod 的 "身份唯一性" 与 "稳定网络标识"。核心能力

  1. 稳定的 Pod 名称 :Pod 名称按[StatefulSet名称]-[序号]格式生成(如mysql-0mysql-1);
  2. 稳定的网络标识 :每个 Pod 拥有唯一的 DNS 域名(如mysql-0.mysql-headless.default.svc.cluster.local);
  3. 稳定的存储 :配合PersistentVolumeClaim模板,保证 Pod 重建后仍能挂载原存储卷;
  4. 有序操作:扩容时按序号递增创建,缩容时按序号递减删除,更新时支持有序滚动。

典型场景:数据库(MySQL、MongoDB)、消息队列(Kafka)等需要稳定身份与存储的应用。

八、Horizontal Pod Autoscaler(HPA):自动扩缩容的 "智能管家"

核心定位 :基于资源使用率(或自定义指标)自动调整 Pod 副本数 的控制器。核心能力

  • 支持 CPU、内存等资源指标(如 "CPU 使用率超过 50% 时扩容");
  • 支持自定义指标(如 "QPS 超过 1000 时扩容");
  • 可配置扩缩容的最小 / 最大副本数。

典型场景:流量波动较大的应用(如电商平台的促销活动),自动应对流量峰值。

总结:控制器如何选?

控制器类型 核心场景 关键特性
ReplicaSet 基础副本管理(少用) 灵活标签选择器
Deployment 无状态应用部署 滚动更新、版本回滚
DaemonSet 节点级任务 每个节点一个 Pod
Job 一次性批处理任务 任务完成后终止
CronJob 定时任务 基于 Cron 表达式调度
StatefulSet 有状态应用部署 稳定身份、存储、网络
HPA 自动扩缩容 基于指标动态调整副本数

K8s 的控制器体系覆盖了从无状态到有状态、从一次性任务到长期服务的全场景需求,掌握它们的适用场景,是高效使用 K8s 的关键~

相关推荐
小白不想白a21 小时前
pod调度--预选阶段(重点说容忍)
k8s·运维开发
_运维那些事儿3 天前
GitLabCI-CD入门
运维·ci/cd·容器·云计算·k8s·运维开发
yumenai_4 天前
【K8s 避坑指南】2026 最新 Kubernetes v1.28 + Containerd 安装全流程(内网/离线通用版)
ubuntu·云原生·容器·kubernetes·k8s
玄德公笔记4 天前
Prometheus监控k8s的metric详解(第二版)-01-scrape 指标抓取
kubernetes·k8s·prometheus·监控·metric·scrape·k8s监控
岁岁种桃花儿6 天前
详解kubectl get replicaset命令及与kubectl get pods的核心区别
运维·nginx·容器·kubernetes·k8s
Paraverse_徐志斌8 天前
K8S HPA + KEDA 弹性伸缩消费者解决 MQ 消息积压
容器·kafka·kubernetes·k8s·linq·hpa·keda
linweidong8 天前
K8s节点保卫战:基于Node Local DNS架构的磁盘自愈系统设计
运维·docker·云原生·容器·架构·kubernetes·k8s
2301_810746318 天前
CKA冲刺40天笔记 - day10 K8S namespace
笔记·容器·kubernetes·k8s
伞啊伞9 天前
HPA + Helm
k8s
孤岛悬城9 天前
64 K8s安全机制
kubernetes·云计算·k8s