すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ストレージのトラブルシューティング

最終更新日:Nov 14, 2024

このトピックでは、ストレージの診断手順と、ストレージ例外のトラブルシューティング方法について説明します。

診断手順

Procedure

  1. 次のコマンドを実行して、ポッドイベントを表示します。 ストレージの問題が原因でポッドの起動に失敗したかどうかを確認します。

    kubectl describe pod <pod-name>

    ポッドが次の状態の場合、ボリュームはポッドにマウントされます。 このシナリオでは、CrashLoopBackOffなどの他の問題が原因でポッドの起動に失敗します。 問題を解決するには、チケットを起票します。 pod

  2. 次のコマンドを実行して、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コマンドを実行して、コンテナーが終了してポッドイベントが表示される理由を確認します。

  3. 次のコマンドを実行して、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を使用している場合は、プラグインを最新バージョンに更新します。 詳細については、「コンポーネントの管理」をご参照ください。 ボリュームプラグインの更新エラーのトラブルシューティング方法の詳細については、「コンポーネントの更新エラーのトラブルシューティング」をご参照ください。

  4. 問題保留中のポッドをトラブルシューティングします。

  5. 永続ボリュームクレーム (PVC) のステータスがバインドされていない問題をトラブルシューティングします。

  6. 問題が解決しない場合は、チケットを起票します。

コンポーネント更新の失敗のトラブルシューティング

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インスタンスは、指定されたディスクタイプをサポートしていません。

解決策:

PVCのステータスがバインドされていません

問題:

PVCのステータスがバインドされておらず、ポッドのステータスが実行中ではありません。

原因:

  • 静的: PVCとパーシステントボリューム (PV) のセレクターが特定の条件を満たしていません。 したがって、PVとPVCを関連付けることはできません。 たとえば、PVCのセレクタ構成がPVのそれとは異なり、セレクタは異なるStorageClass名を使用し、PVのステータスはReleaseです。

  • 動的: csi-provisionerコンポーネントがディスクの作成に失敗しました。

解決策:

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> コマンドを実行して、ポッドイベントを表示します。

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イベントを表示します。

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> コマンドを実行して、ポッドイベントを表示します。

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イベントを表示します。