排查 Backup for GKE 中的存储错误


本页面介绍了使用 Backup for GKE 时可能会遇到的与存储相关的错误、执行操作时需要考虑的事项,以及问题排查步骤。

错误 100010105:无法备份 PersistentVolumeClaim - PersistentVolume 引用的磁盘不存在

当尝试备份 PersistentVolumeClaim 失败时,会发生错误 100010105,因为该备份引用了不存在的磁盘,导致出现错误消息 Failed to backup PersistentVolumeClaim - Disk referenced by PersistentVolume does not exist

在 Google Kubernetes Engine 中,从 PersistentVolumes 请求 PersistentVolumeClaims 存储空间。而 PersistentVolume 则表示一块存储空间,通常是底层的 Compute Engine 永久性磁盘。当 PersistentVolumeClaim 绑定到 PersistentVolumePersistentVolume 的配置指定了 Compute Engine 永久性磁盘时,可能会发生错误。不过,在您的 Google Cloud 项目中找不到 PersistentVolume 配置中指定的名称和位置的实际磁盘。因此,Backup for GKE 无法继续备份不存在的磁盘,并发生故障。

如需解决此错误,请按照以下说明操作:

  1. 确定存在问题的 PersistentVolumeClaimPersistentVolume。 有问题 PersistentVolumeClaim 的名称及其关联的 PersistentVolume 的名称均列在失败的 Backup for GKE 操作的 state reason 字段中。我们建议记录 PersistentVolumeClaim 名称、其命名空间和 PersistentVolume 的名称。

  2. 检查 PersistentVolume。如需描述 PersistentVolume,请使用您从状态原因字段中识别出的 PersistentVolume 名称,如以下命令所示:

    kubectl describe pv PERSISTENTVOLUME_NAME
    

    PERSISTENTVOLUME_NAME 替换为您的 PersistentVolume 的名称。

  3. 在输出中,检查 source 部分,尤其是 csi 下的内容。本部分介绍了 PersistentVolume 尝试引用的 VolumeHandle。例如:

    Source:
      Type: GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)
    PDName: my-non-existent-disk
    FSType: ext4
    Partition: 0
    ReadOnly: false
                In this example, the PD name is my-non-existent-disk.
    
        Source:
      Type:       CSI (a Container Storage Interface (CSI) volume)
      Driver:     pd.csi.storage.gke.io
      VolumeHandle: projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME
    ...
    

    在此示例中,VolumeHandle 包含磁盘的完整路径,包括其名称和位置。例如 projects/my-gcp-project/zones/us-central1-a/disks/my-disk-name

  4. 使用从 PersistentVolume 说明中获得的 VolumeHandle 来识别磁盘名称和可用区。

  5. 使用以下方法之一验证磁盘是否存在于您的 Google Cloud 项目中:

    可用区级磁盘

    如果您使用的是可用区级磁盘,请使用 Google Cloud CLI 运行 gcloud compute disks describe 命令:

    gcloud compute disks describe DISK_NAME \
        --zone=ZONE_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • DISK_NAME:从 PersistentVolume 说明中获取的磁盘的名称。

    • ZONE_NAME:从 PersistentVolume 说明中获取的磁盘的可用区。

    • PROJECT_ID:您的 Google Cloud 项目 ID。

    区域级磁盘

    如果您使用的是区域磁盘,请使用 Google Cloud CLI 运行 gcloud compute disks describe 命令:

    gcloud compute disks describe DISK_NAME \
        --region=REGION_NAME \
        --project=PROJECT_ID
    

    替换以下内容:

    • DISK_NAME:从 PersistentVolume 说明中获取的磁盘的名称。

    • REGION_NAME:从 PersistentVolume 说明中获取的磁盘区域。

    • PROJECT_ID:您的 Google Cloud 项目 ID。

    如果您收到 Resource not foundThe resource DISK_NAME was not found 错误消息,则表示磁盘不存在。请根据最符合您需求的方案,使用以下方法之一来解决问题:

    • 如果磁盘被意外删除或错误命名,并且您想保留数据或 PersistentVolumeClaim,或者 PersistentVolume 配置了错误的磁盘名称,请使用以下方法之一来解决此问题:

      • 恢复磁盘:如果您有磁盘的备份,请使用 PersistentVolume 引用的完全相同的名称和位置恢复该磁盘。

      • 创建新磁盘:如果无法恢复磁盘,请创建一个与 PersistentVolume 配置中具有相同名称和位置的新磁盘。

    • 如果不再需要 PersistentVolumeClaimPersistentVolume、其数据或应用,我们建议移除不需要的实体:

      • 删除 PersistentVolumeClaim:使用 kubectl 命令行工具运行 kubectl delete pvc 命令,以删除 PersistentVolumeClaim
      kubectl delete pvc PVC_NAME -n NAMESPACE
      

      替换以下内容:

      • PVC_NAME:要删除的 PersistentVolumeClaim 的名称。

      • NAMESPACE:要删除的 PersistentVolumeClaim 的命名空间。

    • 删除 PersistentVolumeClaim 后,PersistentVolume 仍然存在:如果 PersistentVolumePersistentVolumeReclaimPolicy 设置为 Delete,则在删除 PersistentVolumeClaim 时,系统会自动删除 PersistentVolume。如果 persistentVolumeReclaimPolicy 设置为 Retain,则需要在删除 PersistentVolumeClaim 后手动删除 PersistentVolume。如需删除 PersistentVolume,请使用 kubectl 命令行工具运行 kubectl delete pv 命令:

      kubectl delete pv PV_NAME
      

      PV_NAME 替换为您要删除的 PersistentVolume 的名称。

如果操作仍失败,请与 Cloud Customer Care 联系以获取进一步帮助。