首页/云/Kubernetes 速查/工作负载控制器选型总览

工作负载控制器选型总览

五类控制器的适用场景对照:无状态用 Deployment、有状态用 StatefulSet、每节点守护用 DaemonSet、批处理用 Job、定时用 CronJob。

Kubernetes 速查云更新于 2026-10-13

概念定位

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'

控制器选型

控制器典型场景关键特性
DeploymentWeb 与 API 等无状态服务滚动发布、回滚、任意扩缩
StatefulSet数据库、消息队列、需稳定标识稳定网络标识、序号、独立存储
DaemonSet日志、监控、网络代理每个符合条件的节点一个 Pod
Job批处理、数据迁移完成即止、重试与并发控制
CronJob定时任务、周期作业按 cron 计划生成 Job,可挂起
选型核心问题:Pod 是否可以互相替换(无状态)?是否需要稳定名字与独立存储?是否每节点一个?是否有限期?
StatefulSet 通常搭配 Headless Service 使用,Headless 提供每副本独立 DNS 记录,这是集群成员互相发现的前提。

易错点

  • 把有状态服务塞进 Deployment 会缺失稳定标识与有序启动,恢复时风险高,重建后可能连不上原数据
  • 不需要的 Job 记得配 ttlSecondsAfterFinished 清理,否则集群里会积累大量已完成 Pod 与对象
  • CronJob 不设并发策略:上一次任务未结束时新的又启动,容易造成重复处理与资源争抢
  • 用 DaemonSet 承载非节点级职责:Pod 数量随节点数增长,容量规划与版本升级都会变得难以控制

数据来源与参考

  • Kubernetes 官方文档 · Workloads
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