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

Container Service for Kubernetes:FlexVolume2CSI コマンドラインインターフェイスを用いた YAML ファイルの一括変換

最終更新日:Mar 26, 2026

FlexVolume2CSI コマンドラインインターフェイス (CLI) は、永続ボリューム (PV)、永続ボリューム要求 (PVC)、およびインライン FlexVolume ストレージを使用するワークロードの YAML ファイルを一括で変換します。ACK クラスターを FlexVolume から Container Storage Interface (CSI) へ移行する際のプロセスに活用できます。

FlexVolume2CSI は、クラスター内のボリュームおよびワークロードリソースを一覧表示し、標準的な FlexVolume フィールドを対応する CSI 形式に変換して、変換後の YAML を出力ファイルに書き出します。変換されたリソースはデプロイされません — ご自身でレビューしたうえで、別途デプロイしてください。

対象範囲:FlexVolume2CSI は、NAS、OSS、Alibaba Cloud ディスクボリュームのみを使用する標準的な永続ボリューム (PV)、永続ボリューム要求 (PVC)、およびワークロードのインラインボリュームを変換します。その他のストレージタイプは対象外です。

重要

生成された YAML ファイルをクラスターにデプロイする前に、内容を必ず検証してください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • macOS または Linux(CLI は Windows をサポートしていません)

  • FlexVolume クラスターのクラスター ID

  • NAS、OSS、または Alibaba Cloud ディスクボリュームを使用する PV、PVC、またはワークロード

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

  1. 以下のコマンドを実行して、FlexVolume2CSI をインストールします。

    curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
  2. インストールを検証します。

    flexvolume2csi version

    期待される出力:

    flexvolume2csi: v2.0.0+f87c834
      BuildDate: 2025-01-06T03:49:37Z
      GitCommit: f87c83459b8407668a04f7e7434cc51439c87508
      GitTreeState: clean
      GoVersion: go1.23.3
      Compiler: gc
      Platform: darwin/arm64

ステップ 2:クラスターへのアクセス設定

以下のコマンドを実行し、プロンプトに従ってターゲットクラスターを設定します。

flexvolume2csi configure

期待される出力:

Configuring profile 'default' ...
Default Cluster Id (ClusterId of ACK Flexvolume Cluster) [c4869a2f603ca4e74****************]:
Default Kubeconfig Path (default is ~/.kube/config) []:
Saving profile[default] ...
Done.
パラメーター説明
Cluster IdFlexVolume クラスターの ID です。
Kubeconfig PathFlexVolume クラスターの kubeconfig ファイルのパスです。デフォルト値は ~/.kube/config です。

ステップ 3:FlexVolume PV および PVC の変換

flexvolume2csi translate を使用して、PV および PVC の CSI YAML を生成します。

重要

FlexVolume PVC および PV は、kubectl apply を使用してインプレースで変換できません — 再デプロイする必要があります。FlexVolume リソースと CSI リソースを一時的に共存させる必要がある場合(csi-compatible-controller コンポーネントを使用)、名前競合を回避するために -p または -s を使用します。

フラグ

利用可能なすべてのフラグを表示するには、flexvolume2csi translate help を実行します。

flexvolume2csi translate [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-t storageclass]
フラグ説明
-o生成される CSI YAML ファイルのパスです。デフォルト値は ./outputfile.txt です。空白のままにすると、標準出力に表示されます。
-b元の FlexVolume PV および PVC のバックアップ YAML ファイルのパスです。デフォルト値は ./backupfile.txt です。空白のままにすると、バックアップはスキップされます。
-n処理対象の名前空間です。デフォルト値はすべての名前空間です。
-c処理対象の PVC 名です。指定された PVC および対応する PV のみを処理します。-n と併用する必要があります。
-p生成される CSI PV および PVC の名前に追加するプレフィックスです。たとえば、-p csi を指定すると、pvc-testcsi-pvc-test にリネームされます。
-s生成される CSI PV および PVC の名前に追加するサフィックスです。たとえば、-s csi を指定すると、pvc-testpvc-test-csi にリネームされます。
-t生成される CSI リソースに適用する StorageClass 名です。

