You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AKS中变更Elasticsearch持久卷存储类并保留数据

AKS中Elasticsearch从Premium SSD切换到Standard SSD存储类的最佳实践

以下是不丢失数据的存储类切换步骤,全程基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:00:57