このトピックでは、ストレージの診断手順と、ストレージ例外のトラブルシューティング方法について説明します。
診断手順
次のコマンドを実行して、ポッドイベントを表示します。 ストレージの問題が原因でポッドの起動に失敗したかどうかを確認します。
kubectl describe pod <pod-name>
ポッドが次の状態の場合、ボリュームはポッドにマウントされます。 このシナリオでは、CrashLoopBackOffなどの他の問題が原因でポッドの起動に失敗します。 問題を解決するには、チケットを起票します。
次のコマンドを実行して、Container Storage Interface (CSI) プラグインが正常に動作するかどうかを確認します。
kubectl get pod -n kube-system | grep csi
期待される出力:
NAME READY STATUS RESTARTS AGE csi-plugin-*** 4/4 Running 0 23d csi-provisioner-*** 7/7 Running 0 14d
説明ポッドのステータスが実行中でない場合は、
kubectl describe pods <pod-name> -n kube-system
コマンドを実行して、コンテナーが終了してポッドイベントが表示される理由を確認します。次のコマンドを実行して、CSIプラグインのバージョンが最新かどうかを確認します。
kubectl get ds csi-plugin -n kube-system -oyaml |grep image
期待される出力:
image: registry.cn-****.aliyuncs.com/acs/csi-plugin:v*****-aliyun
最新のCSIバージョンの詳細については、「csi-plugin」および「csi-provisioner」をご参照ください。 クラスターが以前のバージョンのCSIを使用している場合は、プラグインを最新バージョンに更新します。 詳細については、「コンポーネントの管理」をご参照ください。 ボリュームプラグインの更新エラーのトラブルシューティング方法の詳細については、「コンポーネントの更新エラーのトラブルシューティング」をご参照ください。
問題保留中のポッドをトラブルシューティングします。
ポッドがディスクを使用している場合は、「ディスクを使用しているポッドのステータスは実行中ではありません」をご参照ください。
ポッドがApsara File Storage NAS (NAS) ファイルシステムを使用している場合は、「NASファイルシステムを使用しているポッドのステータスが実行中ではない」をご参照ください。
ポッドがObject Storage Service (OSS) バケットを使用している場合は、「OSSバケットを使用しているポッドのステータスが実行中ではない」をご参照ください。
永続ボリュームクレーム (PVC) のステータスがバインドされていない問題をトラブルシューティングします。
PVCがディスクに対応している場合は、「ディスクのPVCがバインドされていない状態」をご参照ください。
PVCがNASファイルシステムに対応する場合は、「NAS PVCのステータスがバインドされていない」をご参照ください。
PVCがOSSバケットに対応する場合は、[OSS PVCのバインドされていない状態] をご参照ください。
問題が解決しない場合は、チケットを起票します。
コンポーネント更新の失敗のトラブルシューティング
csi-provisionerおよびcsi-pluginコンポーネントの更新に失敗した場合は、次の手順を実行して問題のトラブルシューティングを行います。
csi-provisioner
デフォルトでは、csi-provisionerコンポーネントは、2つのポッドを作成するDeploymentを使用してデプロイされます。 ポッドは相互に排他的であるため、同じノードにスケジュールすることはできません。 コンポーネントの更新に失敗した場合は、クラスターで使用可能なノードが1つだけかどうかを確認します。
バージョン1.14以前の場合、csi-provisionerコンポーネントはStatefulSetを使用してデプロイされます。 クラスター内のcsi-provisionerコンポーネントがStatefulSetを使用してデプロイされている場合は、
kubectl delete sts csi-provisioner
コマンドを実行して、現在のcsi-provisionerコンポーネントを削除できます。 次に、ACKコンソールにログインし、csi-provisionerコンポーネントを再インストールします。 詳細については、「コンポーネントの管理」をご参照ください。
csi-plugin
クラスターに
NotReady
状態のノードが含まれているかどうかを確認します。NotReady
ノードが存在する場合、ACKはcsi-pluginコンポーネントのデプロイに使用されるDaemonSetを更新できません。csi-pluginコンポーネントの更新に失敗したが、すべてのプラグインが正常に動作する場合、この問題は更新タイムアウトエラーが原因です。 コンポーネントセンターがcsi-pluginコンポーネントを更新したときにタイムアウトエラーが発生した場合、コンポーネントセンターは自動的に更新をロールバックします。 この問題を解決するには、チケットを起票します。
ディスクのトラブルシューティング
ディスクをノードにマウントするには、ノードとディスクが同じリージョンとゾーンに作成されていることを確認します。 異なるリージョンまたはゾーンで作成されている場合、ディスクをノードにマウントできません。
異なるタイプのElastic Compute Service (ECS) インスタンスでサポートされるディスクのタイプは異なります。 詳細については、「インスタンスファミリーの概要」をご参照ください。
ポッドのステータスが実行中ではない
問題:
PVCのステータスはBoundですが、ポッドのステータスはRunningではありません。
原因:
スケジューリングに使用できるノードはありません。
システムがディスクをマウントするときにエラーが発生します。
ECSインスタンスは、指定されたディスクタイプをサポートしていません。
解決策:
ポッドを別のノードにスケジュールします。 詳細については、「特定のノードへのポッドのスケジュール」をご参照ください。
kubectl describe pods <pod-name>
コマンドを実行して、ポッドイベントを表示します。イベントに基づいて問題をトラブルシューティングします。
ディスクのマウント時にエラーが発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。
ディスクのアンマウント時にエラーが発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。
イベントが表示されない場合は、チケットを起票します。
ECSインスタンスが指定されたディスクタイプをサポートしていない場合は、ECSインスタンスでサポートされているディスクタイプを選択します。 詳細については、「インスタンスファミリーの概要」をご参照ください。
ECS APIの問題をトラブルシューティングするには、ErrorCodeをご参照ください。
PVCのステータスがバインドされていません
問題:
PVCのステータスがバインドされておらず、ポッドのステータスが実行中ではありません。
原因:
静的: PVCとパーシステントボリューム (PV) のセレクターが特定の条件を満たしていません。 したがって、PVとPVCを関連付けることはできません。 たとえば、PVCのセレクタ構成がPVのそれとは異なり、セレクタは異なるStorageClass名を使用し、PVのステータスはReleaseです。
動的: csi-provisionerコンポーネントがディスクの作成に失敗しました。
解決策:
静的: 関連するYAMLコンテンツを確認します。 詳細については、「kubectlを使用して静的にプロビジョニングされたディスクボリュームをマウントする」をご参照ください。
説明PVのステータスがリリースの場合、PVは再利用できません。 ディスクを使用するには、新しいPVを作成する必要があります。
動的:
kubectl describe pvc <pvc-name> -n <namespace>
コマンドを実行し、PVCイベントを表示します。イベントに基づいて問題をトラブルシューティングします。
システムがディスクを拡張する際にエラーが発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。
イベントが表示されない場合は、チケットを起票します。
ECS APIを呼び出してディスクを作成するときにエラーが発生した場合は、ErrorCodeを参照して問題のトラブルシューティングを行います。 問題が解決しない場合は、チケットを起票します。
NASトラブルシューティング
NASファイルシステムをノードにマウントするには、ノードとNASファイルシステムが同じ仮想プライベートクラウド (VPC) にデプロイされていることを確認します。 ノードとNASファイルシステムが異なるVPCにデプロイされている場合は、Cloud Enterprise Network (CEN) を使用してそれらを接続します。
NASファイルシステムとは異なるゾーンにデプロイされているノードにNASファイルシステムをマウントできます。
Extreme NASファイルシステムまたはCPFS 2.0ファイルシステムがマウントされるパスは、/shareで始まる必要があります。
ポッドのステータスが実行中ではない
問題:
PVCのステータスはBoundですが、ポッドのステータスはRunningではありません。
原因:
fsGroups
は、NASファイルシステムをマウントするときに使用されます。 chmodは、多数のファイルを処理する必要があるため、速度が低下します。ポート2049がセキュリティグループルールでブロックされています。
NASファイルシステムとノードは、異なるVPCにデプロイされます。
解決策:
fsGroups
が設定されているかどうかを確認します。 はいの場合、fsGroupsを削除し、ポッドを再起動して、NASファイルシステムを再度マウントします。ポッドをホストするノードのポート2049がブロックされているか確認してください。 はいの場合、ポートのブロックを解除して、もう一度お試しください。 詳細については、「セキュリティグループルールの追加」をご参照ください。
NASファイルシステムとノードが異なるVPCにデプロイされている場合は、CENを使用してそれらを接続します。
その他の原因については、
kubectl describe pods <pod-name>
コマンドを実行して、ポッドイベントを表示します。イベントに基づいて問題をトラブルシューティングします。 詳細については、「NASボリュームに関するFAQ」をご参照ください。
イベントが表示されない場合は、チケットを起票します。
PVCのステータスがバインドされていません
問題:
PVCのステータスがバインドされておらず、ポッドのステータスが実行中ではありません。
原因:
静的: PVCとPVのセレクターが特定の条件を満たしていません。 したがって、PVとPVCを関連付けることはできません。 たとえば、PVCのセレクタ構成がPVのそれとは異なり、セレクタは異なるStorageClass名を使用し、PVのステータスはReleaseです。
動的: csi-provisionerコンポーネントがNASファイルシステムのマウントに失敗しました。
解決策:
静的: 関連するYAMLコンテンツを確認します。 詳細については、「静的にプロビジョニングされたNASボリュームのマウント」をご参照ください。
説明PVのステータスがリリースの場合、PVは再利用できません。 NASファイルシステムを使用する新しいPVを作成します。
動的:
kubectl describe pvc <pvc-name> -n <namespace>
コマンドを実行し、PVCイベントを表示します。イベントに基づいて問題をトラブルシューティングします。 詳細については、「NASボリュームに関するFAQ」をご参照ください。
イベントが表示されない場合は、チケットを起票します。
OSSトラブルシューティング
OSSバケットをノードにマウントするときは、PVでAccessKeyペアを指定する必要があります。 AccessKeyペアをSecretに格納できます。
OSSバケットとノードが異なるリージョンで作成されている場合は、バケットURLをOSSバケットのパブリックエンドポイントに設定します。 OSSバケットとノードが同じリージョンに作成されている場合は、OSSバケットのプライベートエンドポイントを使用することを推奨します。
ポッドのステータスが実行中ではない
問題:
PVCのステータスはBoundですが、ポッドのステータスはRunningではありません。
原因:
fsGroups
は、OSSバケットをマウントするときに使用されます。 chmodは、多数のファイルを処理する必要があるため、速度が低下します。OSSバケットとノードは異なるリージョンで作成され、OSSバケットのプライベートエンドポイントが使用されます。 その結果、ノードはバケットエンドポイントへの接続に失敗します。
解決策:
fsGroups
が設定されているかどうかを確認します。 はいの場合、fsGroupsを削除し、ポッドを再起動し、OSSバケットを再度マウントします。OSSバケットとノードが同じリージョンに作成されているかどうかを確認します。 異なるリージョンで作成されている場合は、OSSバケットのプライベートエンドポイントが使用されているかどうかを確認します。 該当する場合は、OSSバケットのパブリックエンドポイントに変更します。
その他の原因については、
kubectl describe pods <pod-name>
コマンドを実行して、ポッドイベントを表示します。イベントに基づいて問題をトラブルシューティングします。 詳細については、「OSSボリュームに関するFAQ」をご参照ください。
イベントが表示されない場合は、チケットを起票します。
PVCのステータスがバインドされていません
問題:
PVCのステータスがバインドされておらず、ポッドのステータスが実行中ではありません。
静的: PVCとPVのセレクターが特定の条件を満たしていません。 したがって、PVとPVCを関連付けることはできません。 たとえば、PVCのセレクタ構成がPVのそれとは異なり、セレクタは異なるStorageClass名を使用し、PVのステータスはReleaseです。
動的: csi-provisionerコンポーネントがOSSバケットのマウントに失敗しました。
解決策:
静的: 関連するYAMLコンテンツを確認します。 詳細については、「静的にプロビジョニングされたOSSボリュームのマウント」をご参照ください。
説明PVのステータスがリリースの場合、PVは再利用できません。 OSSバケットを使用する新しいPVを作成します。
動的:
kubectl describe pvc <pvc-name> -n <namespace>
コマンドを実行し、PVCイベントを表示します。イベントに基づいて問題をトラブルシューティングします。 詳細については、「OSSボリュームに関するFAQ」をご参照ください。
イベントが表示されない場合は、チケットを起票します。