このページでは、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.
トラブルシューティング手順
- 不足している CMEK 構成を特定する: エラー メッセージは、バックアップ対象の PVC が暗号化されているものの、バックアップ プランの構成に暗号鍵が不足していることを示しています。
- バックアップ プランに CMEK を追加する: 顧客管理の暗号鍵(CMEK)を含めるようにバックアップ プランの構成を更新します。この鍵は、リージョン スコープのボリューム バックアップを含むバックアップ データの暗号化に使用されます。
- 適切な権限を確保する: Backup for GKE サービス エージェント(
service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com)に、新しく追加された CMEK のroles/cloudkms.cryptoKeyEncrypterDecrypterロールが割り当てられていることを確認します。 - バックアップ オペレーションを再テストする: バックアップ プランが 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 が存在すると、新しいクラスタに正しく復元されない可能性があるため、重大なエラーと見なされます。
このエラーを解決するには、次の手順で対応します。
kubectl get crdコマンドを実行して、問題のあるCustomResourceDefinitionを特定します。kubectl get crd CRD_NAMECRD_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_NAMECRD_NAMEは、削除するCustomResourceDefinitionの名前に置き換えます。バックアップ プランで制限なしモードを有効にします。これにより、Backup for GKE はリソース(
v1beta1API バージョンのCustomResourceDefinitionsを含む)をスキップし、残りのバックアップ オペレーションを続行できます。制約なしモードを有効にする方法については、バックアップ プランで制約なしモードを有効にするをご覧ください。
バックアップ オペレーションを再試行します。オペレーションが引き続き失敗する場合は、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 が検出されるとバックアップ オペレーションを停止します。
このエラーを解決するには、次の手順で対応します。
次のコマンドを実行して、使用できない API サービスを特定します。
kubectl get apiservice出力で、
AVAILABLE列がFalseの API サービスを探します。次のコマンドを実行して、失敗した
APIServiceの詳細を調べます。kubectl describe apiservice APISERVICE_NAMEAPISERVICE_NAMEは、失敗した API サービスの名前(v1beta1.custom.metrics.k8s.ioなど)に置き換えます。出力で、
spec.serviceのServiceフィールドとConditionsセクションを確認して、バッキング Service、その Namespace、障害の原因(エンドポイントの欠落、到達不能なターゲット ポートなど)を特定します。次のいずれかの方法でエラーを解決します。
バッキング サービスを復元する: 次のコマンドを実行して、バッキング サービスに準備完了のエンドポイントがあることを確認します。
kubectl get endpoints -n NAMESPACE SERVICE_NAME次のように置き換えます。
NAMESPACE: バッキング サービスの Namespace。SERVICE_NAME: バッキング サービスの名前。
サービスをサポートする Pod が存在し、
Running状態であることを確認します。トラフィックがバッキング サービスに到達できない原因となっている、クラッシュした Pod、イメージの pull の失敗、ネットワーク ポリシーの構成ミスを解決します。孤立した
APIServiceを削除する:APIServiceが、削除されたか、使用されなくなったアプリケーション、オペレーター、モニタリング ツールに属している場合は、古いAPIServiceを削除します。kubectl delete apiservice APISERVICE_NAMEAPISERVICE_NAMEは、孤立した API サービスの名前に置き換えます。Permissive モードを有効にする: 利用できない API サービスをすぐに修正または削除できない場合は、バックアップ プランで Permissive モードを有効にします。許可モードが有効になっている場合、Backup for GKE はバックアップ オペレーションを続行します。ただし、使用できない API グループに属するリソースはバックアップされません。制約なしモードを有効にする方法については、バックアップ プランで制約なしモードを有効にするをご覧ください。
バックアップ オペレーションを再試行します。オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。
エラー 100040102: Namespace が見つかりません
エラー 100040102 は、バックアップ スコープで指定された Namespace がクラスタ内で見つからないため、バックアップ オペレーションの実行が失敗した場合に発生します。Backup for GKE エージェントは、BackupPlan 構成の selectedNamespaces フィールドに明示的にリストされている 1 つ以上の Namespace を特定できませんでした。Backup for GKE では、バックアップ オペレーションの開始時に、指定されたすべての Namespace がクラスタに存在する必要があります。Namespace が見つからないと、次のエラー メッセージが表示されます。
Namespace [NAMESPACE_NAME] is not found.
この問題を解決するには、次の手順で対応します。
BackupPlan構成のselectedNamespacesリストを確認して、Namespace が正しく入力されていることを確認します。kubectl get namespaceコマンドを実行して、エラー メッセージで報告された Namespace が存在することを確認します。kubectl get namespace NAMESPACE_NAMENAMESPACE_NAMEは、エラー メッセージで報告される Namespace の名前に置き換えます。Namespace が存在しない場合は、Namespace が見つからなかったことを示すメッセージ(
Error from server (NotFound): namespaces "[NAMESPACE_NAME]" not foundなど)が表示されます。BackupPlanを修正します。Namespace のスペルが間違っている場合は、正しい Namespace 名でBackupPlanを正しく更新します。Namespace が本当に存在せず、バックアップする必要がない場合は、BackupPlan構成のselectedNamespacesリストから削除します。BackupPlanに必要な修正を行った後、バックアップ オペレーションを再試行して、新しいバックアップを開始します。
オペレーションが引き続き失敗する場合は、Cloud カスタマーケアにお問い合わせください。