啟用備份方案的寬容模式

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

執行備份時,如果 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. 在導覽選單中,按一下「GKE 備份」。

  3. 按一下「備份方案」分頁標籤。

  4. 展開叢集,然後按一下企劃書名稱。

  5. 按一下「詳細資料」分頁標籤,編輯方案詳細資料。

  6. 按一下「編輯」,即可編輯「備份模式」部分。

  7. 勾選「Permissive mode」核取方塊,然後按一下「Save changes」。

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」。

排解備份失敗問題

下表說明備份「Status reason」(狀態原因) 欄位中顯示的各種備份失敗訊息,並提供應變措施建議。

備份失敗訊息 訊息說明和失敗原因 應變措施建議

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

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

原因:如果 GKE 備份嘗試還原服務帳戶、自動生成 Secret,以及掛接 Secret 磁碟區的 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 曾暫時用於 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:啟用許可模式,並瞭解還原行為。