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

Container Service for Kubernetes:FlexVolume2CSI コマンドラインインターフェイスを使用して YAML ファイルをバッチ変換する

最終更新日:Nov 20, 2025

FlexVolume2CSI コマンドラインインターフェイス (CLI) を使用すると、FlexVolume クラスターでインラインストレージを使用するボリュームとワークロードの YAML ファイルをバッチ変換できます。このプロセスにより、FlexVolume クラスターから Container Storage Interface (CSI) クラスターへの移行が簡素化されます。このトピックでは、FlexVolume2CSI CLI を使用してこのバッチ変換を実行する方法について説明します。

仕組み

FlexVolume2CSI ツールは、クラスターまたは指定された名前空間内のすべてまたは指定されたボリュームまたはワークロードのリソースをリストします。標準の FlexVolume フィールドの内容を対応する CSI フォーマットに変換し、結果の YAML をデプロイ用のファイルに出力します。

重要

この変換は、NAS、OSS、または Alibaba Cloud ディスクを使用する標準の PersistentVolume (PV)、PersistentVolumeClaim (PVC)、またはワークロードのインラインボリュームのみをサポートします。CSI リソースをデプロイする前に、生成された YAML ファイルを検証する必要があります。

ステップ 1: FlexVolume2CSI コマンドラインインターフェイスをインストールする

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

    macOS と Linux にインストールできます。

    curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
  2. 次のコマンドを実行して、FlexVolume2CSI がインストールされていることを確認します。

    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

    この出力は、FlexVolume2CSI コマンドラインインターフェイスがインストールされていることを確認します。

ステップ 2: FlexVolume2CSI のクラスター情報を設定する

  1. 次のコマンドを実行して、FlexVolume2CSI のクラスター情報を設定します。

    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.

    パラメーター

    説明

    クラスター ID

    FlexVolume クラスターの ID。

    Kubeconfig パス

    FlexVolume クラスターの kubeconfig ファイルのパス。デフォルトのパスは ~/.kube/config です。

ステップ 3: FlexVolume PV および PVC 用の CSI YAML ファイルを生成する

オプションパラメーター

次のコマンドを実行して、FlexVolume2CSI でサポートされているオプションの設定項目をクエリします。

flexvolume2csi translate help

期待される出力:

flexvolume2csi source add [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-t storageclass]

Usage:
  flexvolume2csi translate [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-t storageclass] [flags]

Examples:
  # すべての名前空間で PVC と関連する PV を変換する
  flexvolume2csi translate -o output.txt

  # default 名前空間で PVC と関連する PV を変換する
  flexvolume2csi translate -n default -o output.txt

  # default 名前空間で PVC test-pvc と関連する PV を変換する
  flexvolume2csi translate -n default -p test-pvc -o output.txt


Flags:
  -b, --backupfile string     path to backup (flexvolume) file (default "./backupfile.txt")
  -h, --help                  help for translate
  -n, --namespace string      specified namespace
  -o, --outputfile string     path to output (CSI) file (default "./outputfile.txt")
  -p, --prefix string         change pv/pvc name to prefix-xxx
  -c, --pvc string            specified pvc
  -t, --storageclass string   change storageclass name
  -s, --suffix string         change pv/pvc name to xxx-suffix

オプションパラメーター

説明

-o

生成された CSI PV および PVC の YAML ファイルのパス。デフォルトのパスは、現在のディレクトリの outputfile.txt です。値を空のままにすると、出力は標準出力に出力されます。

-b

元の FlexVolume PV および PVC のバックアップ YAML ファイルのパス。デフォルトのパスは、現在のディレクトリの backupfile.txt です。値を空のままにすると、バックアップは作成されません。

-n

名前空間の名前。指定された名前空間の PV と PVC のみが処理されます。デフォルトでは、すべての名前空間が処理されます。

-c

PVC の名前。指定された PVC とそれに対応する PV のみが処理されます。このパラメーターは -n パラメーターと一緒に使用する必要があります。デフォルトでは、選択した名前空間のすべての PV と PVC が処理されます。

-p

生成された CSI PV および PVC の名前のプレフィックス。デフォルトでは、プレフィックスは追加されません。

たとえば、元の FlexVolume PVC の名前が pvc-test で、-p csi を追加すると、対応する CSI PVC の名前は csi-pvc-test になります。

-s

生成された CSI PV および PVC の名前のサフィックス。デフォルトでは、サフィックスは追加されません。

