Controller (控制器)
一、 核心控制器(最常用)
这三类是日常开发运维中接触最多的:
ReplicaSet (RS)
基础副本控制器,保证 Pod 副本数稳定
很少直接使用,通常作为 Deployment 的底层依赖
支持标签选择器,故障自愈(重建异常 Pod),无更新 / 回滚能力
Deployment
无状态应用的声明式部署控制器
无状态服务(如 Nginx、API 服务、前端静态服务)
基于 ReplicaSet 实现,支持滚动更新、版本回滚、暂停 / 继续部署,并行管理 Pod
StatefulSet
有状态应用的专用控制器
有状态服务(如 Etcd、MySQL 主从、Kafka、ZooKeeper)
提供稳定 Pod 名称、固定 DNS、独立 PVC、有序部署 / 扩缩容
Deployment 与 StatefulSet 的关系:
核心依赖关系:Deployment 基于 ReplicaSet 实现,ReplicaSet 是 Deployment 的 “子集”。
核心差异:Deployment 比 ReplicaSet 多了 滚动更新、版本回滚、暂停 / 继续部署 三个核心功能。
二、 专用控制器(特定场景)
针对特殊业务需求设计,解决核心控制器无法覆盖的场景:
DaemonSet
确保每个节点只运行一个 Pod 副本
节点级别的系统服务(如日志采集:Fluentd、监控:Prometheus Node Exporter、网络插件:Calico)
- 自动在新节点加入时部署 Pod- 节点删除时自动清理 Pod- 支持节点亲和性,可指定只在部分节点运行
Job
一次性任务控制器,执行完即退出
批处理任务(如数据备份、报表生成、一次性数据迁移)
- 保证 Pod 运行完成任务后终止- 支持 completions(任务完成次数)、parallelism(并行数)- 任务完成后,Pod 状态变为 Completed
CronJob
定时任务控制器,基于 Job 实现
周期性任务(如定时备份数据库、日志清理、定时同步数据)
- 类似 Linux 的 crontab 语法(如 */30 * * * * 每 30 分钟执行一次)- 支持 concurrencyPolicy(并发策略:允许 / 禁止 / 替换)- 支持 startingDeadlineSeconds(任务启动超时时间)
ReplicationController (RC)
初代副本控制器
几乎被 ReplicaSet 取代,仅兼容旧版本 K8s
与 ReplicaSet 功能类似,但仅支持等式标签选择器(matchLabels),不支持集合式选择器(matchExpressions),K8s 官方已不推荐使用
三、 扩展控制器(自定义场景)
除了 K8s 原生控制器,还可以通过 CRD(CustomResourceDefinition)+ Operator 扩展自定义控制器,用于管理复杂的有状态应用:
Operator:基于 K8s 扩展机制,将运维经验编码为软件,实现应用的自动化运维(如部署、扩容、备份、故障恢复)。
典型示例:
etcd-operator:自动化管理 Etcd 集群的创建、扩容、备份、升级;mysql-operator:自动化管理 MySQL 主从复制、故障切换、备份恢复;prometheus-operator:自动化部署和管理 Prometheus 监控系统。
Last updated