本頁說明如何啟用備份方案的寬容模式。
執行備份時,如果 GKE 備份偵測到可能導致還原失敗的情況,備份作業本身就會失敗。備份的 state_reason 欄位會提供失敗原因。在 Google Cloud 控制台中,這個欄位稱為「狀態原因」。
關於寬容模式
如果無法接受備份失敗,且無法解決根本問題,可以啟用寬容模式。寬鬆模式可確保備份作業順利完成,即使在備份過程中偵測到可能會導致還原失敗的 GKE 資源,也不會受到影響。備份的「狀態原因」欄位會提供問題詳細資料。
只有在瞭解問題,且能在還原過程中實作解決方法時,才建議使用這個選項。如需備份作業「狀態原因」欄位中可能顯示的錯誤訊息清單和建議做法,請參閱「排解備份失敗問題」。
gcloud
啟用寬容模式:
gcloud beta container backup-restore backup-plans update BACKUP_PLAN \
--project=PROJECT_ID \
--location=LOCATION
--permissive-mode
更改下列內容:
BACKUP_PLAN
:要更新的備份計畫名稱。PROJECT_ID
:專案的 ID。 Google CloudLOCATION
:資源的運算區域,例如us-central1
。請參閱「關於資源位置」。如需完整的選項清單,請參閱 gcloud beta container backup-restore backup-plans update 說明文件。
控制台
請按照下列說明,在Google Cloud 控制台中啟用寬鬆模式:
在 Google Cloud 控制台中,前往「Google Kubernetes Engine」頁面。
在導覽選單中,按一下「Backup for GKE」。
按一下「備份方案」分頁標籤。
展開叢集,然後按一下方案名稱。
按一下「詳細資料」分頁標籤,編輯方案詳細資料。
按一下「編輯」,以「備份模式」編輯該部分。
按一下「寬鬆模式」核取方塊,然後按一下「儲存變更」。
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。
排解備份失敗問題
下表列出備份「狀態原因」欄位中顯示的各種備份失敗訊息,並提供說明和建議動作。
備份失敗訊息 | 訊息說明和失敗原因 | 建議做法 |
---|---|---|
|
說明:叢集中的自訂資源定義 (CRD) 最初是套用為 apiextensions.k8s.io/v1beta1 ,且缺少 apiextensions.k8s.io/v1 中所需的結構化結構定義。原因:Backup for GKE 無法自動定義結構化結構定義。在 Kubernetes 1.22 以上版本的叢集中還原 CRD 時,如果 apiextensions.k8s.io/v1beta1 無法使用,還原作業就會失敗。還原 CRD 定義的自訂資源時,就會發生這項作業失敗。 |
建議您使用下列選項:
啟用寬鬆模式後,沒有結構化結構定義的 CRD 不會備份到 Kubernetes v1.22 以上版本的叢集。如要順利還原這類備份,您必須從還原作業中排除 CRD 提供的資源,或在開始還原前,於目標叢集建立 CRD。 |
|
說明:在來源叢集中,PVC 繫結至的 PV 不是永久磁碟區。 原因:GKE 備份功能僅支援備份 Persistent Disk 磁碟區資料。使用「佈建新磁碟區,並從備份還原磁碟區資料」政策還原的非永久磁碟 PVC,不會還原任何磁碟區資料。不過,重複使用含有您資料的現有磁碟區政策允許 PVC 重新連線至原始磁碟區控制代碼。這對於由外部伺服器支援的磁碟區類型 (例如 NFS) 很有用。 |
啟用寬鬆模式,並瞭解來源叢集中非 Persistent Disk 磁碟區的可用還原選項。如要備份 Filestore 磁碟區,請參閱「使用 Backup for GKE 處理 Filestore 磁碟區」。 啟用寬鬆模式後,系統會備份 PVC 設定,但不會備份磁碟區資料。 |
|
說明:叢集中的 PVC 未繫結至 PV。
原因:GKE 備份可以備份 PVC,但沒有磁碟區資料可備份。這種情況可能表示設定錯誤,或要求的儲存空間與可用儲存空間不符。 |
檢查未繫結的 PVC 是否處於可接受的狀態。如果是,請啟用寬鬆模式。請注意備份行為的影響。 啟用寬鬆模式後,系統會備份 PVC 設定,但不會備份磁碟區資料。 |
|
說明:叢集中的 API 服務設定錯誤。這會導致對 API 路徑的要求傳回「Failed to query API resources.」(無法查詢 API 資源)。基礎服務可能不存在或尚未準備就緒。 原因:GKE 備份無法備份任何由無法使用的 API 提供的資源。 |
檢查 API 服務中的基礎服務 spec.service ,確認服務是否已準備就緒。啟用寬鬆模式後,系統不會備份無法載入的 API 群組資源。 |
|
說明:在 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
: 啟用寬鬆模式,並瞭解還原行為。