本頁說明使用 GKE 備份 時可能發生的系統相關錯誤、備份資源時應注意的事項,以及疑難排解步驟。
錯誤 100010108:無法備份 PersistentVolumeClaim - 缺少加密磁碟的備份方案 CMEK
建立區域範圍磁碟區備份時發生錯誤 100010108,且由於 GKE 叢集參照加密磁碟,因此必須使用備份方案 CMEK。
瞭解錯誤
建立區域範圍的磁碟區備份時,如果 GKE 叢集參照任何加密磁碟,就必須使用備份方案 CMEK。這是區域範圍磁碟區備份的嚴格規定;如果來源磁碟經過加密,只有在提供備份方案 CMEK 時,才能建立該磁碟的快照。如果備份方案缺少這項 CMEK 設定,快照建立作業就會失敗,並顯示類似下列內容的錯誤訊息:
failed to create snapshot as disk "pvc-1" is encrypted with CMEK "projects/proj1/locations/us-east1/keyRings/keyring1/cryptoKeys/key1/cryptoKeyVersions/1", but no Backup Plan CMEK is provided. Please add CMEK to the Backup Plan.
疑難排解步驟
- 找出缺少的 CMEK 設定:錯誤訊息確認要備份的 PVC 已加密,但備份計畫設定缺少加密金鑰。
- 在備份方案中新增 CMEK:更新備份方案設定,加入客戶自行管理的加密金鑰 (CMEK)。這個金鑰會用來加密備份資料,包括區域範圍的磁碟區備份。
- 確認權限是否正確:確認已為新加入的 CMEK 指派
roles/cloudkms.cryptoKeyEncrypterDecrypter角色給 GKE 備份服務代理 (service-PROJECT_NUMBER@gcp-sa-gkebackup.s3ns-system.iam.gserviceaccount.com)。 - 重新測試備份作業:更新備份方案並授予權限後,請重試備份作業。
錯誤 100020102:嚴格寬鬆模式 - 無法備份 CRD - 不支援的 v1beta1 API 版本
如果嘗試備份原本以 apiextensions.k8s.io/v1beta1 版本套用的 CustomResourceDefinition,但因缺少 apiextensions.k8s.io/v1 API 版本中必要的結構定義而失敗,就會發生錯誤 100020102。這個錯誤會導致下列錯誤訊息:
Strict permissive mode - Failed to backup CRD - Unsupported v1beta1 API Version。
發生這項錯誤的原因是 Google Kubernetes Engine 1.22 版移除了 apiextensions.k8s.io/v1 API 版本。如要進一步瞭解 GKE 1.22 版的 API 移除作業,請參閱「GKE 1.22 版的 API 移除作業」。
非寬容模式下的備份作業行為
在非寬鬆模式或嚴格備份方案中,如果備份作業遇到無法備份的資源 (例如使用 v1beta1 API 建立的 CustomResourceDefinition),就會失敗。發生這項錯誤的原因是資源缺少 v1 API 要求的結構化結構定義。如果出現這個 CustomResourceDefinition,即視為重大錯誤,因為可能無法正確還原至較新的叢集。
如要解決這項錯誤,請按照下列指示操作:
執行
kubectl get crd指令,找出有問題的CustomResourceDefinition:kubectl get crd CRD_NAME將
CRD_NAME替換為錯誤訊息中的CustomResourceDefinition名稱。在 YAML 輸出內容中,找出下列條件,確認
CustomResourceDefinition是否已從vbeta1API 正確轉換為v1API:spec.versions:在「spec.versions」欄位下方列出的每個版本中,找出spec.versions條件。如果任何spec.versions缺少schema.openAIV3Schema欄位,則CustomResourceDefinition不會為該版本定義結構化結構定義。status.conditions:找出type:NonStructuralSchema條件,即可找到status.conditions條件。如果status.conditions的status為true,則明確表示結構定義並非結構性。
請按照下列步驟,將
CustomResourceDefinition升級至v1API 版本:編輯現有的
CustomResourceDefinition,加入結構化結構定義自訂資源中的每個欄位及其類型,使其與v1標準相容。如要進一步瞭解如何新增結構定義,請參閱「指定結構定義」。將相容的
v1資訊清單套用至叢集。
升級成功後,請重新嘗試備份作業。否則,請使用下列任一方法解決問題:
如果叢集未使用
CustomResourceDefinition,請執行kubectl delete crd指令刪除CustomResourceDefinition。kubectl delete crd CRD_NAME將
CRD_NAME替換為要刪除的CustomResourceDefinition名稱。在備份方案中啟用寬鬆模式,允許 GKE 備份略過資源 (包括
CustomResourceDefinitionsAPI 版本中的v1beta1),並繼續執行其餘備份作業。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。
請重新嘗試備份作業。如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。
錯誤 100040102:找不到命名空間
如果備份範圍中指定的命名空間在叢集中找不到,備份作業就會失敗,並顯示錯誤 100040102。GKE 備份代理程式找不到一或多個命名空間,這些命名空間已明確列在 BackupPlan 設定的 selectedNamespaces 欄位中。啟動備份作業時,GKE 備份功能需要叢集中存在所有指定的命名空間。如果找不到命名空間,系統會顯示下列錯誤訊息:
Namespace [NAMESPACE_NAME] is not found.
如要解決這個問題,請按照下列指示操作:
檢查
BackupPlan設定中的selectedNamespaces清單,確認命名空間輸入正確無誤。執行
kubectl get namespace指令,確認錯誤訊息中回報的命名空間是否存在:kubectl get namespace NAMESPACE_NAME將
NAMESPACE_NAME替換為錯誤訊息中回報的命名空間名稱。如果命名空間不存在,系統會顯示訊息,指出找不到命名空間,例如
Error from server (NotFound): namespaces "[NAMESPACE_NAME]" not found。修正
BackupPlan。如果命名空間拼字有誤,請使用正確的命名空間名稱更新BackupPlan。如果命名空間確實已不存在,且不需要備份,請從BackupPlan設定的selectedNamespaces清單中移除該命名空間。完成
BackupPlan的必要修正後,請重新嘗試備份作業,並啟動新的備份。
如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。