排查 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 中,PersistentVolumeClaims 会从 PersistentVolumes 请求存储空间,而 PersistentVolume 则表示一块存储空间,通常是底层的 Compute Engine 永久性磁盘。当 PersistentVolumeClaim 绑定到 PersistentVolume 且 PersistentVolume 的配置指定了 Compute Engine 永久性磁盘时,可能会发生错误。不过,在您的 Cloud de Confiance by S3NS 项目中找不到 PersistentVolume 配置中指定的名称和位置的实际磁盘。因此,Backup for GKE 无法继续备份不存在的磁盘,从而导致失败。

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

  1. 确定有问题的 PersistentVolumeClaim 和 PersistentVolume。 问题 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. 使用以下方法之一验证磁盘是否存在于您的 Cloud de Confiance by S3NS 项目中:

    可用区级磁盘

    如果您使用的是可用区级磁盘,请使用 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:您的 Cloud de Confiance by S3NS 项目 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:您的 Cloud de Confiance by S3NS 项目 ID。

    如果您收到 Resource not found 或 The resource DISK_NAME was not found 出错提示,则表示磁盘不存在。请使用以下方法之一来解决此问题,具体取决于最符合您需求的方案:

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

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

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

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

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

      替换以下内容:

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

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

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

      kubectl delete pv PV_NAME
      

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

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

错误 100010202:对卷进行快照失败

当 Compute Engine Persistent Disk 快照创建失败时,会发生错误 100010202,导致显示出错提示 Snapshotting volume failed。

如果磁盘与虚拟机 (VM) 实例的连接状态在 Backup for GKE 服务启动的快照创建过程中发生变化,Compute Engine 永久性磁盘快照操作会失败。触发此问题的常见情况包括:

  • 节点自动修复:重新创建运行状况不佳的节点,这会导致 Pod 重新调度,并导致磁盘分离和重新连接。
  • 节点升级:在节点池升级期间,节点通常会被排空并替换。Pod 会在新的节点上正常终止并重新调度,从而触发磁盘分离和重新连接周期。
  • 集群自动扩缩:在缩减事件期间,如果集群自动扩缩器移除某个节点,则该节点上具有永久性磁盘的所有 Pod 都会被逐出,从而导致磁盘分离。如果这些 Pod 被重新调度到其他位置,则会在新节点上进行挂接。在扩容事件期间,新节点不会直接导致重新挂接,但调度到这些节点上的 Pod 会触发初始挂接。

此错误是暂时性的。一旦磁盘挂接稳定,备份通常会在下次自动运行时成功。为防止集群事件影响备份,请遵循以下建议:

  1. 启用智能规划:使用智能规划(基于 RPO 的时间表)配置备份方案。这样,系统就可以在指定的时间窗口内自动重试暂时性故障,而不会影响备份计划的总体 RPO。

  2. 设置备份排除窗口:如果您要执行节点池升级或集群大小调整操作,请在这些时间段内向备份设置添加备份排除窗口。这样可确保在集群主动修改磁盘连接时,Backup for GKE 服务会暂停并避免安排快照。

  3. 重试手动备份:对于手动备份或按需备份,请在集群事件结束后重试备份操作。

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

后续步骤