永続ボリューム (PV) のマウントまたは使用時に Pod のステータスが異常な場合、Pod とその PersistentVolumeClaim (PVC) のステータスとイベント、および Container Storage Interface (CSI) コンポーネントのステータスを確認することで、問題を特定して解決できます。このトピックでは、ストレージ関連の問題をトラブルシューティングする方法と、一般的なストレージの問題に関する情報について説明します。

1. Pod の異常がストレージの問題によって引き起こされているかどうかの確認
Pod または PVC イベントを確認して、ストレージの問題により Pod が起動できないことを確認します。
-
異常な Pod のイベントを表示します。
kubectl describe pod <pod-name>-
イベントがストレージの問題を示している場合、このトピックのトラブルシューティング手順に進みます。たとえば、次のサンプル出力の
FailedSchedulingイベントには、ボリュームとノードが一致しないためスケジューリングが失敗したことを示すMessageがあります。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-
イベントがストレージの問題を示している場合、このトピックのトラブルシューティング手順に進みます。たとえば、サンプル出力の
FailedBindingイベントは、PVC が PV にバインドできなかったことを示しています。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 3d -
CSI ストレージコンポーネントが最新バージョンであるか確認します。
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 コンポーネントをアップグレードします。ストレージコンポーネントの最新バージョンに関する詳細については、「csi-plugin」をご参照ください。
説明コンソールのアドオン管理 ページに移動して、 csi-plugin および csi-provisioner コンポーネントを探し、バージョンを確認してアップグレードすることもできます。
-
PV、PVC、および StorageClass の YAML ファイルを確認して、ドライバー構成 (
driverまたはprovisionerフィールド) が CSI ストレージコンポーネントを使用するように設定されており、クラスターで使用されているストレージコンポーネントと一致していることを確認します。
3. PVC ステータスが Bound であるかどうかの確認
-
PVC ステータスを表示します。
kubectl get pvc -
PVC が `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 pod -
PVC が `Bound` 状態であるにもかかわらず Pod が `Running` 状態ではない場合、永続ボリュームのタイプに基づいて次のように問題をトラブルシューティングして解決します。
クラウドディスク永続ボリューム
重要クラウドディスク永続ボリュームを使用する場合、Pod がスケジューリングされる ECS ノードのインスタンスタイプが、指定されたタイプのクラウドディスクのアタッチをサポートしていること、および Pod とクラウドディスクが同じリージョンとゾーンにあることを確認してください。ディスクタイプと ECS インスタンスタイプのマッピングについては、「インスタンスファミリー」をご参照ください。
原因
-
スケジューリングに利用できる適格なノードがありません。
-
クラウドディスクのアタッチ時に問題が発生しました。
-
ECS インスタンスタイプとクラウドディスクタイプが一致しません。
解決策
-
迅速に回復するには、Pod を別のノードにスケジューリングできます。詳細については、「アプリケーションを特定のノードにスケジューリング」をご参照ください。
-
kubectl describe pods <pod-name>を実行して Pod イベントを表示します。-
イベントメッセージに基づいて問題を処理します。詳細については、「クラウドディスク永続ボリュームに関するよくある質問」をご参照ください。
-
関連するイベントメッセージがない場合、チケットを送信してサポートを依頼してください。
-
-
問題が ECS インスタンスタイプとクラウドディスクタイプの不一致によって引き起こされている場合、適切なディスクタイプを選択できます。詳細については、「インスタンスファミリー」をご参照ください。
-
その他の ECS OpenAPI の処理方法については、「ErrorCode」をご参照ください。
NAS 永続ボリューム
重要-
ノードと NAS ファイルシステムは同じ VPC に存在する必要があります。同じ VPC にない場合、Cloud Enterprise Network (CEN) を使用して接続できます。
-
NAS はゾーン間マウントをサポートしています。
-
超高速型 NAS ファイルシステムのマウントパスは
/shareで始まる必要があります。
原因
-
fsGroupsを使用して NAS ファイルシステムをマウントすると、多くのファイルが `chmod` 操作を遅くする可能性があります。 -
セキュリティグループでポート 2049 がブロックされており、NAS ファイルシステムのマウントが妨げられています。
-
NAS ファイルシステムとノードが同じ VPC にありません。
解決策
-
fsGroupsが設定されているか確認します。設定されている場合、それを削除し、Pod を再起動して、ボリュームを再度マウントできます。 -
Pod がスケジューリングされているノードでポート 2049 がブロックされているか確認します。ポートがブロックされている場合、ポート 2049 を開放してからボリュームを再度マウントできます。詳細については、「セキュリティグループルールの追加」をご参照ください。
-
NAS ファイルシステムとノードが同じ VPC にあることを確認します。同じでない場合、CEN を使用して接続します。
-
その他の問題については、
kubectl describe pods <pod-name>を実行して Pod イベントを表示します。-
イベントメッセージに基づいて問題を処理します。詳細については、「NAS 永続ボリュームに関するよくある質問」をご参照ください。
-
関連するイベントメッセージがない場合、チケットを送信してサポートを依頼してください。
-
OSS 永続ボリューム
重要-
ノードが OSS バケットをマウントする場合、PV には AccessKey 情報が含まれている必要があります。この情報は Secret を使用して提供できます。
-
リージョン間で OSS を使用する場合、バケット URL をパブリックエンドポイントに変更します。同じリージョン内では、内部エンドポイントを使用することを推奨します。
原因
-
fsGroupsを使用して多数のファイルを含む OSS バケットをマウントすると、chmod 操作が遅くなります。 -
クロスリージョンアクセスに内部エンドポイントが使用されており、バケットエンドポイントへの接続が妨げられています。
解決策
-
fsGroupsが設定されているか確認します。設定されている場合、それを削除し、Pod を再起動して、ボリュームを再度マウントできます。 -
内部エンドポイントを使用してリージョン間でバケットにアクセスしているか確認します。アクセスしている場合、代わりにパブリックエンドポイントを使用します。
-
その他の問題については、
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 テンプレートと一致し、次の条件が満たされていることを確認します。
-
CSI ストレージコンポーネントは、CSI 関連ドキュメントを使用してデプロイされます。詳細については、「CSI」をご参照ください。
-
FlexVolume ストレージコンポーネントは、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
原因
Pod によって参照されるカスタム StorageClass が作成されておらず、見つかりません。
解決策
Pod によって参照される StorageClass が存在するか確認します。存在しない場合、StorageClass を再作成できます。
PV が Released 状態であり、PVC を再作成してもバインドできない
症状
PVC が誤って削除された後、PV は Released 状態になり、PVC を再作成してもバインドできません。
原因
PV の 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 ファイルが変更されない場合、この変更は既存の構成に影響しません。