排解 Backup for GKE 中的系統錯誤

本頁說明使用 Backup for GKE 時可能發生的系統相關錯誤、備份資源時應注意的事項,以及疑難排解步驟。

錯誤 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,系統會視為重大錯誤,因為這可能導致無法正確還原至較新的叢集。

如要解決這項錯誤,請按照下列說明操作:

  1. 執行 kubectl get crd 指令,找出有問題的 CustomResourceDefinition

    kubectl get crd CRD_NAME
    

    CRD_NAME 替換為錯誤訊息中的 CustomResourceDefinition 名稱。

  2. 在 YAML 輸出內容中,找出下列條件,確認 CustomResourceDefinition 是否已從 vbeta1 API 正確轉換為 v1 API:

    1. spec.versions:在「spec.versions」欄位下方列出的每個版本中,找出 spec.versions 條件。如果任何 spec.versions 缺少 schema.openAIV3Schema 欄位,則 CustomResourceDefinition 不會為該版本定義結構性結構定義。

    2. status.conditions:找出 type:NonStructuralSchema 條件,即可找到 status.conditions 條件。如果 status.conditionsstatustrue,則明確確認結構定義並非結構性。

  3. 請按照下列步驟,將 CustomResourceDefinition 升級至 v1 API 版本:

    1. 編輯現有的 CustomResourceDefinition,加入結構定義結構定義,定義自訂資源中的每個欄位及其類型,即可與 v1 標準相容。如要進一步瞭解如何新增結構定義,請參閱「指定結構定義」。

    2. 將相容的 v1 資訊清單套用至叢集。

  4. 升級成功後,請重新嘗試備份作業。否則,請使用下列任一方法解決問題:

    • 如果叢集未使用 CustomResourceDefinition,請執行 kubectl delete crd 指令刪除 CustomResourceDefinition

      kubectl delete crd CRD_NAME
      

      CRD_NAME 替換為要刪除的 CustomResourceDefinition 名稱。

    • 在備份方案中啟用寬鬆模式,讓 Backup for GKE 略過資源 (包括 CustomResourceDefinitions API 版本中的 v1beta1),並繼續執行其餘備份作業。如要進一步瞭解如何啟用寬容模式,請參閱「啟用備份方案的寬容模式」。

  5. 重新嘗試備份作業。如果作業持續失敗,請與 Cloud Customer Care 團隊聯絡,尋求進一步協助。

錯誤 100040102:找不到命名空間

如果備份範圍中指定的命名空間在叢集中找不到,嘗試執行備份作業就會失敗,並發生錯誤 100040102。Backup for GKE 代理程式找不到一或多個命名空間,這些命名空間已明確列在 BackupPlan 設定的 selectedNamespaces 欄位中。啟動備份作業時,備份 GKE 必須確保叢集中存在所有指定的命名空間。如果找不到命名空間,會顯示下列錯誤訊息:

Namespace [NAMESPACE_NAME] is not found.

如要解決這個問題,請按照下列指示操作:

  1. 檢查 BackupPlan 設定中的 selectedNamespaces 清單,確認命名空間輸入正確無誤。

  2. 執行 kubectl get namespace 指令,確認錯誤訊息中回報的命名空間是否存在:

    kubectl get namespace NAMESPACE_NAME
    

    NAMESPACE_NAME 替換為錯誤訊息中回報的命名空間名稱。

    如果命名空間不存在,系統會顯示找不到命名空間的訊息,例如 Error from server (NotFound): namespaces "[NAMESPACE_NAME]" not found

  3. 修正 BackupPlan。如果命名空間拼字有誤,請更新 BackupPlan,使用正確的命名空間名稱。如果命名空間確實已不存在,且不需要備份,請從 BackupPlan 設定中的 selectedNamespaces 清單移除該命名空間。

  4. 修正 BackupPlan 後,請重新嘗試備份作業,並啟動新的備份。

如果作業持續失敗,請聯絡 Cloud Customer Care 團隊,尋求進一步協助。

後續步驟