Backup for GKE のシステムエラーのトラブルシューティング

このページでは、Backup for 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.

トラブルシューティング手順

  1. 不足している CMEK 構成を特定する: エラー メッセージは、バックアップ対象の PVC が暗号化されているものの、バックアップ プランの構成に暗号鍵が不足していることを示しています。
  2. バックアップ プランに CMEK を追加する: 顧客管理の暗号鍵(CMEK)を含めるようにバックアップ プランの構成を更新します。この鍵は、リージョン スコープのボリューム バックアップを含むバックアップ データの暗号化に使用されます。
  3. 適切な権限を確保する: Backup for GKE サービス エージェント(service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com)に、新しく追加された CMEK の roles/cloudkms.cryptoKeyEncrypterDecrypter ロールが割り当てられていることを確認します。
  4. バックアップ オペレーションを再テストする: バックアップ プランが CMEK で更新され、権限が付与されたら、バックアップ オペレーションを再試行します。

エラー 100020102: CustomResourceDefinition - スキーマが無効です - サポートされていない v1beta1 API バージョン

100020102 エラーは、元々 apiextensions.k8s.io/v1beta1 バージョンとして適用された CustomResourceDefinition のバックアップの試行が、apiextensions.k8s.io/v1 API バージョンで必要な構造スキーマがないために失敗した場合に発生します。このエラーにより、次のエラー メッセージが表示されます: CustomResourceDefinition - has an invalid schema. The resource was originally applied as v1beta1, which has been removed from Kubernetes 1.22+

このエラーは、Google Kubernetes Engine バージョン 1.22 で apiextensions.k8s.io/v1beta1 API バージョンが削除されたために発生します。GKE バージョン 1.22 の API 削除の詳細については、GKE v1.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.conditions の status が true の場合、スキーマが構造的でないことを明示的に示しています。

  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 はリソース(v1beta1 API バージョンの CustomResourceDefinitions を含む)をスキップし、残りのバックアップ オペレーションを続行できます。制約なしモードを有効にする方法については、バックアップ プランで制約なしモードを有効にするをご覧ください。

  5. バックアップ オペレーションを再試行します。オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。

エラー 100020103: API リソースのクエリに失敗しました

エラー 100020103 は、Backup for GKE がバックアップを取得する前にカスタムまたは集約された Kubernetes API サービスを検出できなかった場合に発生します。この場合、Failed to query API resources. Please check if any API service is unavailable by using 'kubectl get apiservice' というエラー メッセージが表示されます。これは、集約された API サービスが正しく構成されていない場合、またはバッキング サービスと Pod が正常でないか、到達できない場合に発生します。制約ありモードの場合、または厳密なバックアップ プランの場合、Backup for GKE は、不完全または一貫性のないクラスタ状態のキャプチャを回避するために、使用できない APIService が検出されるとバックアップ オペレーションを停止します。

このエラーを解決するには、次の手順で対応します。

  1. 次のコマンドを実行して、使用できない API サービスを特定します。

    kubectl get apiservice
    

    出力で、AVAILABLE 列が False の API サービスを探します。

  2. 次のコマンドを実行して、失敗した APIService の詳細を調べます。

    kubectl describe apiservice APISERVICE_NAME
    

    APISERVICE_NAME は、失敗した API サービスの名前(v1beta1.custom.metrics.k8s.io など)に置き換えます。

    出力で、spec.service の Service フィールドと Conditions セクションを確認して、バッキング Service、その Namespace、障害の原因(エンドポイントの欠落、到達不能なターゲット ポートなど)を特定します。

  3. 次のいずれかの方法でエラーを解決します。

    • バッキング サービスを復元する: 次のコマンドを実行して、バッキング サービスに準備完了のエンドポイントがあることを確認します。

      kubectl get endpoints -n NAMESPACE SERVICE_NAME
      

      次のように置き換えます。

      • NAMESPACE: バッキング サービスの Namespace。
      • SERVICE_NAME: バッキング サービスの名前。

      サービスをサポートする Pod が存在し、Running 状態であることを確認します。トラフィックがバッキング サービスに到達できない原因となっている、クラッシュした Pod、イメージの pull の失敗、ネットワーク ポリシーの構成ミスを解決します。

    • 孤立した APIService を削除する: APIService が、削除されたか、使用されなくなったアプリケーション、オペレーター、モニタリング ツールに属している場合は、古い APIService を削除します。

      kubectl delete apiservice APISERVICE_NAME
      

      APISERVICE_NAME は、孤立した API サービスの名前に置き換えます。

    • Permissive モードを有効にする: 利用できない API サービスをすぐに修正または削除できない場合は、バックアップ プランで Permissive モードを有効にします。許可モードが有効になっている場合、Backup for GKE はバックアップ オペレーションを続行します。ただし、使用できない API グループに属するリソースはバックアップされません。制約なしモードを有効にする方法については、バックアップ プランで制約なしモードを有効にするをご覧ください。

  4. バックアップ オペレーションを再試行します。オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。

エラー 100040102: Namespace が見つかりません

エラー 100040102 は、バックアップ スコープで指定された Namespace がクラスタ内で見つからないため、バックアップ オペレーションの実行が失敗した場合に発生します。Backup for GKE エージェントは、BackupPlan 構成の selectedNamespaces フィールドに明示的にリストされている 1 つ以上の Namespace を特定できませんでした。Backup for GKE では、バックアップ オペレーションの開始時に、指定されたすべての Namespace がクラスタに存在する必要があります。Namespace が見つからないと、次のエラー メッセージが表示されます。

Namespace [NAMESPACE_NAME] is not found.

この問題を解決するには、次の手順で対応します。

  1. BackupPlan 構成の selectedNamespaces リストを確認して、Namespace が正しく入力されていることを確認します。

  2. kubectl get namespace コマンドを実行して、エラー メッセージで報告された Namespace が存在することを確認します。

    kubectl get namespace NAMESPACE_NAME
    

    NAMESPACE_NAME は、エラー メッセージで報告される Namespace の名前に置き換えます。

    Namespace が存在しない場合は、Namespace が見つからなかったことを示すメッセージ(Error from server (NotFound): namespaces "[NAMESPACE_NAME]" not found など)が表示されます。

  3. BackupPlan を修正します。Namespace のスペルが間違っている場合は、正しい Namespace 名で BackupPlan を正しく更新します。Namespace が本当に存在せず、バックアップする必要がない場合は、BackupPlan 構成の selectedNamespaces リストから削除します。

  4. BackupPlan に必要な修正を行った後、バックアップ オペレーションを再試行して、新しいバックアップを開始します。

オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。

次のステップ