Kubernetes Pod 控制器

Kubernetes Pod 控制器总结

一、控制器概述
  • 核心作用 :Kubernetes 控制器是集群的 "中心大脑",通过控制循环维持集群当前状态与期望状态一致。
  • 控制循环机制:不断对比 "预期状态"(资源清单定义)和 "真实状态"(集群实际运行状态),通过 "调谐" 操作(创建 / 删除 Pod)使两者匹配。例如:若期望 8 个 Pod 但实际只有 7 个,会自动创建 1 个;若实际有 9 个,会删除最新创建的 1 个。
二、主要 Pod 控制器类型及特点
1. ReplicationController(RC)
  • 核心功能:确保 Pod 副本数量始终与期望一致,自动替换异常退出的 Pod,回收多余 Pod。
  • 关键特性
    • 通过标签选择器管理 Pod,要求 Pod 标签必须是 RC 选择器的子集。
    • 支持通过kubectl scale rc <名称> --replicas=<数量>调整副本数。
    • 当 Pod 标签被修改导致不匹配时,RC 会创建新 Pod 维持期望数量。
  • 局限性:标签选择器功能简单,已逐步被 ReplicaSet 替代。
2. ReplicaSet(RS)
  • 核心功能:与 RC 功能类似,确保指定数量的 Pod 副本运行,是 RC 的升级版本。
  • 关键改进
    • 支持更灵活的标签选择器matchExpressions),可通过运算符(In/NotIn/Exists/DoesNotExist)定义匹配规则。
    • 例如:matchExpressions: {key: app, operator: In, values: [spring-k8s, haha]}表示匹配标签appspring-k8shaha的 Pod。
  • 使用场景:更适合复杂标签匹配需求的场景,是 Deployment 的底层依赖。
3. Deployment
  • 核心功能:基于 ReplicaSet 实现,提供声明式更新、滚动升级、回滚、扩容缩容等高级功能,是最常用的控制器。
  • 关键特性
    • 管理 RS:每个 Deployment 版本对应一个 RS,通过控制 RS 的副本数实现版本迭代(如从 v1.0 升级到 v2.0 时,新建 v2.0 的 RS 并逐步替换 v1.0 的 RS)。
    • 滚动更新 :默认允许 25% 的额外 Pod(maxSurge)和 25% 的不可用 Pod(maxUnavailable),确保升级过程中服务不中断。
    • 回滚机制 :通过kubectl rollout undo deployment/<名称>回滚到上一版本,或通过--to-revision=<版本号>回滚到指定版本。
    • 金丝雀部署 :通过kubectl rollout pause暂停滚动,先部署少量新版本 Pod 测试,确认无误后用kubectl rollout resume继续。
  • 常用命令
    • 创建 / 更新:kubectl apply -f <yaml文件>(声明式)。
    • 调整副本数:kubectl scale deployment <名称> --replicas=<数量>
    • 更新镜像:kubectl set image deployment/<名称> <容器名>=<镜像>
    • 查看历史:kubectl rollout history deployment/<名称>
4. DaemonSet
  • 核心功能:确保每个节点(或指定节点)上运行且仅运行一个 Pod,节点加入集群时自动创建 Pod,节点移除时自动回收。
  • 典型场景
    • 集群存储(如 glusterd、ceph)。
    • 日志收集(如 fluentd、logstash)。
    • 节点监控(如 Prometheus Node Exporter)。
  • 特点:无需手动设置副本数,自动匹配集群节点数量;默认不调度到带污点(Taint)的节点(如 master 节点),需通过容忍(Toleration)配置例外。
5. Job
  • 核心功能 :处理批处理任务(一次性任务),确保一个或多个 Pod 成功结束(返回码为 0)。
  • 关键参数
    • completions:需成功完成的 Pod 总数(默认 1)。
    • parallelism:并行运行的 Pod 数量(默认 1)。
    • restartPolicy:仅支持Never(不重启)或OnFailure(失败时重启)。
  • 使用场景:数据库备份、数据处理脚本等一次性任务。
6. CronJob
  • 核心功能:基于时间调度 Job,支持周期性任务(如每周备份)或一次性定时任务。
  • 关键配置
    • schedule:Cron 表达式(如*/1 * * * *表示每分钟执行一次)。
    • jobTemplate:定义要调度的 Job 模板。
    • concurrencyPolicy:并发策略(Allow默认允许并发、Forbid禁止并发、Replace替换当前运行的 Job)。
  • 局限性:最小调度单位为分钟级;创建的 Job 需是幂等操作(多次执行结果一致)。
三、控制器对比总结
控制器 核心功能 典型场景 关键特点
ReplicationController 维持固定 Pod 副本数 简单场景(逐步被 RS 替代) 仅支持简单标签选择器
ReplicaSet 维持固定 Pod 副本数,支持复杂标签 作为 Deployment 的底层依赖 支持matchExpressions标签选择器
Deployment 声明式更新、滚动升级、回滚 无状态应用(如 Web 服务) 管理 RS 实现版本控制,支持金丝雀部署
DaemonSet 每个节点运行一个 Pod 日志、监控、存储等节点级服务 自动匹配节点数量,节点变化时自动调整
Job 批处理任务(一次性) 数据备份、脚本执行 确保 Pod 成功结束,支持并行执行
CronJob 定时 / 周期性批处理任务 周期性备份、定时任务 基于 Cron 表达式调度,支持并发策略

通过上述控制器,Kubernetes 可灵活管理不同类型的工作负载,从无状态服务到批处理任务,满足多样化的业务需求。