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

Container Service for Kubernetes:データのないクラスターにおける FlexVolume から CSI への移行

最終更新日:Sep 16, 2026

FlexVolume ストレージプラグインは非推奨となり、新規クラスターではサポートされなくなりました。FlexVolume プラグインを使用している既存のクラスターについては、Container Storage Interface (CSI) プラグインへの移行を推奨します。移行するには、FlexVolume プラグインのアンインストール、CSI プラグインのインストール、およびノードプールと既存ノード設定の更新を実行します。本トピックでは、FlexVolume で管理されているデータのないクラスターの移行プロセスについて説明します。

プラグインの比較

次の表は、CSI ストレージプラグインと FlexVolume ストレージプラグインを比較したものです。

プラグイン

コンポーネント

kubelet パラメーター

参考資料

CSI

  • CSI-Provisioner (Deployment)

    ボリュームとスナップショットの自動作成を管理します。誤削除からのデータ復旧や Container Network File System (CNFS) ストレージなどの機能をサポートします。

  • CSI-Plugin (DaemonSet)

    ボリュームの自動マウントおよびアンマウントを管理します。複数のストレージタイプをサポートします。

このプラグインでは、特定の kubelet パラメーターが必要です。

kubelet パラメーター enable-controller-attach-detach を true に設定します。

ストレージ

FlexVolume

  • Disk-Controller (Deployment)

    ディスクボリュームの自動作成を管理します。

  • FlexVolume (DaemonSet)

    ボリュームのマウントおよびアンマウントを管理します。

このプラグインでは、特定の kubelet パラメーターが必要です。

kubelet パラメーター enable-controller-attach-detach を false に設定します。

FlexVolume の概要

ユースケース

CSI プラグインは FlexVolume プラグインよりも安定性と効率性に優れています。クラスターが次のいずれかの条件を満たす場合、FlexVolume プラグインから CSI プラグインへの移行を推奨します。

  • FlexVolume を使用してクラスターにマウントされたボリュームが存在しません。

  • 以前に FlexVolume を使用してボリュームをマウントしましたが、関連データは削除されています。

ステップ 1: FlexVolume のアンインストール

  1. OpenAPI Explorer コンソールにログインし、UnInstallClusterAddons API を呼び出して FlexVolume プラグインをアンインストールします。

    • ClusterId: クラスター ID です。クラスターの 基本情報 ページで確認できます。

    • name: Flexvolume.

    詳細については、「クラスターアドオンのアンインストール」をご参照ください。

  2. alicloud-disk-controller および alicloud-nas-controller Deployment を削除します。

    kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller
  3. FlexVolume プラグインがアンインストールされていることを確認します。

    kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'

    コマンドが出力を返さない場合、FlexVolume プラグインはアンインストールされています。

  4. FlexVolume StorageClass リソースを削除します。これらのリソースのプロビジョナーは alicloud/disk です。

    kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssd

    出力例:

    storageclass.storage.k8s.io "alicloud-disk-available" deleted
    storageclass.storage.k8s.io "alicloud-disk-efficiency" deleted
    storageclass.storage.k8s.io "alicloud-disk-essd" deleted
    storageclass.storage.k8s.io "alicloud-disk-ssd" deleted

    この出力は、StorageClass が削除されたことを示しています。

ステップ 2: CSI のインストール

  • クラスターで csi-compatible-controller プラグインを使用している場合、カスタム CSI プラグインがすでにインストールされています。このプラグインは標準 CSI プラグインではありません。標準 CSI プラグインをインストールする前に、次のコマンドを実行してカスタム CSI コンポーネントを削除する必要があります。

    kubectl delete deploy csi-provisioner -n kube-system
    kubectl delete ds csi-plugin -n kube-system
    kubectl delete csidriver diskplugin.csi.alibabacloud.com nasplugin.csi.alibabacloud.com ossplugin.csi.alibabacloud.com
    説明

    これらの削除操作は、クラスター内の既存の Pod に影響しません。ただし、カスタムコンポーネントを削除してから標準 CSI プラグインをインストールするまでの間、Pod に変更を加えないでください。

  • csi-compatible-controller プラグインを使用していない場合は、OpenAPI を直接呼び出して標準 CSI プラグインをインストールできます。

  1. OpenAPI Explorer コンソールにログインし、InstallClusterAddons API を呼び出して CSI プラグインをインストールします。

    • ClusterId: ご利用のクラスター ID。

    • name: csi-provisioner.

    • バージョン: CSI プラグインの最新バージョンです。CSI バージョンの詳細については、「csi-provisioner」をご参照ください。

    詳細については、「クラスターアドオンのインストール」をご参照ください。

  2. CSI プラグインが正常に動作していることを確認します。

    kubectl get pods -n kube-system | grep csi

    出力例:

    csi-plugin-577mm                              4/4     Running   0          3d20h
    csi-plugin-k9mzt                              4/4     Running   0          41d
    csi-provisioner-6b58f46989-8wwl5              9/9     Running   0          41d
    csi-provisioner-6b58f46989-qzh8l              9/9     Running   0          6d20h

    この出力は、CSI プラグインが正常に動作していることを示しています。