たとえば、元の FlexVolume PVC の名前が pvc-test で、-s csi を追加すると、対応する CSI PVC の名前は pvc-test-csi になります。

  1. 次の内容を使用して、FlexVolume クラスターに pv.yaml ファイルを作成します。

    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" # これをファイルストレージのマウントポイントアドレスに置き換えます。
          path: "/k8s"
          vers: "3"
          options: "nolock,tcp,noresvport"
  2. 次のコマンドを実行して、FlexVolume クラスターにサンプル PV をデプロイします。

    kubectl apply -f pv.yaml
  3. 次の内容を使用して、FlexVolume クラスターに pvc.yaml ファイルを作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
  4. 次のコマンドを実行して、FlexVolume クラスターにサンプル PVC をデプロイします。

    kubectl apply -f pvc.yaml
  5. 次のコマンドを実行して、PV と PVC が Bound 状態であることを確認します。

    kubectl get pvc | grep pvc-nas

    期待される出力:

    pvc-nas   Bound    pv-nas   5Gi       RWO            nas       10s
  6. 次のコマンドを実行して、FlexVolume2CSI CLI を使用してクラスター内のすべての PV と PVC の YAML ファイルを変換します。

    重要

    FlexVolume PVC および PV リソースは、kubectl apply などのコマンドを実行して CSI タイプに変換することはできません。それらを再デプロイする必要があります。詳細については、「FlexVolume から CSI への移行」のシナリオドキュメントをご参照ください。

    csi-compatible-controller コンポーネントを使用して FlexVolume と CSI PVC および PV リソースを一時的に共存させるには、-p または -s パラメーターを使用してリソース名の競合を回避します。

    flexvolume2csi translate -s csi
  7. 次のコマンドを実行して、PV と PVC の出力 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
    

    この出力は、PV と PVC の CSI YAML ファイルが正常に生成されたことを示します。

(オプション) ステップ 4: インライン FlexVolume ボリュームを持つワークロード用の CSI YAML ファイルを生成する

以前のバージョンの ACK マネージドクラスター および Serverless Kubernetes クラスター は、インラインモードを使用してワークロードに FlexVolume ストレージをマウントすることをサポートしています。クラスターがそのようなワークロードを実行している場合は、それらの YAML ファイルも変換する必要があります。

インラインマウントメソッドでは、対応する PVC および PV リソースは必要ありません。次のコードは、インラインモードでマウントされた FlexVolume ボリュームを持つステートフルアプリケーションの YAML ファイルの例です。

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 リソースを動的に作成するために使用されます。生成された PVC および PV リソースは、ステップ 3 のプロシージャに従って CSI に変換できます。

コントローラーを使用して CSI PVC および PV リソースを再作成する場合は、対応する FlexVolume PVC および PV リソースを削除できます。リソースを削除する前に、データが不要になったことを確認してください。次に、volumeClaimTemplatesstorageClassName フィールドの値を CSI StorageClass に変更します。

変換ターゲット

インラインモードでマウントされた FlexVolume ボリュームを変換する場合:

  • volumeId が指定されていないディスクボリュームは、インラインの エフェメラルボリューム に変換されます。

  • 他のタイプのボリュームは、独立した PV および PVC として CSI ボリュームに変換されます。生成された CSI YAML ファイルには、PV、PVC、および元のワークロードリソースが含まれます。

オプションパラメーター

次のコマンドを実行して、FlexVolume2CSI でサポートされているオプションの設定項目をクエリします。

flexvolume2csi inline-translate help

期待される出力:

flexvolume2csi source add [-n namespace] [-k kind] [-i item] [-f inputfile] [-o outputfile] [-b backupfile] [-t storageclass] [-c capacity]

Usage:
  flexvolume2csi inline-translate [-n namespace] [-k kind] [-i item] [-f inputfile] [-o outputfile] [-b backupfile] [-t storageclass] [-c capacity] [flags]

Examples:
  # すべての名前空間のすべての種類のワークロード (StatefulSet、Deployment など) のインライン FlexVolume ボリュームを変換する
  # 注1: ワークロードの種類が指定されていない場合、Pod は変換されません。必要に応じて "-k pod" を使用してください。
  # 注2: StatefulSet の VolumeClaimTemplates は変換されません。手動で \"storageClassName\" フィールドを変更してください。
  flexvolume2csi inline-translate -o output.txt

  # default 名前空間のすべての種類のワークロード (StatefulSet、Deployment など) のインライン FlexVolume ボリュームを変換する
  flexvolume2csi inline-translate -n default -o output.txt

  # default 名前空間の StatefulSet のインライン FlexVolume ボリュームを変換する
  flexvolume2csi inline-translate -n default -k sts -o output.txt

  # default 名前空間の StatefulSet test-sts のインライン FlexVolume ボリュームを変換する
  flexvolume2csi inline-translate -n default -k sts -i test-sts -o output.txt

  # "---\n" で項目を区切って、入力ファイル内のすべての項目のインライン FlexVolume ボリュームを変換する
  flexvolume2csi inline-translate -i input.txt -o output.txt

}



