---
title: Kubernetes StatefulSet滚动更新与存储扩容实践
keywords:
- StatefulSet
- PVC扩容
- volumeClaimTemplates
- RollingUpdate
- allowVolumeExpansion
description: 通过StatefulSet滚动更新与PVC扩容实现有序升级与存储扩容,提供可验证的YAML与命令确保稳定与数据安全。
date: 2025-11-26
categories:
- 文章资讯
- 技术教程
---
概述
- 目标:在有状态应用中安全地进行滚动更新与在线存储扩容,避免数据损坏与服务中断。
- 适用:数据库、消息队列、缓存集群等。
核心与实战
- 存储类允许扩容(StorageClass):
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
allowVolumeExpansion: true
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
- StatefulSet定义:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: db
namespace: prod
spec:
serviceName: db-headless
replicas: 3
updateStrategy:
type: RollingUpdate
selector:
matchLabels: { app: db }
template:
metadata:
labels: { app: db }
spec:
containers:
- name: db
image: repo/db:1.2.3
volumeMounts:
- name: data
mountPath: /var/lib/db
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi
- PVC扩容步骤:
kubectl -n prod get pvc | select-string -pattern db-data
kubectl -n prod patch pvc db-data-db-0 -p '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'
kubectl -n prod patch pvc db-data-db-1 -p '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'
kubectl -n prod patch pvc db-data-db-2 -p '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'
示例
- 有序滚动更新:
kubectl -n prod rollout restart statefulset/db
kubectl -n prod rollout status statefulset/db
- 检查卷大小与节点:
kubectl -n prod describe pvc db-data-db-0 | findstr -i capacity
验证与监控
- 应用健康:
- 使用
readinessProbe/livenessProbe确保滚动期间就绪与健康;观察副本逐个更新。 - 存储后端:
- 验证后端卷支持在线扩容;观察扩容完成事件与文件系统调整。
- 数据一致性:
- 在应对扩容前进行快照/备份;扩容后校验数据完整性。
常见误区
- StorageClass未开启
allowVolumeExpansion导致扩容失败;需提前配置。 - 一次性扩容所有副本导致负载抖动;应逐个PVC扩容并观察。
- 忽视备份与快照;在生产扩容前需制定恢复方案。
结语
- 通过有序滚动与存储扩容,StatefulSet可在生产中保持稳定升级与容量提升,并以验证与监控保障数据安全。

发表评论 取消回复