k8s的六种控制器RS, Deployment, StatefulSet, DaemonSet, Job,CronJob
一、ReplicaSet(RS)
保证指定数量的 Pod 副本始终在运行。
如果 Pod 挂了,RS 会重新拉起一个新的。
⚠️ 实际工作中很少直接操作 RS,而是用 Deployment(它底层自动管理 RS)。
二、Deployment
管理无状态应用的声明式控制器。
它是 K8s 中最常用的工作负载控制器。
核心特点:支持滚动更新(逐步替换旧 Pod);支持一键回滚到历史版本;支持水平扩缩容;底层自动管理 ReplicaSet。
三、StatefulSet
管理有状态应用的控制器。
为每个 Pod 提供稳定且唯一的标识(名称、网络标识、存储)。
核心特点:Pod 名称固定:<statefulset名>-0, -1, -2...
每个 Pod 可挂载独立的持久化存储(PVC 模板)
启停顺序受控(0 → 1 → 2,倒序停止);支持有序滚动更新、灰度发布
典型场景:
数据库:MySQL、PostgreSQL、MongoDB
消息中间件:Kafka、RabbitMQ
分布式存储:Etcd、ZooKeeper
四、DaemonSet
确保每个符合条件的节点上都运行一个 Pod 副本。
新节点加入集群时,DaemonSet 会自动在该节点上创建 Pod。
核心特点
每个节点最多一个 Pod
可通过 nodeSelector、affinity 限定部分节点
随节点生命周期自动增删
典型场景
节点监控:Prometheus Node Exporter、Datadog
日志收集:Fluentd、Filebeat
网络插件:Calico、Cilium(部分组件)
存储插件:Ceph CSI
五、Job
运行一次性任务,确保任务成功结束(Pod 正常退出)。
核心特点
Pod 成功完成后,Job 不会自动重新创建 Pod
支持行执行(parallelism)
可设置重试次数(backoffLimit)
典型场景:数据库迁移 批量数据处理 备份脚本 计算任务
六、CronJob
基于时间调度执行 Job(类似 Linux Crontab)。
核心特点
调度格式:分 时 日 月 周
可设置并发策略:
Allow:允许并发
Forbid:禁止并发,跳过本次
Replace:替换未完成的 Job
自动清理历史 Job
典型场景:
定时备份数据库
定时发送报表
定期清理日志/临时文件
定期同步数据
| 控制器 | 适用场景 | 是否有序 | 是否持久存储 | 更新方式 |
|---|---|---|---|---|
| ReplicaSet | 数量保证(底层) | 否 | 无 | 手动删除重建 |
| Deployment | 无状态应用 | 否 | 无 | 滚动/回滚/暂停 |
| StatefulSet | 有状态应用 | 是 | 独立存储卷 | 有序滚动 |
| DaemonSet | 节点级服务 | 否 | 可选 | 滚动更新 |
| Job | 一次性任务 | 可并行 | 可选 | 任务结束即停止 |
| CronJob | 定时任务 | 可并行 | 可选 | 按调度创建 Job |
浙公网安备 33010602011771号