この例では、FlexVolume NAS PV および PVC を CSI に変換します。

  1. 以下の内容で pv.yaml ファイルを作成し、FlexVolume クラスターに適用します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
    spec:
      capacity:
        storage: 5Gi
      storageClassName: nas
      accessModes:
        - ReadWriteMany
      flexVolume:
        driver: "alicloud/nas"
        options:
          server: "0cd8b4a576-u****.cn-hangzhou.nas.aliyuncs.com" # ご利用の NAS マウントターゲットアドレスに置き換えてください。
          path: "/k8s"
          vers: "3"
          options: "nolock,tcp,noresvport"
    kubectl apply -f pv.yaml
  2. 以下の内容で pvc.yaml ファイルを作成し、適用します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
    kubectl apply -f pvc.yaml
  3. PV および PVC がバインドされていることを確認します。

    kubectl get pvc | grep pvc-nas

    期待される出力:

    pvc-nas   Bound    pv-nas   5Gi       RWO            nas       10s
  4. クラスター内のすべての PV および PVC を変換します。-s csi フラグにより、生成されるリソース名に -csi が付与され、名前衝突が回避されます。

    flexvolume2csi translate -s csi
  5. 生成された CSI YAML を確認します。

    cat ./outputfile.yaml

    期待される出力:

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      labels:
        alicloud-pvname: pv-nas-csi
      name: pv-nas-csi
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 5Gi
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          path: /k8s
          server: 0cd8b4a576-u****.cn-hangzhou.nas.aliyuncs.com
        volumeHandle: pv-nas-csi
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3
      persistentVolumeReclaimPolicy: Retain
      storageClassName: nas
      volumeMode: Filesystem
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas-csi
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas-csi
      storageClassName: nas
      volumeMode: Filesystem
      volumeName: pv-nas-csi

(任意)ステップ 4:インライン FlexVolume ボリュームを含むワークロードの変換

ACK マネージドクラスターおよび ACK サーバーレスの旧バージョンでは、FlexVolume ストレージをインラインモードでワークロードに直接マウントできます。クラスターにこのようなワークロードが存在する場合は、flexvolume2csi inline-translate を使用して、YAML ファイルを個別に変換してください。

インラインマウント方式では、PVC や PV リソースは使用されません。以下に例を示します。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx
spec:
  serviceName: nginx
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        volumeMounts:
        - name: test
          mountPath: /data
        ports:
        - containerPort: 80
      volumes:
      - name: test
        flexVolume:
          driver: "alicloud/disk"
          fsType: "ext4"
          options:
            volumeId: "d-bp1f3b5d0b0a8e7e6f****"
  volumeClaimTemplates:
  - metadata:
      name: disk-ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd"
      resources:
        requests:
          storage: 20Gi

名前が test のボリュームは、インラインモードでマウントされた FlexVolume ディスクボリュームです。

説明

volumeClaimTemplates フィールドにより、コントローラーが動的に PVC および PV リソースを作成できます。これらの生成されたリソースは、ステップ 3 の手順で変換できます。CSI リソースとして再作成するには、データが不要であることを確認したうえで、FlexVolume の PVC および PV を削除し、storageClassNamevolumeClaimTemplates 内の CSI StorageClass に変更してください。

変換対象

変換出力はボリュームの種類によって異なります。

  • volumeId を持たないディスクボリューム:インラインの一時ボリュームに変換されます。

  • その他のすべてのタイプ:CSI PV および PVC リソースに変換されます。出力ファイルには PV、PVC、および更新済みのワークロードマニフェストが含まれます。

フラグ

利用可能なすべてのフラグを表示するには、flexvolume2csi inline-translate help を実行します。

flexvolume2csi inline-translate [-n namespace] [-k kind] [-i item] [-f inputfile] [-o outputfile] [-b backupfile] [-t storageclass] [-c capacity]
フラグ説明
-o生成される CSI YAML ファイルのパスです。デフォルト値は ./outputfile.txt です。空白のままにすると、標準出力に表示されます。
-b元の FlexVolume ワークロードのバックアップ YAML ファイルのパスです。デフォルト値は ./backupfile.txt です。空白のままにすると、バックアップはスキップされます。
-n処理対象の名前空間です。デフォルト値はすべての名前空間です。
-k処理対象のワークロードの種類(例: sts または deploy)です。デフォルト値はすべての種類です。Pod は -k pod を明示的に指定しない限り除外されます。
-i処理対象のワークロード名です。-n および -k と併用する必要があります。
-fクラスターから一覧表示する代わりに、ローカルの YAML ファイルからワークロードリソースを読み込みます。-n-k-i とは併用できません。
-t生成される CSI リソースに適用する StorageClass 名です。
-c生成される CSI リソースに設定するストレージ容量です。

