K8s StatefulSet 详解
📖 核心定位
StatefulSet 面向有状态服务(MySQL、Redis 集群、ZK、ES),提供固定唯一身份、固定域名、有序启停、稳定网络标识、可绑定持久存储。
| 特性 | Deployment | StatefulSet |
|---|---|---|
| Pod 名称 | 随机后缀 | 有序编号(xxx-0, xxx-1, xxx-2) |
| DNS 域名 | 随机 IP | 固定域名(xxx-0.svc.cluster.local) |
| 存储 | 共享卷 | 每个 Pod 独立 PVC,一一绑定 |
| 启动顺序 | 并行 | 顺序启动(0, 1, 2…) |
| 删除重建 | 新名称 | 名称不变,序号固定 |
| 更新策略 | RollingUpdate | RollingUpdate / OnDelete / Partition |
⚡ 三大固定特征
1. Pod 命名规则
副本数 replicas=3:
xxx-0, xxx-1, xxx-2
数字序号固定,删除重建后序号不变。
2. Headless Service(无头服务)
必须提前创建 clusterIP: None 的无头 Service,CoreDNS 自动生成固定域名:
pod-name-0.svc-name.namespace.svc.cluster.local
pod-name-1.svc-name.namespace.svc.cluster.local
pod-name-2.svc-name.namespace.svc.cluster.local
3. PVC 模板(volumeClaimTemplates)
StatefulSet 通过 volumeClaimTemplates 为每个 Pod 自动创建独立 PVC,删除 Pod 后 PVC 保留,数据不丢失。
🔧 更新策略
| 策略 | 说明 |
|---|---|
| RollingUpdate | 逆序更新(从最大序号开始),保证有序 |
| OnDelete | 手动删除 Pod 后才重建更新 |
| Partition | 指定序号分界点,只更新 >= partition 的 Pod(灰度发布) |
关联文档
- ../core/K8s 核心概念 — Deployment/StatefulSet 基础概念
- ../../storage/Ceph 分布式存储 — 有状态服务持久化存储
关联文档