Flags:
  -b, --backupfile string     path to backup (FlexVolume) file (default "./backupfile.txt")
  -c, --capacity string       change capacity
  -h, --help                  help for inline-translate
  -f, --inputfile string      path to input (FlexVolume) file
  -i, --item string           specified item name
  -n, --namespace string      specified namespace
  -o, --outputfile string     path to output (CSI) file (default "./outputfile.txt")
  -t, --storageclass string   change storageclass name
  -k, --sts string            specified kind for workloads

オプションパラメーター

説明

-o

生成された CSI YAML ファイルのパス。デフォルトのパスは、現在のディレクトリの outputfile.txt です。値を空のままにすると、出力は標準出力に出力されます。

-b

FlexVolume ストレージを使用するワークロードのバックアップ YAML ファイルのパス。デフォルトのパスは、現在のディレクトリの backupfile.txt です。値を空のままにすると、バックアップは作成されません。

-n

名前空間の名前。指定された名前空間で FlexVolume ストレージを使用するワークロードのみが処理されます。デフォルトでは、すべての名前空間が処理されます。

-k

StatefulSet や deployment などのワークロードのタイプ。FlexVolume ストレージがマウントされている指定されたタイプのワークロードのみが処理されます。デフォルトでは、すべてのタイプのワークロードが処理されます。

-i

ワークロードの名前。指定されたワークロードのみが処理されます。このパラメーターは、-n および -k パラメーターと一緒に使用する必要があります。

-f

クラスターからワークロードをリストする代わりに、指定された YAML ファイルパスからワークロードリソースを読み取って変換します。-n-k、および -i パラメーターを同時に設定することはできません。

指定された 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 CLI を使用してデプロイされたワークロードを変換します。

    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

    出力は、インライン FlexVolume ボリュームが対応するエフェメラルボリュームに変換されたことを示しています。

  4. 必要に応じて、生成された YAML コンテンツを調整します。エフェメラルボリュームに変換する場合、通常は次のように変更する必要があります。

    1. ephemeral でエフェメラル StorageClass を指定します。調整後:

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

    変換中に -t および -c パラメーターを指定してこれらの変更を行うこともできます。これらのパラメーターはすべてのリソースに有効です。

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

他のタイプのボリュームを CSI ボリュームに変換する

この例では、-f パラメーターを使用して変換する YAML コンテンツを指定する方法を示します。

  1. このステップの冒頭に示されているステートフルアプリケーションの YAML ファイルを disk-static-sts.yaml ファイルとして保存します。

  2. 次のコマンドを実行して、FlexVolume2CSI CLI を使用してファイルに記述されているステートフルアプリケーションを変換します。

    flexvolume2csi inline-translate -f disk-static-sts.yaml
  3. 次のコマンドを実行して、変換されたステートフルアプリケーションの 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 に変換され、ステートフルアプリケーションのボリュームタイプが CSI PVC への参照に変更されたことを示しています。さらに、volumeClaimTemplates の内容は変更されません。

  4. 必要に応じて、生成された YAML コンテンツを調整します。CSI StorageClass に変換する場合、通常は次のように変更する必要があります。

    1. CSI PVC および PV に必要なストレージ容量を宣言します。20 GiB が必要であると仮定します。調整後:

      ---
      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****
    2. volumeClaimTemplates で指定された StorageClass は CSI クラスに変更する必要があります。フィールドの値を直接変更できます。

    変換中に -t および -c パラメーターを指定してこれらの変更を行うこともできます。これらのパラメーターはすべてのリソースに有効です。

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

ステップ 5: 生成された CSI YAML を確認してデプロイする

FlexVolume2CSI は YAML ファイルを生成するだけです。YAML の内容が正しいことを確認した後、手動でクラスターにデプロイする必要があります。詳細については、「FlexVolume から CSI への移行」のシナリオドキュメントをご参照ください。

PVC と PV のリソース名の競合を避けるために、デプロイには kubectl create -f コマンドを使用します。

リファレンス