Kubernetes 中常见工作负载(Workload)资源的对比表格,包括它们的主要用途、特点和典型使用场景:
| 资源类型 | 缩写 | 主要用途 | 特点 | 典型场景 |
|---|---|---|---|---|
| Pod | - | 最小部署单元,包含一个或多个容器 | - 临时性资源,重启后IP可能变化 - 直接管理Pod不推荐(通常用Deployment等高层资源) | 调试、单次任务、临时性服务 |
| Deployment | deploy | 管理无状态应用的多个Pod副本 | - 支持滚动更新和回滚 - 自动创建ReplicaSet - 声明式更新 | Web服务、API后端、无状态微服务 |
| StatefulSet | sts | 管理有状态应用(需要持久化存储和稳定标识) | - Pod有固定名称和顺序(如web-0, web-1)- 通常搭配PVC使用 - 支持有序扩缩容 | 数据库(MySQL、MongoDB)、有状态中间件(ZooKeeper、Redis Cluster) |
| DaemonSet | ds | 在集群每个节点(或指定节点)上运行一个Pod副本 | - 自动跟随节点增减 - 忽略调度限制(如污点) | 日志收集(Fluentd)、监控(Node Exporter)、网络插件(Calico、kube-proxy) |
| Job | job | 运行一次性任务(任务完成后Pod终止) | - 任务完成后Pod标记为Completed- 支持并行执行 | 批处理任务、数据迁移、离线计算 |
| CronJob | cj | 定时运行Job(类似Linux的crontab) | - 基于时间调度 - 保留历史Job记录(可配置保留数量) | 定期备份、报表生成、定时清理 |
| ReplicaSet | rs | 确保指定数量的Pod副本持续运行(Deployment的底层实现) | - 通常由Deployment自动管理 - 手动管理较少 | 需要直接控制Pod副本数的场景(较少直接使用) |
| Replication Controller | rc | 旧版副本控制器(已弃用,被ReplicaSet替代) | - 功能与ReplicaSet类似 - 不支持基于标签的选择器更新 | 旧版Kubernetes兼容(现代集群应使用ReplicaSet) |
关键对比项
有状态 vs 无状态
•StatefulSet:Pod有持久化存储和固定网络标识(如数据库)。
•Deployment:Pod完全可替换(如Web服务)。临时性 vs 长期运行
•Job/CronJob:任务完成后退出。
• 其他资源:持续运行直到手动删除。节点覆盖范围
•DaemonSet:每个节点运行1个Pod。
•Deployment/StatefulSet:按需调度Pod到任意节点。更新策略
•Deployment:支持滚动更新(RollingUpdate)和回滚。
•StatefulSet:支持有序更新(按Pod顺序逐个更新)。
如何选择?
| 需求 | 推荐资源 |
|---|---|
| 无状态Web服务 | Deployment |
| 数据库/有状态应用 | StatefulSet |
| 集群级守护进程 | DaemonSet |
| 定时任务 | CronJob |
| 一次性批处理 | Job |
| 需要直接控制Pod副本数 | ReplicaSet(罕见) |
示例命令
bash
# 创建Deployment
kubectl create deployment nginx --image=nginx --replicas=3
# 查看StatefulSet的Pod(有序编号)
kubectl get pods -l app=my-db
# 手动运行Job
kubectl create job hello --image=busybox -- echo "Hello World"