Kubernetes 工作负载资源详解:Pod、Deployment、StatefulSet、DaemonSet 一次讲透¶
文章摘要¶
在 Kubernetes 中,真正运行应用程序的是 Pod。
但在实际生产环境中,我们很少直接管理 Pod,而是通过 Deployment、StatefulSet、DaemonSet、Job、CronJob 等工作负载资源来管理应用。
本文将从整体视角讲解 Kubernetes 工作负载体系,帮助你理解各种工作负载资源之间的关系以及适用场景。
学习目标¶
阅读完本文后,你将掌握:
- 什么是工作负载资源
- Pod 的作用
- Deployment 工作机制
- StatefulSet 使用场景
- DaemonSet 使用场景
- Job 与 CronJob 区别
- 工作负载资源选择原则
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云原生学习者
- Kubernetes 面试准备人员
什么是工作负载资源?¶
工作负载(Workload)可以理解为:
例如:
最终都需要运行在 Kubernetes 中。
而 Kubernetes 提供了一系列资源来管理这些应用。
这些资源统称:
Kubernetes 工作负载体系¶
整体结构如下:
或者:
或者:
最终:
因此:
Pod 是运行载体,而其它工作负载资源本质上都是 Pod 管理器。
为什么不直接使用 Pod?¶
例如:
创建:
如果节点故障:
如果误删除:
Pod 也会直接消失。
Kubernetes 不会自动恢复。
因此生产环境很少直接创建 Pod。
而是使用:
管理 Pod。
Pod:最小运行单元¶
Pod 是 Kubernetes 中最小的调度单位。
结构:
通常:
最常见。
特点:
- 拥有独立 IP
- 共享网络命名空间
- 共享存储卷
- 被调度到单个节点
适合:
生产环境通常不直接使用。
Deployment:无状态应用首选¶
这是最常见的工作负载资源。
例如:
创建:
效果:
如果:
异常退出。
Deployment 自动创建:
补齐副本。
Deployment 特点¶
支持:
- 副本管理
- 自动恢复
- 滚动更新
- 回滚
- 扩缩容
适用场景¶
例如:
简单记忆:
无状态应用优先选择 Deployment。
StatefulSet:有状态应用首选¶
很多服务不能随意更换身份。
例如:
这些服务需要:
Deployment 无法保证。
因此 Kubernetes 提供:
StatefulSet 特点¶
每个 Pod 拥有:
固定名称。
同时拥有:
独立存储。
重建后:
适用场景¶
简单记忆:
有状态应用优先选择 StatefulSet。
DaemonSet:每个节点运行一个 Pod¶
DaemonSet 的特点非常特殊。
创建:
效果:
每个节点自动运行一个实例。
新增节点:
自动创建:
典型场景¶
日志采集:
监控采集:
网络插件:
简单记忆:
每个节点运行一个实例时使用 DaemonSet。
Job:一次性任务¶
有些任务不需要长期运行。
例如:
执行完成即可退出。
使用:
特点:
适用场景¶
CronJob:定时任务¶
类似 Linux:
例如:
每天凌晨:
每小时:
使用:
例如:
表示:
适用场景¶
工作负载资源关系图¶
最常见链路:
StatefulSet:
DaemonSet:
Job:
CronJob:
工作负载资源如何选择?¶
| 场景 | 推荐资源 |
|---|---|
| Web应用 | Deployment |
| API服务 | Deployment |
| MySQL | StatefulSet |
| Redis集群 | StatefulSet |
| Kafka | StatefulSet |
| 日志采集 | DaemonSet |
| 节点监控 | DaemonSet |
| 数据导入 | Job |
| 自动备份 | CronJob |
生产环境最佳实践¶
不直接管理 Pod¶
推荐:
数据库使用 StatefulSet¶
避免:
节点组件使用 DaemonSet¶
例如:
定时任务使用 CronJob¶
避免:
常见故障排查¶
查看工作负载:
查看 StatefulSet:
查看 DaemonSet:
查看 Job:
查看 CronJob:
查看 Pod:
面试常见问题¶
Pod 和 Deployment 的区别?¶
Deployment 管理 Pod。
StatefulSet 解决什么问题?¶
有状态应用管理。
DaemonSet 适合什么场景?¶
每节点运行一个实例。
Job 与 CronJob 的区别?¶
CronJob 定时创建 Job。
MySQL 应该使用什么资源?¶
StatefulSet。
FAQ¶
Pod 能直接用于生产吗?¶
可以,但不推荐。
Deployment 能部署 MySQL 吗?¶
技术上可以。
生产环境不推荐。
DaemonSet 会自动覆盖新节点吗?¶
会。
总结¶
工作负载资源负责管理 Kubernetes 中运行的应用程序。
其中:
- Pod 负责运行容器
- Deployment 管理无状态应用
- StatefulSet 管理有状态应用
- DaemonSet 管理节点级服务
- Job 执行一次性任务
- CronJob 执行定时任务
可以记住一句话:
Pod 是运行载体,而 Deployment、StatefulSet、DaemonSet 等资源则是 Pod 的管理者。
相关阅读¶
- [Kubernetes Pod 生命周期详解]
- [Kubernetes Deployment 工作原理]
- [Kubernetes StatefulSet 工作原理]
- [Kubernetes Service 工作原理]
- [Kubernetes 存储资源详解]