概述目标:在有状态应用中安全地进行滚动更新与在线存储扩容,避免数据损坏与服务中断。适用:数据库、消息队列、缓存集群等。核心与实战存储类允许扩容(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可在生产中保持稳定升级与容量提升,并以验证与监控保障数据安全。

发表评论 取消回复