如何在AKS中变更Elasticsearch持久卷存储类并保留数据
以下是不丢失数据的存储类切换步骤,全程基于AKS原生操作和Elasticsearch数据安全原则:
前置准备
- 确认已创建好目标Standard SSD托管磁盘存储类
- 记录Elasticsearch StatefulSet名称、原PVC名称、存储容量等关键信息
- (强烈建议)提前用Elasticsearch快照备份全量数据:
# 创建本地快照仓库(需在Elasticsearch Pod中挂载对应备份目录PVC) curl -XPUT "http://<es-service-name>:9200/_snapshot/backup_repo" -H 'Content-Type: application/json' -d' { "type": "fs", "settings": { "location": "/usr/share/elasticsearch/backup", "compress": true } }' # 触发快照并等待完成 curl -XPUT "http://<es-service-name>:9200/_snapshot/backup_repo/full_backup?wait_for_completion=true"
1. 停止Elasticsearch数据写入
避免复制过程中数据不一致,先将StatefulSet缩容至0:
kubectl scale statefulset <es-statefulset-name> --replicas=0
2. 创建对应规格的Standard SSD PVC
复制原PVC的容量、访问模式配置,仅修改storageClassName为目标Standard SSD存储类,示例YAML:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: es-data-new-0 # 临时命名,对应原PVC如es-data-0 namespace: <your-namespace> spec: accessModes: - ReadWriteOnce storageClassName: <standard-ssd-sc-name> resources: requests: storage: <same-as-original-storage-size>
应用PVC:
kubectl apply -f new-ssd-pvc.yaml
3. 临时Pod挂载双PVC完成数据复制
创建临时Pod同时挂载原Premium SSD PVC和新Standard SSD PVC,执行全量数据复制:
apiVersion: v1 kind: Pod metadata: name: es-data-copy spec: volumes: - name: old-pv persistentVolumeClaim: claimName: <original-premium-pvc-name> - name: new-pv persistentVolumeClaim: claimName: <new-standard-pvc-name> containers: - name: copy-tool image: busybox:latest command: ["sh", "-c", "cp -av /old/* /new/ && sleep 3600"] volumeMounts: - name: old-pv mountPath: /old - name: new-pv mountPath: /new restartPolicy: Never
应用后检查复制日志,确认无报错:
kubectl logs es-data-copy
复制完成后删除临时Pod:
kubectl delete pod es-data-copy
4. 替换原PVC关联
删除原Premium SSD PVC,将新Standard SSD PVC重命名为原PVC名称,保证StatefulSet能正确关联:
kubectl delete pvc <original-premium-pvc-name> kubectl rename pvc <new-standard-pvc-name> <original-premium-pvc-name>
多副本场景:对每个副本的PVC重复步骤2-4
5. 修改StatefulSet模板(永久生效)
编辑StatefulSet,将volumeClaimTemplates中的storageClassName改为目标Standard SSD存储类,确保后续扩容时自动使用新存储类:
kubectl edit statefulset <es-statefulset-name>
6. 恢复Elasticsearch集群
将StatefulSet副本数恢复至原数量:
kubectl scale statefulset <es-statefulset-name> --replicas=<original-replica-count>
7. 验证切换结果
- 检查Pod启动状态:
kubectl get pods -n <your-namespace> - 确认PV存储类:
kubectl get pv | grep <original-pvc-name>,查看STORAGECLASS字段为目标Standard SSD类 - 验证数据完整性:调用Elasticsearch API检查索引、文档数量是否正常
内容的提问来源于stack exchange,提问作者teamdever
相关产品推荐
相关产品推荐

