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 的关键~

相关推荐
大都督老师1 天前
配置 containerd 使用镜像加速器拉取 Docker Hub 镜像
容器·kubernetes·k8s
放寒假脚后跟v2 天前
Pod 的 YAML 文件中 exitCode 字段的具体含义、不同取值代表的场景
运维·云原生·容器·kubernetes·k8s
孤岛悬城2 天前
57 Rancher管理平台
云计算·k8s
HehuaTang2 天前
K8s labels 与 annotations 区别
k8s
百锦再7 天前
Elements Plus 跨设备自适应显示问题综合解决方案
python·flutter·小程序·uni-app·k8s·tornado·net
Font Tian9 天前
【云计算2025年度总结】汇总和反思
容器·云计算·k8s·openstack·虚拟化
Coder_Boy_9 天前
基于SpringAI的智能AIOps项目:部署相关容器化部署管理技术
人工智能·spring boot·k8s·运维开发
whltaoin12 天前
25年12月26日-福州某科技公司一面面试原题
java·linux·docker·面试·职场和发展·k8s·springboot
汪碧康13 天前
二进制kubenetes-1.34.2安装包快速部署k8s集群
云原生·容器·kubernetes·k8s·etcd·xkube