大家好!今天我将为大家完美总结Kubernetes工作负载管理的核心——四大Pod控制器。
不仅仅是简单地启动Pod,为每种情况选择最优工具是云安全和基础设施设计的起点。大约15分钟,您就可以掌握实践工作和考试(CKAD)所需的所有核心知识。

📑 目录
- 概述:为什么要使用控制器? (Desired State)
- Deployment:无状态(Stateless)应用程序的王者
- StatefulSet:有状态(Stateful)专业户的管理者
- DaemonSet:守护所有节点的哨兵
- Job & CronJob:短小精悍的批处理高手
- [附录] 控制器选择指南及实战技巧
0. 概述:为什么要使用控制器? 🤔
在Kubernetes中,Pod是随时可能消亡的消耗品。正如讲师所强调的,我们不会手动逐个管理Pod。相反,我们向控制器声明“我期望的状态(Desired State)”,然后控制器会监控当前状态并维持该状态。
1. Deployment:无状态(Stateless)应用程序的王者 👑
这是最常用的控制器。它针对无状态应用程序进行了优化,例如Web服务器或API服务器,这些应用程序的Pod之间无需相互区分。
- 主要功能: 自我修复(Self-healing)、扩缩容、滚动更新和回滚。
- 核心资源: 内部创建ReplicaSet以维护Pod的数量。
💡 实战代码 (YAML)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.21
2. StatefulSet:有状态(Stateful)专业户的管理者 🏛️
当Pod需要唯一的名称和持久化数据时使用,例如数据库(MySQL, MongoDB)或消息队列(Kafka)。
- 主要功能: 为Pod分配顺序索引(pod-0, pod-1)、稳定的网络标识符(与Headless Service联动)、单独的卷分配(volumeClaimTemplates)。
- 区别: 与Deployment不同,即使Pod重启,其名称和关联的卷也会保持不变。
3. DaemonSet:守护所有节点的哨兵 🛡️
当需要在集群内所有(或满足特定条件的)节点上精确地运行一个Pod时使用。
- 用途: 日志收集器(Fluentd)、监控代理(Prometheus Node Exporter)、网络插件。
- 特点: 新节点添加时自动部署Pod,节点删除时Pod也随之移除。
4. Job & CronJob:批处理高手 🏃♂️⏰
管理那些不是24小时运行的服务,而是特定任务完成后自行终止的作业。
- Job: 一次性任务(例如:数据迁移、批处理报告生成)。成功完成后终止Pod。
- CronJob: 在预定时间重复执行的任务(例如:每天凌晨3点etcd备份)。
💡 实战代码 (CronJob)
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-backup
spec:
schedule: "0 3 * * *" # 每天凌晨3点
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: busybox
command: ["sh", "-c", "echo Backup Complete!"]
restartPolicy: OnFailure
📊 控制器一览比较
| 控制器 | 主要用途 | Pod标识符 | 数据保留 |
| — | — | — | — |
| Deployment | Web服务器, API (无状态) | 随机哈希 | 易失性 |
| StatefulSet | DB, 分布式系统 (有状态) | 唯一索引 (0, 1, 2) | 持久性 (PVC映射) |
| DaemonSet | 日志/监控代理 | 节点固定 | 节点依赖 |
| Job/CronJob | 备份, 批处理 | 一次性/重复 | 结果保存后终止 |
—
Tags: Kubernetes, CKAD, Deployment, StatefulSet, DaemonSet, Job, CronJob, 云基础设施, 认证准备, Pod控制器
发表回复