Kubernetes

K8s StatefulSet 详解

·3 分钟阅读·1096 字

StatefulSet 完整原理、更新策略、与 Deployment 全维度区别

📋 目录

K8s StatefulSet 详解

📖 核心定位

StatefulSet 面向有状态服务(MySQL、Redis 集群、ZK、ES),提供固定唯一身份、固定域名、有序启停、稳定网络标识、可绑定持久存储

特性DeploymentStatefulSet
Pod 名称随机后缀有序编号xxx-0, xxx-1, xxx-2
DNS 域名随机 IP固定域名xxx-0.svc.cluster.local
存储共享卷每个 Pod 独立 PVC,一一绑定
启动顺序并行顺序启动(0, 1, 2…)
删除重建新名称名称不变,序号固定
更新策略RollingUpdateRollingUpdate / 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 分布式存储 — 有状态服务持久化存储

关联文档