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