啟用備份方案的寬容模式


本頁說明如何啟用備份方案的寬容模式。

執行備份時,如果 GKE 備份偵測到可能導致還原失敗的情況,備份作業本身就會失敗。備份的 state_reason 欄位會提供失敗原因。在 Google Cloud 控制台中,這個欄位稱為「狀態原因」

關於寬容模式

如果無法接受備份失敗,且無法解決根本問題,可以啟用寬容模式。寬鬆模式可確保備份作業順利完成,即使在備份過程中偵測到可能會導致還原失敗的 GKE 資源,也不會受到影響。備份的「狀態原因」欄位會提供問題詳細資料。

只有在瞭解問題,且能在還原過程中實作解決方法時,才建議使用這個選項。如需備份作業「狀態原因」欄位中可能顯示的錯誤訊息清單和建議做法,請參閱「排解備份失敗問題」。

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 無法自動定義結構化結構定義。在 Kubernetes 1.22 以上版本的叢集中還原 CRD 時,如果 apiextensions.k8s.io/v1beta1 無法使用,還原作業就會失敗。還原 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 不是永久磁碟區。

原因:GKE 備份功能僅支援備份 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。

原因:GKE 備份可以備份 PVC,但沒有磁碟區資料可備份。這種情況可能表示設定錯誤,或要求的儲存空間與可用儲存空間不符。
檢查未繫結的 PVC 是否處於可接受的狀態。如果是,請啟用寬鬆模式。請注意備份行為的影響。

啟用寬鬆模式後,系統會備份 PVC 設定,但不會備份磁碟區資料。

Failed to query API resources ...

說明:叢集中的 API 服務設定錯誤。這會導致對 API 路徑的要求傳回「Failed to query API resources.」(無法查詢 API 資源)。基礎服務可能不存在或尚未準備就緒。

原因:GKE 備份無法備份任何由無法使用的 API 提供的資源。
檢查 API 服務中的基礎服務 spec.service,確認服務是否已準備就緒。

啟用寬鬆模式後,系統不會備份無法載入的 API 群組資源。

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

說明:在 Kubernetes v1.23 和更早版本中,服務帳戶會自動產生以密鑰為後盾的權杖。不過,在後續版本中,Kubernetes 移除了這項自動產生權杖的功能。叢集中的 Pod 可能已將密鑰磁碟區掛接到容器的檔案系統。

原因:如果 Backup for GKE 嘗試還原服務帳戶及其自動產生的密碼,以及掛接密碼磁碟區的 Pod,還原作業會顯示成功。不過,Kubernetes 會移除密鑰,導致 Pod 卡在容器建立程序中,無法啟動。
在 Pod 中定義 spec.serviceAccountName 欄位。這項動作可確保權杖會自動掛接至容器中的 /var/run/secrets/kubernetes.io/serviceaccount。詳情請參閱「為 Pod 設定服務帳戶」說明文件。

啟用寬鬆模式後,系統會備份密鑰,但無法在 Kubernetes 1.24 以上版本的叢集掛接至 Pod。

常見有問題的 CRD 和建議做法

以下列出幾個常見的 CRD 備份問題,以及建議採取的解決行動:

  • capacityrequests.internal.autoscaling.k8s.io: 這個 CRD 暫時用於 1.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: 啟用寬鬆模式,並瞭解還原行為。