service背后的三种控制方式
Service 背后对应的 Deployment / StatefulSet / DaemonSet有什么区别
这三种控制器是 Kubernetes 中最核心的三类 Pod 管理器,它们的 目标不同、特性不同、使用场景也不同:
🔸 Deployment
作用:管理一组无状态 Pod(例如 Web 服务),支持滚动更新、回滚、扩缩容等功能。
特点:
特性 | 描述 |
---|---|
Pod是否有序 | 无序启动 |
可滚动更新 | ✅ 支持(默认行为) |
支持副本数变更 | ✅replicas 字段 |
适合场景 | Web 服务、API 接口、后台 Worker(无状态) |
例子:
kind: Deployment
spec:
replicas: 3
template:
spec:
containers:
- name: my-app
image: my-app:1.0
🔸 StatefulSet
作用:管理一组有状态 Pod,提供稳定的标识、顺序部署、持久存储绑定等功能。
特点:
特性 | 描述 |
---|---|
Pod 是否有序 | ✅ 顺序启动和终止(0 → 1 → 2...) |
是否保留 Pod 名称 | ✅ pod-0, pod-1,名称固定 |
是否绑定存储 | ✅ 每个 Pod 绑定唯一 PVC(如持久化数据库) |
可滚动更新 | ✅ 但更新是逐个顺序执行的 |
适合场景 | 数据库(MySQL、MongoDB)、Zookeeper、Kafka、Redis 等 |
例子:
kind: StatefulSet
spec:
serviceName: "mongo"
replicas: 3
template:
spec:
containers:
- name: mongodb
image: mongo:4.4
🔸 DaemonSet
作用:让每个(或指定的)Node 上都运行一个 Pod 实例。适合部署 Node 级别的守护进程。
特点:
特性 | 描述 |
---|---|
每节点是否部署 | ✅ 每个 Node 都会运行一个 Pod(除非被排除) |
自动适应节点变化 | ✅ 新节点加入集群时自动部署 |
是否支持副本数 | ❌ 不支持 replicas ,副本数由节点数决定 |
适合场景 | 日志采集器(如 Fluentd)、Node Exporter、监控Agent 等 |
例子:
🔹 如何选择?
需求或场景 | 推荐使用 |
---|---|
无状态服务,需滚动更新或扩缩容 | ✅ Deployment |
需要状态保持、Pod 顺序部署、存储 | ✅ StatefulSet |
每个 Node 上都需部署一个组件 | ✅ DaemonSet |