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

相关推荐
ShirleyWang0123 天前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s
spider_xcxc3 天前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
ShirleyWang0123 天前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
ShirleyWang0123 天前
DAY01 K3s 私有化部署排障复盘与 SOP
linux·服务器·k8s·k3s·企业部署
XUHUOJUN7 天前
AKS 不是安装在 Windows Server 上,而是运行在 Windows Server 之上的 Azure 平台能力
windows·架构·k8s·azure local·azure stack
Geek-Chow7 天前
Connecting kubectl to a Private EKS Cluster Over an Internal Domain
kubernetes·k8s·aws
spider_xcxc9 天前
Docker Compose 容器通信详解:同一个 Compose 文件才能互通吗?
docker·容器·k8s·容器化·容器网络
欢醉14 天前
k8s调用服务异常cannot allocate memory
kubernetes·k8s
万里侯16 天前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s
spider_xcxc18 天前
云上网络基石(阿里云):深入解读阿里云VPC及其应用生态
网络·阿里云·云计算·k8s·运维开发·虚拟化