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

posted on 2026-04-11 04:21  秋入云情  阅读(1)  评论(1)    收藏  举报

导航