对备份方案启用宽容模式

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

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

宽容模式简介

如果无法接受备份失败,并且无法解决根本问题,您可以启用宽松模式。宽松模式可确保备份成功完成,即使在备份过程中检测到可能会导致恢复失败的 GKE 资源也是如此。备份的状态原因字段中提供了有关问题的详细信息。

我们建议您仅在了解相关问题并能在恢复过程中实施解决方法的情况下使用此选项。如需查看备份的状态原因字段中可能出现的错误消息以及建议采取的措施,请参阅排查备份失败问题。

启用宽容模式

请按照以下说明启用宽松模式:

gcloud

如需启用宽容模式,请运行 gcloud beta container backup-restore backup-plans update 命令:

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。

排查备份失败问题

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

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

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:在了解恢复行为的情况下启用宽容模式。