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

Container Service for Kubernetes:csi-plugin および csi-provisioner コンポーネントの管理

最終更新日:Jun 23, 2026

Container Storage Interface (CSI) コンポーネントである csi-plugincsi-provisioner は、ストレージボリュームの動的プロビジョニング、マウント、アンマウント、サイズ変更などの操作を自動化します。これにより、クラウドディスクや NAS などの Alibaba Cloud ストレージリソースを、ネイティブの Kubernetes リソースのようにシームレスに利用できます。

コンポーネントの概要

コンポーネント

CSI コンポーネントは、デフォルトで Container Service for Kubernetes (ACK) クラスターにインストールされます。csi-plugincsi-provisioner コンポーネントは連携して、ストレージボリュームのライフサイクルを管理します。

コンポーネント

説明

デプロイタイプ

csi-plugin

各ノードで実行され、ストレージボリュームのマウントやアンマウント、ファイルシステムのフォーマットなど、ノードレベルの操作を実行します。

DaemonSet

csi-provisioner

中央コントローラーとして実行され、ストレージボリュームの動的プロビジョニング、削除、サイズ変更、スナップショット作成を処理します。クラウドディスク、NAS、OSS ストレージボリュームの管理をサポートします。

Deployment

csi-provisioner のマネージドモードとアンマネージドモード

安定性を向上させ、運用オーバーヘッドを削減するために、csi-provisioner はマネージドモードとアンマネージドモードを提供します。新しいクラスターはデフォルトでマネージドモードを使用します。

  • マネージドモード (デフォルト)
    コンポーネントの Pod は ACK によって管理され、kube-system 名前空間には表示されません。ACK がコンポーネントを維持し、そのリソースを調整します。







  • アンマネージドモード
    コンポーネントの Pod は、kube-system 名前空間に Deployment としてデプロイされます。リソース構成の管理 (Deployment の YAML を変更) や問題のトラブルシューティングは、お客様自身で行う必要があります。







CSI コンポーネントのアップグレード

コンソールの アドオン管理 ページでコンポーネントのバージョンを表示し、アップグレードを実行できます。

アップグレード前のチェック

  • バージョンの互換性の確認:変更履歴 (csi-provisionercsi-plugin) を参照して、ターゲットの CSI バージョンが現在のクラスターバージョンと互換性があることを確認します。

  • FlexVolume の移行ステータスの確認:クラスターが以前に csi-compatible-controller コンポーネントを使用して FlexVolume から CSI に移行した場合、未完了の移行タスクがあると CSI コンポーネントの自動アップグレードがブロックされます。まず移行を完了するか、「コンポーネントのアップグレード」を参照して移行中に手動でアップグレードを実行してください。

  • アップグレード順序の遵守:ストレージコンポーネントには依存関係があります。互換性と安定性を確保するために、次の順序でアップグレードしてください:storage-operatorcsi-provisionercsi-plugin

アップグレード手順

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、クラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[コンポーネントとアドオン] をクリックします。

  3. ボリューム タブをクリックします。csi-provisionercsi-plugin を見つけ、順にアップグレードします。

    アップグレードに失敗した場合は、「コンポーネントのアップグレード失敗」をご参照ください。

    アップグレード後、コンポーネントカードでバージョンが期待通りであることを確認できます。

本番運用時の注意点

  • セキュリティ強化とメタデータアクセスの競合:

    csi-plugin コンポーネントは、リージョンやアベイラビリティゾーンなどのノード情報を取得するために、インスタンスメタデータにアクセスする必要があります。メタデータアクセスを無効にすると、コンポーネントの起動に失敗したり、異常に実行されたりします。必要なコンポーネントのバージョンについては、「セキュリティ強化モードでの ECS インスタンスメタデータへのアクセス」をご参照ください。

    セキュリティグループやノードのセキュリティポリシーを設定する際は、csi-plugin コンポーネントの Pod がインスタンスメタデータサービスにアクセスできることを確認してください。

  • デフォルトの StorageClass の維持:

    ACK は、alicloud-disk-essd などのデフォルトの StorageClass オブジェクトを提供します。これらのオブジェクトの provisionerparameters などのプロパティを変更すると、コンポーネントのアップグレードが失敗する可能性があります。

よくある質問

コンポーネントの問題

起動失敗:exec /usr/bin/plugin.csi.alibabacloud.com: exec format error

現象

csi-plugin Pod 内の csi-plugin コンテナの起動に失敗し、ログに exec /usr/bin/plugin.csi.alibabacloud.com: exec format error というエラーが表示されます。

原因

このエラーは通常、CPU アーキテクチャの不一致を示します。しかし、csi-plugin はデフォルトで amd64 と arm64 の両方のアーキテクチャをサポートしています。したがって、サポートされているノードでこのエラーが発生した場合、最も可能性の高い原因は CSI イメージファイルの破損です。

これは、強制シャットダウンなどによってイメージのプルプロセスが中断された場合に発生する可能性があります。これにより、ノード上に不完全なイメージファイルが残ります。イメージのメタデータは存在しますが、バイナリ実行可能ファイルが無効または破損しているため、csi-plugin コンテナが起動できなくなります。

