文档首页/ 云容器引擎 CCE/ 常见问题/ 存储管理/ 误卸载存储池的磁盘后如何恢复
更新时间:2024-08-30 GMT+08:00
分享

误卸载存储池的磁盘后如何恢复

存储池是Everest创建的一种Custom Resource,资源为nodelocalvolumes,该资源在正常情况下不建议手动操作。Everest每分钟会扫描空闲磁盘,并检查已添加进存储池的磁盘是否正常。

Everest使用LVM进行存储池管理,本地持久卷和本地临时卷均为LVM中的一个卷组(Volume Group,VG):

  • 本地持久卷使用的卷组名称为:vg-everest-localvolume-persistent
  • 本地临时卷使用的卷组名称为:vg-everest-localvolume-ephemeral

本文以本地持久卷举例,修复本地临时卷时,使用相应的卷组即可。

本文提供的指导仅能恢复误卸载磁盘后存储池页面显示“不可用”状态,修复后可重新导入持久卷或临时卷,但无法恢复原有数据。

问题现象

当用户错误卸载存储池的磁盘时,会导致该节点存储池状态不可用。

问题定位

使用kubectl命令查看nodelocalvolumes资源:

kubectl get nodelocalvolumes.localvolume.everest.io -n kube-system 192.168.1.137 -o yaml

看到状态已列出错误原因为/dev/vde is lost:

...
status:
  lastUpdateTime: "2024-07-16T07:13:55Z"
  message: the device 6eef2886-f5ad-4b3f-a:/dev/vde is lost
  phase: Unavailable
  totalDisks:
  - capacity: 100Gi
    name: /dev/vdb
    uuid: 3511993c-61e6-4faa-a
  usedDisks:
  - totalSize: 102392Mi
    type: persistent
    usedSize: 10Gi
    volume-group: vg-everest-localvolume-persistent
    volumes:
    - capacity: 50Gi
      name: /dev/vdd
      pv-uuid: Jo9Uur-evVi-RLWM-yaln-J6rz-3QCo-aHpvwB
      uuid: 40b8b92b-5852-4a97-9
    - capacity: 50Gi
      name: /dev/vde
      pv-uuid: ZxA9kY-5C28-96Z9-ZjOE-dCrc-yTgp-DOhUHo
      uuid: 6eef2886-f5ad-4b3f-a

解决方案

  1. 恢复nodelocalvolumes资源。

    kubectl edit nodelocalvolumes.localvolume.everest.io -n kube-system 192.168.1.137

    修改上述资源,删除 spec.volumes.type: persistent 中已丢失的磁盘同时删除资源中整个status字段。

  2. 移除VG中相应PV。

    VG信息会存在于相应的磁盘上:
    • 当多块磁盘组成的VG缺少一部分时,会显示PV丢失。
    • 当VG中仅有的磁盘被拔出时,vgdisplay将无法显示相应VG,通过vgdisplay无法查看到 vg-everest-localvolume-persistent 时当前步骤可以跳过。

    通过以下命令移除本地持久卷VG中所有已丢失的PV。其中,vg-everest-localvolume-persistent为本地持久卷的VG名称,若修复本地临时卷则VG名称为vg-everest-localvolume-ephemeral

    vgreduce --removemissing vg-everest-localvolume-persistent

    回显如下:

      WARNING: Couldn't find device with uuid ZxA9kY-5C28-96Z9-ZjOE-dCrc-yTgp-DOhUHo.
      WARNING: VG vg-everest-localvolume-persistent is missing PV ZxA9kY-5C28-96Z9-ZjOE-dCrc-yTgp-DOhUHo (last written to /dev/vde).
      WARNING: Couldn't find device with uuid ZxA9kY-5C28-96Z9-ZjOE-dCrc-yTgp-DOhUHo.
      Wrote out consistent volume group vg-everest-localvolume-persistent.

    再次使用 vgdisplay 可以看到显示正常。

    vgdisplay vg-everest-localvolume-persistent

    回显如下:

    --- Volume group ---
      VG Name               vg-everest-localvolume-persistent
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  4
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               <50.00 GiB
      PE Size               4.00 MiB
      Total PE              12799
      Alloc PE / Size       2560 / 10.00 GiB
      Free  PE / Size       10239 / <40.00 GiB
      VG UUID               31LHdA-yZPV-M7JX-ttwK-aynz-IyxY-usp22p

  3. 重启相应节点的everest-csi-driver。

    1. 查看everest-csi-driver的Pod名称。
      kubectl get pod -A -owide
      回显如下:
      NAMESPACE     NAME                                      READY   STATUS             RESTARTS     AGE     IP               NODE            NOMINATED NODE   READINESS GATES
      kube-system   everest-csi-driver-7clbg                  1/1     Running            0            5d4h    192.168.1.38     192.168.1.38    <none>           <none>
      kube-system   everest-csi-driver-jvj9f                  1/1     Running            0            5d4h    192.168.1.137    192.168.1.137   <none>           <none>
    2. 删除192.168.1.137节点上的Pod。
      kubectl delete pod -n kube-system everest-csi-driver-jvj9f
    3. 此时查看 nodelocalvolumes 状态已正常,可继续导入持久卷。

  4. 重启节点。

    某些情况下如NPD可能依然会认为节点存在指标异常导致节点不可用,因此通过重启节点解决此类问题。

相关文档