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

发表评论 取消回复