Kubernetes 控制器
一、 控制器概述与工作机制
- 核心定义
控制器是 Kubernetes 中管理 Pod 的核心中间层组件。相较于自主式 Pod(故障或退出后不会自动重建),控制器管理的 Pod 在其生命周期内始终维持用户声明的期望状态。 - 工作原理
-
- 声明式配置:用户仅需通过 YAML 声明期望的 Pod 数量、规格与标签,无需干预具体创建过程。
- 状态调和(Reconciliation):期望状态写入
etcd后,APIServer 持续比对期望状态与集群当前状态。若发现偏差,控制循环将自动触发编排操作(创建、删除或重建),实现 Pod 的自愈与高可用。
二、 常用控制器类型及适用场景
|
控制器名称 |
核心用途与特性 |
|
|
原始 Pod 控制器,功能已被 |
|
|
确保任意时刻均有指定数量的 Pod 副本运行;支持基于集合的标签选择器。通常作为 |
|
|
为 Pod 和 |
|
|
确保在集群全部或指定节点上运行且仅运行一个 Pod 副本。常用于日志收集、监控代理、存储守护进程等节点级服务。 |
|
|
专用于管理有状态应用,保障 Pod 的网络标识、存储卷及启动/停止顺序的稳定性。 |
|
|
负责执行一次性批处理任务。记录成功结束的 Pod 数量,达到设定值后任务自动终止。 |
|
|
基于时间调度(Cron 表达式)周期性创建 |
|
|
根据 CPU/内存等资源利用率指标,自动调整 Service 关联的 Pod 副本数,实现水平弹性伸缩。 |
三、 核心控制器详解与配置规范
3.1 ReplicaSet 控制器
- 功能定位:维持指定数量的 Pod 副本,通过
selector.matchLabels精确匹配并管理目标 Pod。 - 核心参数:
-
spec.replicas:声明期望的 Pod 副本数。spec.selector.matchLabels:定义用于匹配 Pod 的键值对标签。spec.template:Pod 模板,包含metadata.labels及容器运行时配置(镜像、名称等)。
- 运行机制:若手动修改 Pod 标签使其脱离匹配范围,ReplicaSet 将立即依据模板重建新 Pod;删除受管 Pod 后亦会自动触发重建。
3.2 Deployment 控制器(生产环境推荐)
- 架构设计:
Deployment→ 管理ReplicaSet→ 管理Pod。每个版本迭代对应一个独立的 ReplicaSet。 - 核心能力:
-
- 滚动更新(Rolling Update):默认策略为
25% max unavailable, 25% max surge。更新时创建新版 RS,逐步替换旧版 RS 的 Pod,确保服务连续性。 - 版本回滚:支持快速切换至历史 ReplicaSet,实现故障版本的安全回退。
- 更新策略控制:
- 滚动更新(Rolling Update):默认策略为
-
-
minReadySeconds:Pod 标记为 Ready 后需持续运行的最短时间,确认稳定后再推进下一批更新。maxSurge:允许超出期望副本数的最大数量(或百分比)。maxUnavailable:允许处于不可用状态的最大数量(或百分比)。
-
-
- 暂停与恢复(Pause & Resume):通过
kubectl rollout pause暂存多次配置变更,避免中间状态触发频繁发布;待变更全部就绪后执行kubectl rollout resume统一生效,保障生产环境变更安全。
- 暂停与恢复(Pause & Resume):通过
3.3 DaemonSet 控制器
- 功能定位:全局或定向节点级守护进程部署。节点加入集群时自动调度 Pod,节点移除或控制器删除时自动清理。
- 典型场景:集群存储(glusterd/ceph)、日志采集(fluentd/logstash)、节点监控(Prometheus Node Exporter/Zabbix Agent)。
- 配置要点:通常需配置
tolerations以容忍 Master 节点等带有污点(Taint)的节点,确保覆盖全集群。
3.4 Job 控制器
- 功能定位:执行短暂、一次性计算或批处理任务。
- 核心参数:
-
completions:任务需成功完成的 Pod 总数。parallelism:单次并行执行的 Pod 数量。backoffLimit:任务失败后的最大重试次数。restartPolicy:仅支持OnFailure或Never,不支持Always。
-
-
OnFailure:容器失败时原地重启,failed计数不变。Never:容器失败时创建新 Pod,原失败 Pod 保留,failed计数加 1。
-
3.5 CronJob 控制器
- 功能定位:基于 Cron 表达式的时间调度器,周期性实例化
Job对象。 - 核心结构:
-
schedule:时间调度规则(如"* * * * *"表示每分钟执行)。jobTemplate:定义被周期性触发的 Job 模板,包含容器镜像、执行命令及重启策略。
- 适用场景:定时数据库备份、日志轮转清理、周期性数据同步与报表生成。
四、 常用运维操作命令规范
|
操作类型 |
命令示例 |
|
生成 YAML 模板 |
|
|
应用/更新配置 |
|
|
查看 Pod 与标签 |
|
|
查看控制器详情 |
|
|
查看更新历史 |
|
|
暂停/恢复更新 |
|
|
删除控制器资源 |
|
五、 总结
Kubernetes 控制器通过声明式 API 与控制循环机制,实现了工作负载的自动化编排与自愈。在实际生产环境中:
- 无状态服务优先采用
Deployment,充分利用其滚动更新、版本管理与暂停恢复能力。 - 节点级基础组件采用
DaemonSet保障全局覆盖。 - 离线/定时任务分别依托
Job与CronJob实现精准调度。 - 所有控制器均依赖
etcd状态存储与标签选择器机制,合理设计标签规范与资源配额是保障集群稳定运行的基础。
更多推荐

所有评论(0)