详细介绍: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 可灵活管理不同类型的工作负载,从无状态服务到批处理任务,满足多样化的业务需求。

posted @ 2025-08-22 10:03  yfceshi  阅读(11)  评论(0)    收藏  举报