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]}
表示匹配标签app
为spring-k8s
或haha
的 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 可灵活管理不同类型的工作负载,从无状态服务到批处理任务,满足多样化的业务需求。