我用最通俗、最贴合你环境、一看就懂 的方式,一次性把 K8s 工作负载(Workload) 讲透!
先回答最核心:什么是工作负载?
一句话大白话
工作负载 = 让 K8s 帮你"托管运行程序"的方式
你告诉 K8s:
- 我要运行几个副本
- 挂了要不要自动重启
- 需不需要固定名字/固定IP
- 是不是每个机器都要跑一个
K8s 提供5 种标准工作负载,对应不同业务场景。
K8s 有哪 5 种工作负载?(必须记住)
我按你最常用 → 最少用排序:
1)Deployment(最常用、无状态)
适合:微服务、API、前端、Nginx、vLLM 大模型推理
- 随便扩缩容
- 挂了自动重启
- 不保存数据
- 名字随机
- 随便调度到任何节点
你 90% 的业务都用这个!
2)StatefulSet(有状态)
适合:MySQL、Redis、Kafka、ES、ZooKeeper
- 固定名字
- 固定 DNS
- 固定存储 PVC
- 有序启动、有序删除
有数据、有身份的服务用它。
3)DaemonSet(每个节点跑 1 个)
适合:监控采集、日志采集、节点代理
比如你环境里的:
- otel-agent
- fluentbit
- node-exporter
- kube-proxy
特点:集群加一个节点,自动多一个 Pod;删节点,自动少一个。
4)Job(一次性任务)
适合:数据导出、备份、清洗、离线计算
- 运行完就退出
- 不长期运行
- 成功完成就停止
5)CronJob(定时任务)
适合:每天备份、每小时报表、定时清理
- 按时间自动执行 Job
- 类似 Linux crontab
用你自己的环境举例子(你一看就懂)
Deployment → 你的 vllm-qwen(大模型推理)
DaemonSet → otel-agent、fluentbit(每个节点都跑)
StatefulSet → Kafka、ES、MySQL
Job → 数据备份
CronJob → 每天凌晨清理日志
超级简单记忆法
✅ 长期运行、无状态 → Deployment
✅ 存数据、固定身份 → StatefulSet
✅ 每个机器必须跑一个 → DaemonSet
✅ 跑一次就结束 → Job
✅ 定时跑 → CronJob
最后一句最关键(面试必问)
工作负载 = K8s 管理 Pod 的不同"运行模式"
- Deployment:托管无状态服务
- StatefulSet:托管有状态服务
- DaemonSet:托管节点全局组件
- Job/CronJob:托管一次性/定时任务
总结(你只要记住这 5 个)
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob