---

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 能可靠地承载有状态应用。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部