概念定位
Kubernetes 用五类控制器表达不同的运行形态:无状态服务用 Deployment,需要稳定标识与独立存储的用 StatefulSet,每个节点都要跑一份的用 DaemonSet,一次性任务用 Job,周期性任务用 CronJob。适用平台是 Kubernetes。选型的判断点是四个问题:Pod 之间能否互相替换、是否需要稳定名字与专属存储、是否每节点一份、是否有终止条件。答清楚这四个问题,控制器就确定了。
基本信息
| 适用平台 | Kubernetes,工作负载类 API(apps/v1、batch/v1) |
|---|---|
| 关联对象 | Deployment 管 ReplicaSet,StatefulSet 配 Headless Service,Job 由 CronJob 定时创建 |
| 扩缩差异 | Deployment 与 StatefulSet 支持任意副本,DaemonSet 由节点数决定 |
| 生命周期 | Deployment/StatefulSet/DaemonSet 长期运行,Job/CronJob 有终止条件 |
典型使用场景
- Web 与 API 服务:无状态、可任意替换,选 Deployment 获得滚动发布与回滚能力
- 数据库与消息队列:需要稳定的网络标识和每实例独立存储,选 StatefulSet
- 日志与监控代理:每台节点都要采集,选 DaemonSet 由调度器自动补齐
- 数据迁移与批处理:跑完就结束,选 Job 并配重试与清理策略
- 定时报表与巡检脚本:按 cron 表达式触发,选 CronJob 并设置并发策略
快速清点
快速清点
kubectl get deploy,sts,ds,job,cronjob -A | head -40 # 各类工作负载总览
kubectl get ds -A -o wide # 每个 DaemonSet 是否已覆盖全部节点
kubectl get jobs -A --sort-by=.metadata.creationTimestamp | tail -10
kubectl get cronjob -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,SCHEDULE:.spec.schedule,SUSPEND:.spec.suspend'控制器选型
| 控制器 | 典型场景 | 关键特性 |
|---|---|---|
| Deployment | Web 与 API 等无状态服务 | 滚动发布、回滚、任意扩缩 |
| StatefulSet | 数据库、消息队列、需稳定标识 | 稳定网络标识、序号、独立存储 |
| DaemonSet | 日志、监控、网络代理 | 每个符合条件的节点一个 Pod |
| Job | 批处理、数据迁移 | 完成即止、重试与并发控制 |
| CronJob | 定时任务、周期作业 | 按 cron 计划生成 Job,可挂起 |
选型核心问题:Pod 是否可以互相替换(无状态)?是否需要稳定名字与独立存储?是否每节点一个?是否有限期?
StatefulSet 通常搭配 Headless Service 使用,Headless 提供每副本独立 DNS 记录,这是集群成员互相发现的前提。