---
title: Kubernetes StatefulSet与有状态应用持久化实践
keywords:
- StatefulSet
- Headless Service
- PVC
- StorageClass
- PodDisruptionBudget
- Anti-Affinity
- Readiness
- 持久化
- 滚动更新
- 验证
description: 使用 StatefulSet 管理有状态应用,结合 Headless Service 与 PVC/StorageClass 进行数据持久化,提供滚动更新与容灾验证方法。
date: 2025-11-25
categories:
- 文章资讯
- 技术教程
---
概述
StatefulSet 为有状态工作负载提供稳定标识与有序部署。本文给出 Headless Service 与持久化卷的配置要点,以及更新与容灾策略与验证流程。
标识与网络(已验证)
- 稳定 Pod 名称与有序滚动(
pod-0/pod-1); - Headless Service:提供稳定 DNS(
pod-0.service.ns.svc)。
存储与持久化
- PVC 与 StorageClass:为每个 Pod 绑定独立卷;
- 选择合适的存储(块/文件)与访问模式(
ReadWriteOnce)。
更新与可用性
- 滚动更新策略:有序停止与启动;
- PDB:保证在升级或故障时最小可用副本;
- Anti-Affinity:跨节点分布降低同节点风险。
就绪与探针
- Readiness 与 Liveness:确保流量只打到可用实例;
示例(片段)
apiVersion: apps/v1
kind: StatefulSet
metadata: { name: db }
spec:
serviceName: db-headless
replicas: 3
selector: { matchLabels: { app: db } }
template:
metadata: { labels: { app: db } }
spec:
containers:
- name: db
image: postgres:16
volumeMounts: [ { name: data, mountPath: /var/lib/postgresql/data } ]
volumeClaimTemplates:
- metadata: { name: data }
spec:
accessModes: [ "ReadWriteOnce" ]
resources: { requests: { storage: 100Gi } }
验证与监控
- 指标:副本可用率、滚动耗时、卷绑定状态;
- 演练:节点故障与重调度、卷恢复与数据一致性;
常见误区
- 使用共享卷导致写冲突;
- 无 PDB 导致升级期间全部驱逐;
- 缺少就绪探针导致流量打到未初始化实例。
结语
以稳定标识与独立存储为基础,结合 PDB 与就绪探针,并以滚动与演练验证,StatefulSet 能可靠地承载有状态应用。

发表评论 取消回复