このページでは、一般的な問題とエラーのトラブルシューティングの手順について説明します。
FAILED インスタンス
FAILED
ステータスは、インスタンス データが失われ、インスタンスを削除する必要があることを意味します。
FAILED
状態の Parallelstore インスタンスは、削除されるまで課金され続けます。
インスタンスの状態を取得するには、インスタンスを管理する: インスタンスを取得するの手順に沿って操作します。
インスタンスを削除するには、インスタンスを管理する: インスタンスを削除するをご覧ください。
dfuse マウントまたはネットワーク テスト中のタイムアウト
Parallelstore インスタンスのマウント時に dfuse -m
コマンドがタイムアウトした場合、または self_test
や daos health net-test
などのネットワーク テスト コマンドがタイムアウトした場合は、ネットワーク接続の問題が原因である可能性があります。
Parallelstore サーバーへの接続を確認するには、次のコマンドを実行します。
self_test --use-daos-agent-env -r 1
テストで接続の問題が報告された場合は、次の 2 つの理由が考えられます。
セットアップ中に DAOS エージェントが間違ったネットワーク インターフェースを選択した可能性がある
access_points
リストの IP に到達できないネットワーク インターフェースを除外する必要がある場合があります。
ifconfig
を実行して、使用可能なネットワーク インターフェースを一覧表示します。出力例では、eth0
、docker0
、ens8
、lo
などの複数のネットワーク インターフェースが表示されることがあります。daos_agent を停止します。
/etc/daos/daos_agent.yml
を編集して、不要なネットワーク インターフェースを除外します。exclude_fabric_ifaces
行のコメントを解除し、値を更新します。含めるエントリは、状況によって異なります。次に例を示します。exclude_fabric_ifaces: ["docker0", "ens8", "lo"]
daos_agent を再起動します。
インスタンスまたはクライアントの IP アドレスが内部 IP アドレスと競合している
Parallelstore インスタンスとクライアントは、172.17.0.0/16 サブネット範囲の IP アドレスを使用できません。詳しくは、既知の問題をご覧ください。
ENOSPC
インスタンスに未使用の容量がある場合
インスタンスで最小ストライピングまたは(デフォルトの)バランス ストライピングを使用している場合、既存のファイルがインスタンスの容量をすべて使用していなくても、ENOSPC
エラーが発生する可能性があります。これは、通常 8 GiB を超える大きなファイルを書き込む場合や、そのようなファイルを Cloud Storage からインポートする場合に発生する可能性があります。
最大ファイル ストライピングを使用して、これらのエラーが発生する可能性を減らします。
Google Kubernetes Engine のトラブルシューティング
次のセクションでは、一般的な問題とその解決手順をいくつか示します。
ワークロード Pod の Transport endpoint is not connected
このエラーは、dfuse の終了が原因です。ほとんどの場合、dfuse はメモリ不足のために終了しました。Pod アノテーション gke-parallelstore/[cpu-limit|memory-limit]
を使用して、Parallelstore サイドカー コンテナにより多くのリソースを割り当てます。割り当てるメモリ容量がわからない場合は、gke-parallelstore/memory-limit: "0"
を設定してサイドカーのメモリ上限を削除できます。これは Standard クラスタでのみ機能します。Autopilot クラスタでは、値 0
を使用してサイドカー コンテナのリソース上限とリクエストの設定を解除することはできません。サイドカー コンテナのリソース上限を明示的に大きく設定する必要があります。
アノテーションを変更したら、ワークロード Pod を再起動する必要があります。実行中のワークロードにアノテーションを追加しても、リソース割り当ては動的に変更されません。
Pod イベントの警告
ワークロード Pod が起動しない場合は、Pod イベントを確認します。
kubectl describe pod POD_NAME -n NAMESPACE
次の解決策は、一般的なエラーに対するものです。
CSI ドライバの有効化に関する問題
一般的な CSI ドライバの有効化エラーは次のとおりです。
MountVolume.MountDevice failed for volume "volume" : kubernetes.io/csi:
attacher.MountDevice failed to create newCsiDriverClient:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
MountVolume.SetUp failed for volume "volume" : kubernetes.io/csi:
mounter.SetUpAt failed to get CSI client:
driver name parallelstore.csi.storage.gke.io not found in the list of registered CSI drivers
これらの警告は、CSI ドライバが有効になっていないか、実行されていないことを示します。
クラスタがスケーリング、更新、アップグレードされた直後であれば、この警告は正常であり、一時的なものです。クラスタ オペレーション後、CSI ドライバ Pod が機能するまでに数分かかります。
それ以外の場合は、クラスタで CSI ドライバが有効になっていることを確認します。詳細については、CSI ドライバを有効にするをご覧ください。CSI が有効になっている場合、各ノードには parallelstore-csi-node-id
という名前の Pod が実行中であることが示されます。
AttachVolume.Attach の失敗
Pod がノードにスケジュールされると、ボリュームがノードにアタッチされ、ノードマウントを使用している場合はマウンター Pod が作成されます。
これはコントローラで発生し、attachdetach-controller の AttachVolume ステップが関係します。
エラーコード | Pod イベントの警告 | 解決策 |
InvalidArgument |
|
無効なマウントフラグが PersistentVolume または StorageClass に渡されます。詳細については、サポートされている dfuse マウント オプションをご覧ください。 |
NotFound |
|
Parallelstore インスタンスが存在しません。PersistentVolume の volumeHandle の形式が正しいことを確認します。 |
MountVolume.MountDevice の失敗
ボリュームがノードにアタッチされると、ボリュームはノードにステージングされます。
これはノードで発生し、kubelet からの MountVolume.MountDevice ステップが関係します。
エラーコード | Pod イベントの警告 | 解決策 |
FailedPrecondition |
|
通常、このエラーはマウンター Pod が手動で削除されたことが原因で発生します。PVC を使用しているすべてのワークロードを削除して、再デプロイします。これにより、新しいマウンター Pod が作成されます。 |
DeadlineExceeded |
|
Parallelstore インスタンスへの接続に問題があります。VPC ネットワークとアクセス ポイントが正しく構成されていることを確認します。 |
MountVolume.SetUp の失敗
ボリュームがノードにステージングされると、ボリュームがマウントされ、Pod のコンテナに提供されます。これはノードで発生し、kubelet の MountVolume.SetUp ステップが関係します。
Pod マウント
エラーコード | Pod イベントの警告 | 解決策 |
ResourceExhausted |
|
dfuse プロセスが終了しました。これは通常、メモリ不足(OOM)の状態が原因です。gke-parallelstore/memory-limit アノテーションを使用して、サイドカー コンテナのメモリ上限の引き上げを検討してください。parallelstore-sidecar に割り当てるメモリ量が不明な場合は、 |
中止 |
|
レート制限または既存のオペレーションにより、ボリューム マウント オペレーションが中止されました。この警告は正常なもので、一時的なものです。 |
InvalidArgument |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = InvalidArgument desc =
|
StorageClass または PersistentVolume で無効な引数を指定した場合、エラーログには無効な引数を含むフィールドが示されます。動的プロビジョニングの場合は、ストレージ クラスを確認します。静的プロビジョニングの場合は、永続ボリュームを確認します。 |
FailedPrecondition |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = FailedPrecondition desc = can not find the sidecar
container in Pod spec
|
Parallelstore サイドカー コンテナが挿入されませんでした。gke-parallelstore/volumes: "true" Pod アノテーションが正しく設定されていることを確認します。 |
ノードマウント
エラーコード | Pod イベントの警告 | 解決策 |
中止 |
|
レート制限または既存のオペレーションにより、ボリューム マウント オペレーションが中止されました。この警告は正常なもので、一時的なものです。 |
InvalidArgument |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = InvalidArgument desc =
|
StorageClass または Persistent Volume で無効な引数を指定した場合は、エラーログに無効な引数を含むフィールドが示されます。動的プロビジョニングの場合は、ストレージ クラスを確認します。静的プロビジョニングの場合は、永続ボリュームを確認します。 |
FailedPrecondition |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = FailedPrecondition desc = mounter pod expected to exist but was not found
|
Parallelstore マウンタ Pod が存在しません。マウンター Pod が誤って削除された場合は、すべてのワークロードを再作成して、再作成を促します。 |
DeadlineExceeded |
MountVolume.SetUp failed for volume "volume" : rpc
error: code = DeadlineExceeded desc = timeout waiting for mounter pod gRPC server to become available
|
マウンター Pod の gRPC サーバーが起動しませんでした。マウンター Pod のログでエラーを確認します。 |
VPC ネットワークのトラブルシューティング
サービス servicenetworking.googleapis.com
のピアリングを追加する権限が拒否されました
ERROR: (gcloud.services.vpc-peerings.connect) User [$(USER)] does not have
permission to access services instance [servicenetworking.googleapis.com]
(or it may not exist): Permission denied to add peering for service
'servicenetworking.googleapis.com'.
このエラーは、ユーザー アカウントに servicenetworking.services.addPeering
IAM 権限がないことを意味します。
アカウントに次のいずれかのロールを追加する手順については、IAM を使用したアクセス制御をご覧ください。
roles/compute.networkAdmin
またはroles/servicenetworking.networksAdmin
CreateConnection で割り振り範囲を変更できない
ERROR: (gcloud.services.vpc-peerings.connect) The operation
"operations/[operation_id]" resulted in a failure "Cannot modify allocated
ranges in CreateConnection. Please use UpdateConnection.
このエラーは、異なる IP 範囲でこのネットワークに vpc-peering をすでに作成している場合に返されます。考えられる解決法は次の 2 つです。
既存の IP 範囲を置き換えます。
gcloud services vpc-peerings update \
--network=NETWORK_NAME \
--ranges=IP_RANGE_NAME \
--service=servicenetworking.googleapis.com \
--force
または、新しい IP 範囲を既存の接続に追加します。
ピアリングの既存の IP 範囲のリストを取得します。
EXISTING_RANGES=$( gcloud services vpc-peerings list \ --network=NETWORK_NAME \ --service=servicenetworking.googleapis.com \ --format="value(reservedPeeringRanges.list())" )
次に、新しい範囲をピアリングに追加します。
gcloud services vpc-peerings update \ --network=NETWORK_NAME \ --ranges=$EXISTING_RANGES,IP_RANGE_NAME \ --service=servicenetworking.googleapis.com
IP アドレス範囲が枯渇した
インスタンスの作成が失敗し、次の範囲が使い果たされたエラーが表示されることがあります。
ERROR: (gcloud.alpha.Parallelstore.instances.create) FAILED_PRECONDITION: Invalid
resource state for "NETWORK_RANGES_NOT_AVAILABLE": IP address range exhausted
このエラー メッセージが表示された場合は、VPC ガイドに沿って、IP 範囲を再作成するか、既存の IP 範囲を拡張します。
Parallelstore インスタンスを再作成する場合は、IP 範囲を拡張するのではなく、再作成する必要があります。
Pod Disruption Budget の制限によりメンテナンスがブロックされた
Google Cloud コンソールに、Pod Disruption Budget(PDB)で許可される Pod のエビクションが 0 に設定されているため、メンテナンスを続行できないことを示す次のエラー メッセージが表示されることがあります。
GKE can't perform maintenance because the Pod Disruption Budget allows for 0 Pods evictions.
このエラー メッセージが表示された場合は、次の手順で問題のある Pod を特定します。
エラー メッセージをクリックして、エラー分析情報パネルを開きます。
[許可されない Pod Disruption Budget] セクションで Pod の名前を確認します。
Pod が
parallelstorecsi-mount
の場合は、このエラーは無視できます。メンテナンスは妨げられません。他の Pod については、PDB を調べます。