Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Kubernetes Workload

Kubernetes 中常见的 6 大 Workload

  1. Pod
  2. ReplicaSet
  3. Deployment
  4. StatefulSet
  5. DaemonSet
  6. Job / CronJob

1. Pod(最小调度单元)

是什么

Kubernetes 最核心的运行单元;不是控制器,只是容器的封装。

✅ 适用场景

  • 临时测试
  • 调试
  • 不需要自动恢复的临时任务

### ❌ 不适用

  • 任何需要重启、自愈、扩缩容的业务
  • 生产环境(除极少数情况)

2. ReplicaSet(旧时代的控制器)

是什么

保证 指定数量的 Pod 副本数。

Deployment 内部就是使用 ReplicaSet 实现版本管理。

✅ 适用场景

  • 基础学习
  • 特殊情况下需要手动管理滚动升级

### ❌ 不适用

  • 一般业务(总是用 Deployment)

3. Deployment(无状态核心 Workload)

是什么

无状态应用标准模板。

支持:

  • 滚动升级 / 回滚
  • 副本数管理
  • Pod 策略
  • 金丝雀 / 蓝绿发布(配合 Service)

✅ 适用场景

  • Web 服务
  • API 服务
  • 无状态微服务
  • Statless Worker

### ❌ 不适用

  • 持久化存储、有顺序要求的应用 -> 用 StatefulSet

4. StatefulSet(有状态核心 Workload)

是什么

有状态应用设计,提供:

功能 说明
稳定的网络身份 pod-0、pod-1、pod-2
稳定的存储 PVC 与 Pod 一一绑定
有序部署/扩缩容/删除 Pod 有顺序(0 -> 1 -> 2)

✅ 适用场景

  • 数据库(MySQL、PostgreSQL)
  • 分布式存储(Ceph、MinIO)
  • 消息队列(Kafka、RabbitMQ)
  • 任何需要稳定 volume 的服务

❌ 不适用

  • 无状态应用

5. DaemonSet(每个节点都要跑 1 个)

是什么

每个 Node 上运行一个 Pod 的控制器。

✅ 适用场景

  • 日志收集(Fluentd, Vector)
  • 节点监控(Node Exporter)
  • CSI/网络插件(Calico、Cilium)
  • Node Agent(比如守护进程)

❌ 不适用

  • 普通 Web 服务(应该用 Deployment)

6. Job / CronJob(一次性任务)

🟦 Job

是什么

一次性完成任务的 Pod,失败会重试。

✅ 适用场景

  • 数据迁移
  • 文件处理
  • ETL
  • 批处理任务

🟨 CronJob

是什么

定时执行 Job(类似 Linux cron)

✅ 适用场景

  • 定期备份
  • 定时报告
  • 定时计算任务
  • 定期清理任务

🧭 Workload 场景对比总结(最实用表)

Workload 是否有状态 是否自愈 是否自动扩缩容 是否顺序启动 适用场景
Pod ❌ 无 ❌ 无 ❌ 无 ❌ 无 调试、临时运行
ReplicaSet ❌ 无 底层控制器
Deployment ❌ 无 Web/API/微服务
StatefulSet ✅ 有状态 ✅ 有序 DB、MQ、分布式存储
DaemonSet 节点级 日志/监控/系统守护进程
Job 一次性 ✅ 重试 批处理任务
CronJob 定时任务 定时任务

🧨 常见误区

误区 1:数据库用 Deployment

❌ 错误

数据库需要稳定存储 + 网络身份,应该用 StatefulSet。

误区 2:DaemonSet 会占满 CPU?

DaemonSet 默认 1 个 Pod/Node,资源由每个 Pod request/limit 决定。

误区 3:Deployment 不能跑 stateful?

可以,但会导致数据漂移,Pod 重建会丢 volume。

误区 4:Pod delet -> 不会重建

因为 Pod 不是控制器,不会自动恢复。

🏁 最佳选择口诀

  • 无状态 -> Deployment
  • 有状态 -> StatefulSet
  • 节点级守护 -> DaemonSet
  • 一次性任务 -> Job
  • 周期性任务 -> CronJob
  • 临时调试 -> Pod
  • 不要手动用 ReplicaSet(除非你知道你在干什么)