Kubernetes Workload
- Pod
- ReplicaSet
- Deployment
- StatefulSet
- DaemonSet
- Job / CronJob
Kubernetes 最核心的运行单元;不是控制器,只是容器的封装。
- 临时测试
- 调试
- 不需要自动恢复的临时任务
- 任何需要重启、自愈、扩缩容的业务
- 生产环境(除极少数情况)
保证 指定数量的 Pod 副本数。
Deployment 内部就是使用 ReplicaSet 实现版本管理。
- 基础学习
- 特殊情况下需要手动管理滚动升级
- 一般业务(总是用 Deployment)
无状态应用标准模板。
支持:
- 滚动升级 / 回滚
- 副本数管理
- Pod 策略
- 金丝雀 / 蓝绿发布(配合 Service)
- Web 服务
- API 服务
- 无状态微服务
- Statless Worker
- 持久化存储、有顺序要求的应用 -> 用 StatefulSet
为有状态应用设计,提供:
| 功能 | 说明 |
|---|---|
| 稳定的网络身份 | pod-0、pod-1、pod-2 |
| 稳定的存储 | PVC 与 Pod 一一绑定 |
| 有序部署/扩缩容/删除 | Pod 有顺序(0 -> 1 -> 2) |
- 数据库(MySQL、PostgreSQL)
- 分布式存储(Ceph、MinIO)
- 消息队列(Kafka、RabbitMQ)
- 任何需要稳定 volume 的服务
- 无状态应用
在 每个 Node 上运行一个 Pod 的控制器。
- 日志收集(Fluentd, Vector)
- 节点监控(Node Exporter)
- CSI/网络插件(Calico、Cilium)
- Node Agent(比如守护进程)
- 普通 Web 服务(应该用 Deployment)
一次性完成任务的 Pod,失败会重试。
- 数据迁移
- 文件处理
- ETL
- 批处理任务
定时执行 Job(类似 Linux cron)
- 定期备份
- 定时报告
- 定时计算任务
- 定期清理任务
| Workload | 是否有状态 | 是否自愈 | 是否自动扩缩容 | 是否顺序启动 | 适用场景 |
|---|---|---|---|---|---|
| Pod | ❌ 无 | ❌ 无 | ❌ 无 | ❌ 无 | 调试、临时运行 |
| ReplicaSet | ❌ 无 | ✅ | ✅ | ❌ | 底层控制器 |
| Deployment | ❌ 无 | ✅ | ✅ | ❌ | Web/API/微服务 |
| StatefulSet | ✅ 有状态 | ✅ | ✅ | ✅ 有序 | DB、MQ、分布式存储 |
| DaemonSet | 节点级 | ✅ | ❌ | ❌ | 日志/监控/系统守护进程 |
| Job | 一次性 | ✅ 重试 | ❌ | ❌ | 批处理任务 |
| CronJob | 定时任务 | ✅ | ❌ | ❌ | 定时任务 |
❌ 错误
数据库需要稳定存储 + 网络身份,应该用 StatefulSet。
DaemonSet 默认 1 个 Pod/Node,资源由每个 Pod request/limit 决定。
可以,但会导致数据漂移,Pod 重建会丢 volume。
因为 Pod 不是控制器,不会自动恢复。
- 无状态 -> Deployment
- 有状态 -> StatefulSet
- 节点级守护 -> DaemonSet
- 一次性任务 -> Job
- 周期性任务 -> CronJob
- 临时调试 -> Pod
- 不要手动用 ReplicaSet(除非你知道你在干什么)