ステップ 3: ノードプール設定の変更

ノードプールの設定は、クラスターのストレージコンポーネントに依存しています。標準 CSI コンポーネントをインストールした後、既存のノードプールの設定は自動的に更新されません。ノードプールの設定を手動で変更して更新をトリガーする必要があります。更新が正常に完了すると、ノードプール内の新しいノードの --enable-controller-attach-detach kubelet パラメーターは false から true に更新されます。

重要

ノードプールの設定を手動で変更すると、そのプール内のノードで kubelet が再起動します。業務への影響が少ない時間帯にこの操作を実行することを推奨します。1 つのノードプールが正常に更新されたことを確認した後、残りのノードプールを段階的に更新してください。

更新をトリガーするには、インスタンスタイプを追加するか、ログインパスワードを変更して、すべてのノードプールを変更します。このアクションにより、バックエンドでストレージプラグインタイプが更新され、ノード初期化スクリプトの更新がトリガーされ、新しいノードが正しいパラメーターで設定されるようになります。

説明

または、新しいノードプールを作成してから、古いプールを段階的にスケールダウンして削除することもできます。この方法を使用する場合、次の手順をスキップできます。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  3. ノードプール ページで、対象のノードプールを見つけ、編集 列の アクション をクリックします。

  4. 表示されたダイアログボックスで、ノードプールのインスタンスタイプ設定を変更し、OK をクリックします。

    説明

    この変更は、バックエンドのストレージプラグインタイプの更新をトリガーするためだけに行います。更新が適用された後、この変更を元に戻すことができます。

ステップ 4: 既存ノード設定の変更

次の YAML を適用して、CSI の要件を満たすように kubelet パラメーターを更新します。この DaemonSet は、既存のノードで --enable-controller-attach-detach パラメーターを true に設定します。操作が完了したら、DaemonSet を削除できます。

重要

次の YAML を適用すると、各ノードで kubelet が再起動します。実行する前に、ワークロードへの影響の可能性を評価してください。

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: kubelet-set
spec:
  selector:
    matchLabels:
      app: kubelet-set
  template:
    metadata:
      labels:
        app: kubelet-set
    spec:
      tolerations:
        - operator: "Exists"
      hostNetwork: true
      hostPID: true
      containers:
        - name: kubelet-set
          securityContext:
            privileged: true
            capabilities:
              add: ["SYS_ADMIN"]
            allowPrivilegeEscalation: true
          image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.26.5-56d1e30-aliyun
          imagePullPolicy: "Always"
          env:
          - name: enableADController
            value: "true"
          command: ["sh", "-c"]
          args:
          - echo "kubelet フラグを $enableADController に設定して開始します";
            ifFlagTrueNum=`cat /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf | grep enable-controller-attach-detach=$enableADController | grep -v grep | wc -l`;
            echo "ifFlagTrueNum は $ifFlagTrueNum です";
            if [ "$ifFlagTrueNum" = "0" ]; then
                curValue="true";
                if [ "$enableADController" = "true" ]; then
                    curValue="false";
                fi;
                sed -i "s/enable-controller-attach-detach=$curValue/enable-controller-attach-detach=$enableADController/" /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf;
                restartKubelet="true";
                echo "現在の値は $curValue です。$enableADController に変更します";
            fi;
            if [ "$restartKubelet" = "true" ]; then
                /nsenter --mount=/proc/1/ns/mnt systemctl daemon-reload;
                /nsenter --mount=/proc/1/ns/mnt service kubelet restart;
                echo "kubelet を再起動します";
            fi;
            while true;
            do
                sleep 5;
            done;
          volumeMounts:
          - name: etc
            mountPath: /host/etc
      volumes:
        - name: etc
          hostPath:
            path: /etc

次のステップ

移行が完了したら、動的にプロビジョニングされたディスクボリュームを作成して、CSI プラグインが正常に動作していることを確認できます。詳細については、「動的にプロビジョニングされたディスクボリュームの使用」をご参照ください。