为备份方案启用宽松模式


本页面介绍了如何对备份方案启用宽容模式。

在执行备份期间,如果 Backup for GKE 检测到可能导致恢复失败的情况,备份本身将会失败。失败原因在备份的 state_reason 字段中提供。在 Google Cloud 控制台中,此字段称为状态原因

如果您启用宽容模式,状态原因字段中仍会提供问题说明,但备份不会失败。如果您已知晓问题,并准备在恢复时采用解决方法,则可以启用此行为。

以下是您可能会在备份的状态原因字段中看到的错误消息示例,该错误消息建议启用宽容模式: If you cannot implement the recommended fix, you may create a new backup with Permissive Mode enabled.

启用宽容模式:

gcloud beta container backup-restore backup-plans update BACKUP_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION
    --permissive-mode

替换以下内容:

请按照以下说明在 Google Cloud 控制台中启用宽容模式:

  1. 在 Google Cloud 控制台中,转到 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

  2. 在导航菜单中,点击 Backup for GKE

  3. 点击备份方案标签页。

  4. 展开集群,然后点击方案名称。

  5. 点击详细信息标签页以修改方案详情。

  6. 点击修改以修改包含备份模式的部分。

  7. 点击宽容模式复选框,然后点击保存更改

更新现有的 google_gke_backup_backup_plan 资源。

resource "google_gke_backup_backup_plan" "NAME" {
   ...
   backup_config {
     permissive_mode = true
     ...
   }
}

替换以下内容:

  • NAME:您要更新的 google_gke_backup_backup_plan 的名称。

如需了解详情,请参阅 gke_backup_backup_plan

排查备份失败问题

下表提供了备份的状态原因字段中显示的各种备份失败消息的说明和建议操作。

备份失败消息 消息说明和失败原因 建议采取的措施

CustomResourceDefinitions "..." have invalid schemas

说明:集群中的一个自定义资源定义 (CRD) 最初是作为 apiextensions.k8s.io/v1beta1 应用的,并且缺少 apiextensions.k8s.io/v1 中所需的结构化架构。

原因:Backup for GKE 无法自动定义结构化架构。在 Kubernetes v1.22 及更高版本的集群中恢复 CRD 时,如果 apiextensions.k8s.io/v1beta1 不可用,则会导致恢复失败。恢复 CRD 定义的自定义资源时会发生此失败。
我们建议您使用以下选项:
  • 如果您管理 CRD,请按照 Kubernetes 文档中的步骤为 CRD 指定结构化架构。
  • 如果是 GKE 管理的 CRD,并且 CRD 未提供任何现有资源,则您可以调用 kubectl delete crd。如果存在 CRD 提供的资源,您可以在了解恢复行为的情况下启用宽容模式。如需查看有关常见 CRD 的建议,请参阅文档
  • 如果是第三方 CRD,请参阅相关文档以迁移到 apiextensions.k8s.io/v1

启用宽容模式后,没有结构化架构的 CRD 将不会在 Kubernetes v1.22 及更高版本的集群中备份。如需成功恢复此类备份,您需要从恢复中排除 CRD 提供的资源,或者在开始恢复之前在目标集群中创建 CRD。

PersistentVolumeClaims "..." are bound to PersistentVolumes of unsupported types "..." and cannot be backed up

说明:在来源集群中,PVC 绑定到非 Persistent Disk 卷的 PV。

原因:Backup for GKE 仅支持备份 Persistent Disk 卷数据。使用预配新卷并使用备份恢复卷数据政策恢复的非 Persistent Disk PVC 将不会恢复任何卷数据。但是,重复使用包含您的数据的现有卷政策允许将 PVC 重新连接到原始卷句柄。这对于由外部服务器提供支持的卷类型(如 NFS)非常有用。
在了解来源集群中非 Persistent Disk 卷的可用恢复选项的情况下启用宽容模式。如需备份 Filestore 卷,请参阅使用 Backup for GKE 处理 Filestore 卷

启用宽容模式后,系统会备份 PVC 配置,但不会备份卷数据。

PersistentVolumeClaims "..." are not bound to PersistentVolumes and cannot be backed up

说明:集群中的 PVC 未绑定到 PV。

原因:Backup for GKE 可以备份 PVC,但没有要备份的卷数据。这种情况可能表明配置有误或者请求的存储与可用存储不一致。
检查未绑定的 PVC 是否处于可接受的状况。如果是,请启用宽容模式。请注意对备份行为的影响。

启用宽容模式后,系统会备份 PVC 配置,但没有要备份的卷数据。

Failed to query API resources ...

说明:集群中的 API 服务配置有误。这会导致对 API 路径的请求返回“Failed to query API resources”(未能查询 API 资源)。底层服务可能不存在或尚未准备就绪。

原因:Backup for GKE 无法备份不可用的 API 所提供的任何资源。
在 API 服务的 spec.service 中检查底层服务,以确保其已准备就绪。

启用宽容模式后,未能加载的 API 组中的资源将不会备份。

Secret ... is an auto-generated token from ServiceAccount ... referenced in Pod specs

说明:在 Kubernetes v1.23 及更低版本中,服务账号会自动生成由 Secret 提供支持的令牌。但在更高版本中,Kubernetes 移除了此自动生成的令牌功能。集群中的 Pod 可能已将 Secret 卷装载到其容器的文件系统。

原因:如果 Backup for GKE 尝试恢复服务账号及其自动生成的 Secret 以及装载 Secret 卷的 Pod,恢复看起来成功了。但是,Kubernetes 会移除该 Secret,这会导致 Pod 卡在容器创建阶段,无法启动。
在 Pod 中定义 spec.serviceAccountName 字段。此操作可确保令牌自动装载到容器中的 /var/run/secrets/kubernetes.io/serviceaccount 上。如需了解详情,请参阅为 Pod 配置服务账号文档。

启用宽容模式后,系统会备份 Secret,但无法将其装载到 Kubernetes v1.24 及更高版本集群的 Pod 中。

存在问题的常见 CRD 和建议采取的措施

以下是一些存在备份问题的常见 CRD,以及我们建议采取的解决措施:

  • capacityrequests.internal.autoscaling.k8s.io:此 CRD 在 v1.21 集群中是临时使用的。运行 kubectl delete crd capacityrequests.internal.autoscaling.k8s.io 以移除 CRD。
  • scalingpolicies.scalingpolicy.kope.io:此 CRD 用于控制 fluentd 资源,但 GKE 已迁移到使用 fluentbit。运行 kubectl delete crd scalingpolicies.scalingpolicy.kope.io 以移除 CRD。
  • memberships.hub.gke.io:如果没有成员资格资源,请运行 kubectl delete crd memberships.hub.gke.io 以移除 CRD。如果有成员资格资源,请启用宽容模式。
  • applications.app.k8s.io:在了解恢复行为的情况下启用宽容模式。