例 1:volumeId を持たないディスクボリュームを一時ボリュームに変換

  1. 以下のワークロードを FlexVolume クラスターに作成・デプロイします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            volumeMounts:
            - name: test
              mountPath: /data
            ports:
            - containerPort: 80
          volumes:
          - name: test
            flexVolume:
              driver: "alicloud/disk"
              fsType: "ext4"
              options:
                volumeSize: "20"
  2. ワークロードを変換します。

    flexvolume2csi inline-translate -k deploy -n default -i nginx
  3. 生成された CSI YAML を確認します。

    cat ./outputfile.yaml

    期待される出力:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: nginx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            imagePullPolicy: IfNotPresent
            name: nginx
            ports:
            - containerPort: 80
              protocol: TCP
            resources: {}
            terminationMessagePath: /dev/termination-log
            terminationMessagePolicy: File
            volumeMounts:
            - mountPath: /data
              name: test
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
          - ephemeral:
              volumeClaimTemplate:
                metadata:
                spec:
                  accessModes:
                  - ReadWriteOnce
                  resources:
                    requests:
                      storage: 20Gi
            name: test
  4. デプロイ前に、生成された YAML を必要に応じて調整してください。一時ボリュームの場合、StorageClass を指定します。

          volumes:
          - ephemeral:
              volumeClaimTemplate:
                metadata:
                spec:
                  accessModes:
                  - ReadWriteOnce
                  resources:
                    requests:
                      storage: 20Gi
                  storageClassName: ephemeral-disk

    あるいは、変換時に -t を指定して、すべてのリソースに StorageClass を設定することもできます。

    flexvolume2csi inline-translate -k deploy -n default -i nginx -t ephemeral-disk

例 2:その他のボリュームタイプを CSI PV および PVC リソースに変換

この例では、-f を使用して、ローカルファイルから StatefulSet を変換します。

  1. このステップの冒頭に示した StatefulSet YAML を disk-static-sts.yaml として保存します。

  2. StatefulSet を変換します。

    flexvolume2csi inline-translate -f disk-static-sts.yaml
  3. 生成された CSI YAML を確認します。

    cat ./outputfile.txt

    期待される出力:

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: d-bp1f3b5d0b0a8e7e6f****
    spec:
      accessModes:
      - ReadWriteOnce
      claimRef:
        kind: PersistentVolumeClaim
        name: sts-nginx-test
        namespace: default
      csi:
        driver: diskplugin.csi.alibabacloud.com
        fsType: ext4
        volumeAttributes:
          volumeId: d-bp1f3b5d0b0a8e7e6f****
        volumeHandle: d-bp1f3b5d0b0a8e7e6f****
      persistentVolumeReclaimPolicy: Delete
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: sts-nginx-test
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources: {}
      volumeName: d-bp1f3b5d0b0a8e7e6f****
    
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      serviceName: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            name: nginx
            ports:
            - containerPort: 80
            resources: {}
            volumeMounts:
            - mountPath: /data
              name: test
          volumes:
          - name: test
            persistentVolumeClaim:
              claimName: sts-nginx-test
      updateStrategy: {}
      volumeClaimTemplates:
      - metadata:
          name: disk-ssd
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alicloud-disk-ssd"
          resources:
            requests:
              storage: 20Gi

    インライン FlexVolume ボリュームは、CSI PVC および PV に変換されました。StatefulSet は、インラインボリュームの代わりに PVC を参照するようになっています。volumeClaimTemplates セクションは変更されていません。

  4. デプロイ前に、生成された YAML を必要に応じて調整してください。CSI ディスクボリュームの場合、生成出力には通常、以下の 2 つのフィールドが欠落しています。

    • ストレージ容量:PVC および PV に必要な容量を宣言します。たとえば、PV では capacity.storage: 20Gi を、PVC では resources.requests.storage: 20Gi を設定します。

    • volumeClaimTemplates 内の StorageClassstorageClassName を CSI StorageClass に変更します。

    調整後の例:

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: d-bp1f3b5d0b0a8e7e6f****
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 20Gi
      claimRef:
        kind: PersistentVolumeClaim
        name: sts-nginx-test
        namespace: default
      csi:
        driver: diskplugin.csi.alibabacloud.com
        fsType: ext4
        volumeAttributes:
          volumeId: d-bp1f3b5d0b0a8e7e6f****
        volumeHandle: d-bp1f3b5d0b0a8e7e6f****
      persistentVolumeReclaimPolicy: Delete
    
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: sts-nginx-test
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: d-bp1f3b5d0b0a8e7e6f****

    あるいは、変換時に -t および -c を指定して、すべてのリソースに StorageClass および容量を設定することもできます。

    flexvolume2csi inline-translate -f disk-static-sts.yaml -t <csi-storageclass> -c "20Gi"

ステップ 5:生成された CSI YAML のデプロイ

生成された YAML を検証した後、クラスターにデプロイします。FlexVolume2CSI は YAML ファイルを生成するのみであり、デプロイは行いません。kubectl create -f を使用してデプロイしてください(kubectl apply -f を使用すると、リソース名の衝突が発生する可能性があります)。

完全な移行プロセスについては、「FlexVolume から CSI への移行」のシナリオガイドをご参照ください。

次のステップ