为备份方案启用宽松模式


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

在备份执行期间,如果 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

启用宽容模式:

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. 点击宽容模式复选框,然后点击保存更改

Terraform

更新现有的 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 无法自动定义结构架构。在 apiextensions.k8s.io/v1beta1 不可用的 Kubernetes v1.22+ 集群中恢复 CRD 会导致恢复失败。恢复 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 绑定到不是永久性磁盘卷的 PV。

原因:Backup for GKE 仅支持备份永久性磁盘卷数据。使用预配新卷并从备份恢复卷数据政策恢复的非永久性磁盘 PVC 不会恢复任何卷数据。但是,重复使用包含数据的现有卷政策允许 PVC 重新连接到原始卷句柄。这对外部服务器(如 NFS)支持的卷类型非常有用。
通过了解源集群中的非永久性磁盘卷的可用恢复选项,启用宽容模式。如需备份 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 路径的请求返回“未能查询 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 卷,恢复似乎成功。但是,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:启用宽容模式,了解恢复行为。