ストレージボリュームのマウントおよび使用中に Pod のステータス異常が発生した場合、Pod と PVC のステータスとイベント、および CSI ストレージコンポーネントを確認して原因を特定し、問題を解決することでトラブルシューティングできます。このトピックでは、ストレージの問題の診断手順と一般的なストレージの問題について説明します。

1. Pod の異常がストレージの問題によって引き起こされているかどうかを確認する
Pod または PVC イベントを確認して、ストレージの問題で Pod が起動できないかどうかを確認します。
異常な Pod のイベントを確認します。
kubectl describe pod <pod-name>イベントにストレージの問題を示すイベントがある場合 (たとえば、スケジューリングがボリュームとノードの不一致のために失敗したことを示す
Messageを伴うサンプルのFailedScheduling)、さらなるトラブルシューティングについては、次のセクションをご参照ください。Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 4m37s default-scheduler 0/1 nodes are available: 1 node(s) had volume node affinity conflict. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.,イベントにボリュームが正常にマウントされたことを示すイベントがある場合 (たとえば、サンプルの
SuccessfulAttachVolume)、Pod が起動していない場合 (たとえば、CrashLoopBackOff)、これはストレージの問題ではありません。イベントに基づいて他の問題をトラブルシューティングするか、チケットを送信してください。Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 97s default-scheduler Successfully assigned default/disk-test-0 to cn-shanghai.192.168.5.2 Normal SuccessfulAttachVolume 97s attachdetach-controller AttachVolume.Attach succeeded for volume "d-uf6b8s2l5ypf48*****"
Pod イベントにストレージ関連のイベントが見つからない場合は、すべてのイベントを確認できます。
kubectl get eventsストレージの問題を示すイベントがある場合 (たとえば、PVC が PV にバインドできなかったことを示すサンプルの
FailedBinding)、さらなるトラブルシューティングについては、次のセクションをご参照ください。LAST SEEN TYPE REASON OBJECT MESSAGE 2m56s Normal FailedBinding persistentvolumeclaim/data-my-release-mariadb-0 no persistent volumes available for this claim and no storage class is set 41s Normal ExternalProvisioning persistentvolumeclaim/pvc-nas-dynamic-create-subpath8 waiting for a volume to be created, either by external provisioner "nasplugin.csi.alibabacloud.com" or manually created by system administrator 3m31s Normal Provisioning persistentvolumeclaim/pvc-nas-dynamic-create-subpath8 External provisioner is provisioning volume for claim "default/pvc-nas-dynamic-create-subpath8"ストレージ関連のイベントがない場合は、イベントに基づいて他の問題をトラブルシューティングするか、チケットを送信してください。
2. ストレージコンポーネントが正常に動作しているか確認する
クラスターが現在 Flexvolume コンポーネントを使用している場合、Flexvolume は非推奨であるため、できるだけ早く CSI コンポーネントに移行してください。詳細については、「Flexvolume から CSI への移行」をご参照ください。
CSI ストレージコンポーネントが正常に動作しているかどうかを確認します。
kubectl get pod -n kube-system |grep csi以下は返された結果の例です。Pod のステータスが Running でない場合は、
kubectl describe pods <pod-name> -n kube-systemを実行して、コンテナーの終了の具体的な理由と Pod のイベントを確認できます。説明CSI ストレージコンポーネントには csi-plugin と csi-provisioner が含まれており、csi-provisioner はデフォルトでマネージドバージョンでインストールされます。マネージドバージョンのコンポーネントは Alibaba Cloud によって維持管理されており、クラスター内で関連する Pod を表示することはできません。
NAME READY STATUS RESTARTS AGE csi-plugin-bpz28 4/4 Running 0 3d csi-plugin-h2tdg 4/4 Running 0 3d csi-plugin-qpnm4 4/4 Running 0 3d csi-plugin-wczgm 4/4 Running 0 3dCSI ストレージコンポーネントが最新バージョンであるかどうかを確認します。
kubectl get ds csi-plugin -n kube-system -o yaml |grep image返された情報の
imageフィールドでイメージのバージョンを確認できます。次の例をご参照ください。image: registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/csi-plugin:v1.33.1-67e8986-aliyunストレージコンポーネントが最新バージョンでない場合は、csi-plugin と csi-provisioner をアップグレードしてください。ストレージコンポーネントの最新バージョンについては、「csi-plugin」をご参照ください。
説明コンソールの [コンポーネント] ページで csi-plugin と csi-provisioner コンポーネントを見つけて、バージョン情報を確認し、コンポーネントをアップグレードすることもできます。
PV、PVC、および StorageClass の YAML を確認して、ドライバー構成 (
driverまたはprovisionerフィールド) が CSI ストレージコンポーネントを使用しており、現在のクラスターで使用されているストレージコンポーネントと一致していることを確認します。
3. PVC が Bound 状態であるか確認する
PVC のステータスを確認します。
kubectl get pvcPVC が Bound 状態でない場合は、次のメソッドを参照してトラブルシューティングと解決を行ってください。
原因
静的: PVC と PV のセレクターが特定の条件を満たしていません。たとえば、PVC のセレクター構成が PV の構成と異なる、StorageClass 名が一致しない、または PV のステータスが Released であるなどです。
動的: csi-provisioner コンポーネントの問題。
解決策
静的: 関連する YAML が正しく記述されているかどうかを確認します。詳細については、次のトピックをご参照ください。
説明PV のステータスが Released の場合、PV は再利用できません。PV からストレージリソース情報を取得し、新しい PV を作成する必要があります。
動的:
kubectl describe pvc <pvc-name> -n <namespace>を実行して PVC イベントを確認します。イベントのプロンプト情報に従って処理します。詳細については、次のトピックをご参照ください。
関連するイベント情報がない場合は、チケットを送信してください。
ディスクボリュームを使用している場合、問題はディスク作成時の ECS OpenAPI にある可能性があります。トラブルシューティングについては、「ECS エラーセンター」をご参照ください。トラブルシューティングに失敗した場合は、チケットを送信してください。
4. Pod が Running 状態であるか確認する
Pod のステータスを確認します。
kubectl get podPVC が Bound 状態であるが、Pod が Running 状態でない場合は、ストレージボリュームのタイプに基づいて、次のメソッドを参照してトラブルシューティングと解決を行ってください。
ディスクボリューム
重要ディスクボリュームを使用する場合、Pod がスケジュールされている ECS ノードの仕様がそのタイプのディスクのマウントをサポートしていること、および Pod とディスクが同じリージョンとゾーンにあることを確認する必要があります。ディスクタイプと ECS インスタンス仕様のマッチング関係については、「インスタンスファミリーの概要」をご参照ください。
原因
スケジューリング可能なノードがありません。
システムがディスクをマウントするときにエラーが発生します。
ECS インスタンスが指定されたディスクタイプをサポートしていません。
解決策
Pod を別のノードにスケジュールします。詳細については、「アプリケーション Pod を指定されたノードにスケジュールする」をご参照ください。
kubectl describe pods <pod-name>を実行して Pod イベントを表示します。イベントのプロンプト情報に従って処理します。詳細については、「ディスクボリュームに関するよくある質問」をご参照ください。
関連するイベント情報がない場合は、チケットを送信してください。
ECS インスタンスが指定されたディスクタイプをサポートしていない場合は、ECS インスタンスでサポートされているディスクタイプを選択します。詳細については、「インスタンスファミリーの概要」をご参照ください。
その他の ECS OpenAPI タイプの問題については、「ErrorCode」をご参照ください。
NAS ボリューム
重要ノードと NAS は同じ VPC にある必要があります。同じ VPC にない場合は、Cloud Enterprise Network を使用して接続します。
NAS はクロスゾーンマウントをサポートしています。
Extreme NAS のマウントディレクトリは
/shareで始まる必要があります。
原因
NAS のマウント時に
fsGroupsが使用され、ファイルが多いため、chmod が遅くなります。ポート 2049 がセキュリティグループルールでブロックされています。
NAS ファイルシステムとノードが異なる VPC にデプロイされています。
解決策
fsGroupsが構成されているかどうかを確認します。構成されている場合は、それらを削除し、Pod を再起動して、再度マウントを試みます。Pod をホストするノードのポート 2049 がブロックされているかどうかを確認します。ブロックされている場合は、ポートのブロックを解除して再試行します。詳細については、「セキュリティグループルールを追加する」をご参照ください。
NAS ファイルシステムとノードが異なる VPC にデプロイされている場合は、Cloud Enterprise Network を使用して接続します。
その他の問題については、
kubectl describe pods <pod-name>を実行して Pod イベントを表示します。イベントのプロンプト情報に従って処理します。詳細については、「NAS ボリュームに関するよくある質問」をご参照ください。
関連するイベント情報がない場合は、チケットを送信してください。
OSS ボリューム
重要OSS をノードにマウントする場合、PV に AccessKey 情報を入力する必要があります。これは Secret メソッドを介して使用できます。
リージョンをまたいで OSS を使用する場合は、バケット URL をパブリックアドレスに変更する必要があります。同じリージョンの場合は、内部アドレスを使用することをお勧めします。
原因
OSS のマウント時に
fsGroupsが使用され、ファイルが多いため、chmod が遅くなります。OSS バケットとノードが異なるリージョンで作成され、OSS バケットの内部エンドポイントが使用されています。その結果、ノードはバケットエンドポイントに接続できません。
解決策
fsGroupsが構成されているかどうかを確認します。構成されている場合は、それらを削除し、Pod を再起動して、再度マウントを試みます。OSS バケットとノードが異なるリージョンで作成され、内部エンドポイントが使用されているかどうかを確認します。使用されている場合は、パブリックエンドポイントに変更します。
その他の問題については、
kubectl describe pods <pod-name>を実行して Pod イベントを表示します。イベントのプロンプト情報に従って処理します。詳細については、「ossfs 1.0 ボリュームに関するよくある質問」または「ossfs 2.0 ボリュームに関するよくある質問」をご参照ください。
関連するイベント情報がない場合は、チケットを送信してください。
よくある質問
ストレージボリュームの作成またはマウント時に、PVC が no volume plugin matched をプロンプト表示する
問題
ストレージボリュームの作成またはマウント時に、PVC が Unable to attach or mount volumes: unmounted volumes=[xxx], unattached volumes=[xxx]: failed to get Plugin from volumeSpec for volume "xxx" err=no volume plugin matched をプロンプト表示します。
原因
ボリュームプラグインが YAML テンプレートと一致しません。その結果、システムはボリュームの作成またはマウント時に対応するボリュームプラグインを見つけることができません。
解決策
クラスターにボリュームプラグインが存在するかどうかを確認します。
ボリュームプラグインがインストールされていない場合は、プラグインをインストールします。詳細については、「コンポーネントの管理」をご参照ください。
ボリュームプラグインが既にインストールされている場合は、ボリュームプラグインが PV と PVC の YAML テンプレートと一致するかどうか、および YAML テンプレートが次の要件を満たしているかどうかを確認します。
CSI プラグインは、必要に応じて手順に従ってデプロイされます。詳細については、「ストレージ CSI」をご参照ください。
FlexVolume プラグインは、必要に応じて手順に従ってデプロイされます。詳細については、「ストレージ FlexVolume」をご参照ください。
重要FlexVolume は非推奨であるため、できるだけ早く CSI コンポーネントに移行することをお勧めします。詳細については、「Flexvolume から CSI への移行」をご参照ください。
Pod のイベントが 0/x nodes are available: x pod has unbound immediate PersistentVolumeClaims をプロンプト表示する
問題
Pod の起動に失敗し、Pod イベントに次のように表示されます。
0/x nodes are available: x pod has unbound immediate PersistentVolumeClaims. preemption: 0/x nodes are available: x Preemption is not helpful for scheduling原因
カスタム StorageClass が存在しないため、Pod によって参照されているカスタム StorageClass が見つかりません。
解決策
現在の Pod によって参照されている StorageClass が存在するかどうかを確認する必要があります。存在しない場合は、StorageClass を再作成する必要があります。
PV が Released 状態であり、PVC を再作成してもバインドできない
問題
PVC が誤って削除された後、PV は Released 状態になり、PVC を再作成してもバインドできません。
原因
PVC の reclaimPolicy が Retain の場合、PVC が誤って削除されると、PV は Released 状態に変わります。
解決策
現在の PV の pv.spec.claimRef フィールドを削除し、静的ボリュームメソッドを使用して再バインドする必要があります。これにより、PV は Bound 状態に変わります。
PV が Lost 状態であり、PVC を再作成してもバインドできない
問題
PVC と PV を作成した後、PV は Lost 状態になり、PVC にバインドできません。
原因
PV の claimRef によって参照される PVC 名が存在しないため、PV の状態は Lost になります。
解決策
現在の PV の pv.spec.claimRef フィールドを削除し、静的ボリュームメソッドを使用して再バインドする必要があります。これにより、PV は Bound 状態に変わります。
StorageClass への変更は既存のストレージに影響しますか?
PVC と PV の YAML ファイルが変更されない場合、StorageClass への変更は既存のストレージに影響しません。たとえば、StorageClass の ALLOWVOLUMEEXPANSION フィールドを変更する場合、PVC の Capacity を変更した後にのみ有効になります。PVC の YAML ファイルが変更されない場合、このフィールドは既存の構成に影響しません。