解決策

  • 新しいノードを追加してスケールアウトし、問題のあるノードをドレイン (退避) します。

  • 現在のノードを維持する必要がある場合は、次の手順を実行します:

    1. ノードをドレインしてワークロードを退避させ、その後、クラスターからノードを削除します。

    2. ノードにログインし、もしあればすべてのコンテナを削除します。

    3. /var/lib/containerd ディレクトリからすべてのファイルを削除します。

    4. クラスターにノードを再度追加します。

ストレージコンポーネントの OOM 問題

csi-provisioner コンポーネント Pod のサイドカーコンテナは、Pod、PV、PVC などのリソース情報をキャッシュします。大規模なクラスターでは、これが大量のメモリを消費し、コンテナがメモリ不足 (OOM) エラーを経験する可能性があります。

  • マネージド csi-provisioner: チケットを起票してお問い合わせください。

  • アンマネージドモードの csi-provisioner:OOM エラーが発生した場合は、クラスターの規模に応じてリソース制限を調整します。

    1. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[コンポーネントとアドオン] をクリックします。

    2. csi-provisioner コンポーネントを見つけ、图标 アイコンをクリックし、YAML の表示 をクリックします。

    3. コンポーネントの YAML を編集して、クラスターの規模に応じてリソース制限を調整します。

      containers:
          - name: external-disk-provisioner
            image: registry-vpc.cn-huhexxxx.yuncs.com/acs/csi-provisioner:v3.0.0-080f01e64-aliyun
            resources:
              requests:
                cpu: 10m
                memory: 16Mi
              limits:
                cpu: 500m
                memory: 1024Mi

csi-plugin の高いネットワークトラフィック

現象

クラスターの Pod モニタリングダッシュボードで、csi-plugin コンポーネントの Pod が高いネットワークトラフィックを示します。

原因

これは想定される動作です。csi-plugin コンポーネントは、ノードへの NAS ストレージボリュームのマウントを管理します。アプリケーション Pod が NAS マウントポイントを介してデータを読み書きすると、その結果生じるネットワークトラフィックは csi-plugin Pod のネットワーク名前空間を通過します。そのため、モニタリングシステムはこのトラフィックを csi-plugin Pod に帰属させます。

解決策

対応は不要です。この現象は無視して問題ありません。トラフィックは会計目的で csi-plugin Pod に帰属されるだけで、実際にはそのリソースを消費せず、トラフィックの二重計上や重複課金も発生しません。これはパフォーマンスに影響を与えないモニタリング上のアーティファクトです。

csi-provisioner コンポーネントのログに failed to renew lease xxx timed out waiting for the condition エラーが報告される

現象

kubectl logs csi-provisioner-xxxx -n kube-system コマンドを実行して CSI のログを表示すると、failed to renew lease xxx timed out waiting for the condition エラーが報告されます。

原因

csi-provisioner コンポーネントは、高可用性のためにマルチレプリカモデルを使用します。一度に 1 つのインスタンスのみがリクエストを処理するようにするため、レプリカはリーダー選出のために Kubernetes のリース (Lease) メカニズムを使用します。このメカニズムは、API サーバーとの安定した通信に大きく依存しています。

このエラーは、csi-provisioner が API サーバーにアクセスできず、リーダー選出プロセスが失敗していることを示します。その結果、どのレプリカもリーダーになれず、サービスを提供できません。

解決策

クラスターのネットワーク接続と API サーバーのステータスを確認してください。問題が解決しない場合は、チケットを送信してください。

コンポーネントのアップグレード失敗

csi-plugin のアップグレード前チェックの失敗

この問題は通常、FlexVolume ストレージプラグインから CSI への移行中に発生します。次のコマンドを実行して、両方のストレージプラグインが共存しているかどうかを確認できます。

kubectl -nkube-system get ds csi-plugin flexvolume

出力が次のようになっている場合:

NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
csi-plugin   4         4         4       4            4           kubernetes.io/os=linux   7d
flexvolume   4         4         4       4            4           kubernetes.io/os=linux   7d                                  

これは、両方のストレージプラグインが共存していることを示します。

FlexVolume と CSI は共存している間はアップグレードできません。CSI コンポーネントをアップグレードするには、まずすべての FlexVolume PV と PVC を CSI に移行し、その後 FlexVolume コンポーネントをアンインストールします。詳細については、「ストレージクラスターなしで FlexVolume を CSI に移行する」をご参照ください。

これが原因でなく、クラスターに重要なビジネスデータがホストされている場合は、お問い合わせいただき、支援付きの手動アップグレードをリクエストしてください。

事前チェック後の csi-plugin アップグレードの失敗

csi-plugin コンポーネントは DaemonSet としてデプロイされており、すべてのノードが正常な状態であることが必要です。クラスターに NotReady または Running 以外の状態のノードがあると、アップグレードは失敗します。

まず障害のあるノードを修復してから、アップグレードを再試行する必要があります。原因が特定できない場合は、お問い合わせいただき、支援付きの手動アップグレードをリクエストしてください。

コンソールに csi-provisioner が表示されない

csi-provisioner の古いバージョン (1.14 以前) は StatefulSet としてデプロイされます。現在のクラスターに csi-provisioner の StatefulSet インスタンスがまだ存在する場合は、再インストールする前に手動で削除する必要があります (kubectl delete sts csi-provisioner)。

この操作中に問題が発生した場合は、お問い合わせいただき、支援付きの手動アップグレードをリクエストしてください。

csi-provisioner のアップグレード前チェックの失敗

この問題は通常、FlexVolume ストレージプラグインから CSI への移行中に発生します。次のコマンドを実行して、両方のストレージプラグインが共存しているかどうかを確認できます。

kubectl -nkube-system get ds csi-plugin flexvolume

出力が次のようになっている場合:

NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
csi-plugin   4         4         4       4            4           kubernetes.io/os=linux   7d
flexvolume   4         4         4       4            4           kubernetes.io/os=linux   7d                                  

これは、両方のストレージプラグインが共存していることを示します。

FlexVolume と CSI は共存している間はアップグレードできません。CSI コンポーネントをアップグレードするには、まずすべての FlexVolume PV と PVC を CSI に移行し、その後 FlexVolume コンポーネントをアンインストールします。詳細については、「ストレージクラスターなしで FlexVolume を CSI に移行する」をご参照ください。

これが原因でなく、クラスターに重要なビジネスデータがホストされている場合は、お問い合わせいただき、支援付きの手動アップグレードをリクエストしてください。

事前チェック後の csi-provisioner アップグレードの失敗

お問い合わせいただき、支援付きの手動アップグレードをリクエストしてください。

csi-provisioner アップグレード失敗:ノード数または権限

現象

  • シナリオ 1:csi-provisioner コンポーネントのアップグレード前チェックが失敗し、クラスターに十分なノードがないことが示されます。

  • シナリオ 2:csi-provisioner コンポーネントの事前チェックとアップグレードは成功します。しかし、コンポーネントの Pod が CrashLoopBackOff 状態になり、ログに 403 Forbidden エラーが表示されます。

    time="2023-08-05T13:54:00+08:00" level=info msg="Use node id : <?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n <head>\n  <title>403 - Forbidden</title>\n </head>\n <body>\n  <h1>403 - Forbidden</h1>\n </body>\n</html>\n"

原因と解決策

  • シナリオ 1

    • 原因:csi-provisioner コンポーネントはアクティブ/スタンバイのデプロイモデルを使用しており、その 2 つのレプリカはアンチアフィニティ要件を満たすために異なるノードにスケジュールされる必要があります。単一ノードのクラスターではこのスケジューリング条件を満たせないため、2 番目のレプリカが Pending 状態のままになり、アップグレードが正常に完了しません。

    • 解決策:クラスターに少なくとももう 1 つノードを追加して、複数のレプリカが正しくスケジュールされるようにします。

  • シナリオ 2

    • 原因:csi-provisioner コンポーネントは、Alibaba Cloud API を呼び出すために必要なインスタンス ID やリージョンなどの情報を取得するために、ノードのインスタンスメタデータにアクセスする必要があります。ノードでセキュリティ強化が有効になっている場合や、厳格なネットワークポリシーが設定されている場合、メタデータサービスへのアクセスがブロックされる可能性があります。

    • 解決策:ノードのセキュリティ強化ポリシーを調整または無効にして、Pod がメタデータサービスにアクセスできるようにします。また、セキュリティグループのルール、OS のファイアウォール設定、および関連するセキュリティスクリプトも確認してください。

csi-provisioner アップグレード失敗:StorageClass の変更

現象

csi-provisioner のインストールまたはアップグレードが事前チェックで失敗し、StorageClass のプロパティが期待値を満たしていないことが示されます。

原因

ACK が提供するデフォルトの StorageClass は固定構成であり、provisionerparameters などのコアフィールドは変更できません。同じ名前の StorageClass を手動で削除して再作成すると、検証に失敗し、コンポーネントのアップグレードプロセスが中断されます。

CSI インストーラーは、一貫したコンポーネントの動作を保証するために、これらのリソースの整合性を厳密に検証します。

解決策

  1. クラスターからデフォルトの StorageClass オブジェクト (alicloud-disk-essdalicloud-disk-availablealicloud-disk-efficiencyalicloud-disk-ssdalicloud-disk-topology を含む) を削除します。

    この操作は、既存の PV および PVC の通常の使用には影響しません。
  2. StorageClass オブジェクトを削除した後、csi-provisioner を再インストールします。インストーラーが自動的に StorageClass オブジェクトを再作成します。追加の操作は不要です。

カスタムの StorageClass が必要な場合は、常に異なる名前で新しいものを作成してください。デフォルトの StorageClass オブジェクトを変更したり、再作成したりしないでください。

お問い合わせ

手動アップグレードのサポートをリクエストするには、DingTalk でグループ番号 35532895 を検索し、グループに参加して支援を求めてください。

参考資料