All Products
Search
Document Center

Container Service for Kubernetes:Konversi batch YAML dengan CLI FlexVolume2CSI

Last Updated:Aug 21, 2026

Gunakan CLI FlexVolume2CSI untuk mengonversi secara batch PV, PVC, dan volume inline dalam format YAML dari kluster FlexVolume ke format CSI, membantu Anda melakukan migrasi dari kluster FlexVolume ke kluster CSI.

Cara kerja

FlexVolume2CSI mencantumkan sumber daya volume dan workload di dalam kluster atau namespace, menerjemahkan bidang FlexVolume ke format CSI, lalu menulis hasil YAML ke file.

Penting

Konversi hanya mendukung PV, PVC, dan volume inline standar untuk Apsara File Storage NAS, Object Storage Service (OSS), dan Cloud Disk. Tinjau YAML CSI yang dihasilkan sebelum penerapan.

Langkah 1: Instal CLI FlexVolume2CSI

  1. Instal CLI FlexVolume2CSI.

    Didukung pada macOS dan Linux.

    curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
  2. Verifikasi instalasi.

    flexvolume2csi version

    Output yang diharapkan:

    flexvolume2csi: v2.0.1+fb3f6ea
      BuildDate: 2025-12-29T11:17:39Z
      GitCommit: fb3f6eaa300e095053c0eabc8943c678534d4805
      GitTreeState: clean
      GoVersion: go1.24.5
      Compiler: gc
      Platform: darwin/arm64

    Hal ini mengonfirmasi bahwa instalasi berhasil.

Langkah 2: Konfigurasikan CLI FlexVolume2CSI

  1. Konfigurasikan informasi kluster.

    flexvolume2csi configure

    Output yang diharapkan:

    Configuring profile 'default' ...
    Default Cluster Id (ClusterId of ACK Flexvolume Cluster) [c4869a2f603ca4e74****************]:
    Default Kubeconfig Path (default is ~/.kube/config) []:
    Saving profile[default] ...
    Done.

    Parameter

    Deskripsi

    Cluster Id

    ID kluster FlexVolume.

    Kubeconfig Path

    Jalur file kubeconfig untuk kluster FlexVolume. Nilai default adalah ~/.kube/config.

Langkah 3: Hasilkan YAML CSI untuk PV dan PVC

Parameter opsional

Lihat parameter yang tersedia.

flexvolume2csi translate help

Output yang diharapkan:

Translate standalone PVC and PV resources from FlexVolume to CSI format

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

Examples:
  # Translate PVCs and related PVs in all namespaces
  flexvolume2csi translate -o output.txt

  # Translate PVCs and related PVs in default namespace
  flexvolume2csi translate -n default -o output.txt

  # Translate PVC test-pvc and related PV in default namespace
  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   filter storageclass name
  -s, --suffix string         change pv/pvc name to xxx-suffix

Parameter

Deskripsi

-o

Jalur untuk YAML CSI yang dihasilkan. Nilai default adalah outputfile.txt. Berikan nilai kosong untuk mencetak ke stdout.

-b

Jalur backup untuk YAML FlexVolume asli. Nilai default adalah backupfile.txt. Berikan nilai kosong untuk melewati backup.

-n

Namespace yang akan diproses. Nilai default adalah semua namespace.

-c

Nama PVC spesifik yang akan diproses beserta PV-nya. Memerlukan -n. Nilai default adalah semua PV dan PVC.

-p

Awalan untuk nama PV dan PVC CSI yang dihasilkan. Tidak ada awalan secara default.

Contoh: pvc-test dengan -p csi menjadi csi-pvc-test.

-s

Akhiran untuk nama PV dan PVC CSI yang dihasilkan. Tidak ada akhiran secara default.

Contoh: pvc-test dengan -s csi menjadi pvc-test-csi.

Contoh

  1. Buat file pv.yaml dengan konten berikut.

    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" # Ganti ini dengan mount target penyimpanan file Anda.
          path: "/k8s"
          vers: "3"
          options: "nolock,tcp,noresvport"
  2. Terapkan PV contoh di kluster FlexVolume.

    kubectl apply -f pv.yaml
  3. Buat file pvc.yaml dengan konten berikut.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
  4. Terapkan PVC contoh di kluster FlexVolume.

    kubectl apply -f pvc.yaml
  5. Konfirmasi bahwa PV dan PVC berada dalam status Bound.

    kubectl get pvc | grep pvc-nas

    Output yang diharapkan:

    pvc-nas   Bound    pv-nas   5Gi       RWO            nas       10s
  6. Konversi YAML PV dan PVC.

    Penting

    PVC dan PV FlexVolume tidak dapat dikonversi ke CSI dengan kubectl apply dan harus diterapkan ulang. Lihat Migrasi FlexVolume ke CSI.

    Untuk koeksistensi sementara PVC/PV FlexVolume dan CSI dengan csi-compatible-controller, gunakan -p atau -s untuk menghindari konflik nama.

    flexvolume2csi translate -s csi
  7. Lihat YAML CSI output.

    cat ./outputfile.txt

    Output yang diharapkan:

    ---
    
    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
    

    YAML CSI untuk PV dan PVC telah dihasilkan.

(Opsional) Langkah 4: Hasilkan YAML CSI untuk volume inline

Versi awal kluster ACK yang dikelola dan kluster ACK Serverless mendukung volume inline FlexVolume untuk workload. Jika kluster Anda memiliki workload semacam itu, konversi juga file YAML-nya.

Volume inline tidak memerlukan sumber daya PVC atau PV. Contoh YAML untuk aplikasi berstatus dengan penyimpanan FlexVolume inline:

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

Volume test adalah volume Cloud Disk FlexVolume inline.

Catatan

Penyimpanan dalam volumeClaimTemplates disediakan secara dinamis oleh controller yang membuat PVC dan PV terkait. Konversikan ke CSI pada Langkah 3.

Untuk membuat ulang sebagai sumber daya CSI, hapus PVC dan PV FlexVolume (setelah memastikan data tidak lagi diperlukan), lalu ubah storageClassName dalam volumeClaimTemplates menjadi kelas penyimpanan CSI.

Target konversi

Saat mengonversi volume FlexVolume inline:

  • Volume Cloud Disk tanpa volumeId yang ditentukan dikonversi menjadi volume sementara inline.

  • Jenis volume lainnya dikonversi menjadi PV dan PVC CSI mandiri. YAML yang dihasilkan mencakup PV, PVC, dan workload asli.

Parameter opsional

Lihat parameter yang tersedia.

flexvolume2csi inline-translate help

Output yang diharapkan:

Translate inline storage volumes in workloads to standalone CSI PVC and PV resources

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

Examples:
  # Translate inline FlexVolume Volumes for ALL kinds of workloads (like StatefulSets, Deployments ...) in all namespaces
  # Note1: Pods will not be translated when Kind of workload is not specified, please use "-k pod" if need.
  # Note2: VolumeClaimTemplates will not be translated for StatefulSets, please modified the field \"storageClassName\" by hand.
  flexvolume2csi inline-translate -o output.txt

  # Translate inline FlexVolume Volumes for ALL kinds of workloads (like StatefulSets, Deployments ...) in default namespace 
  flexvolume2csi inline-translate -n default -o output.txt

  # Translate inline FlexVolume Volumes for StatefulSets in default namespace
  flexvolume2csi inline-translate -n default -k sts -o output.txt

  # Translate inline FlexVolume Volumes for StatefulSets test-sts in default namespace
  flexvolume2csi inline-translate -n default -k sts -i test-sts -o output.txt

  # Translate inline FlexVolume Volumes for every Item in the input file with "---\n" to separate items
  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   filter storageclass name
  -k, --sts string            specified kind for workloads

Parameter

Deskripsi

-o

Jalur untuk YAML CSI yang dihasilkan. Nilai default adalah outputfile.txt. Berikan nilai kosong untuk mencetak ke stdout.

-b

Jalur backup untuk YAML workload FlexVolume. Nilai default adalah backupfile.txt. Berikan nilai kosong untuk melewati backup.

-n

Namespace yang akan diproses. Nilai default adalah semua namespace.

-k

Jenis workload, seperti StatefulSet atau Deployment. Nilai default adalah semua jenis.

-i

Nama workload spesifik yang akan diproses. Memerlukan -n dan -k.

-f

Membaca dan mengonversi workload dari file YAML alih-alih mencantumkannya dari kluster. Tidak dapat digabungkan dengan -n, -k, atau -i.

Contoh

Mengonversi penyimpanan Cloud Disk dengan volumeId yang tidak ditentukan menjadi volume sementara

  1. Buat workload dengan konten berikut.

    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. Konversi workload yang telah diterapkan dengan FlexVolume2CSI.

    flexvolume2csi inline-translate -k deploy -n default -i nginx 
  3. Lihat YAML CSI output.

    cat ./outputfile.txt

    Output yang diharapkan:

    ---
    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

    Volume FlexVolume inline dikonversi menjadi volume sementara.

  4. Atur YAML yang dihasilkan sesuai kebutuhan. Untuk konversi volume sementara, lakukan modifikasi berikut:

    1. Tentukan kelas penyimpanan dalam bagian ephemeral:

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

    Anda juga dapat menggunakan parameter -t dan -c selama konversi. Perubahan berlaku untuk semua sumber daya.

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

Konversi jenis volume lainnya menjadi volume CSI

Gunakan parameter -f untuk menentukan file YAML yang akan dikonversi.

  1. Simpan YAML StatefulSet dari awal langkah ini sebagai disk-static-sts.yaml.

  2. Konversi YAML aplikasi berstatus dengan FlexVolume2CSI.

    flexvolume2csi inline-translate -f disk-static-sts.yaml
  3. Lihat YAML yang telah dikonversi.

    cat ./outputfile.txt

    Output yang diharapkan:

    ---
    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
    

    Volume FlexVolume inline dikonversi menjadi PV dan PVC CSI. Definisi volume StatefulSet mereferensikan PVC baru tersebut. Bagian volumeClaimTemplates tetap tidak berubah.

  4. Atur YAML yang dihasilkan sesuai kebutuhan:

    1. Tentukan kapasitas penyimpanan untuk PV dan PVC. Misalnya, untuk 20 Gi:

      ---
      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. Ubah kelas penyimpanan dalam volumeClaimTemplates menjadi kelas CSI.

    Anda juga dapat menggunakan parameter -t dan -c selama konversi. Perubahan berlaku untuk semua sumber daya.

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

Langkah 5: Tinjau dan terapkan YAML CSI

CLI menghasilkan YAML tetapi tidak menerapkan sumber daya. Tinjau dan terapkan output secara manual seperti yang dijelaskan dalam Migrasi FlexVolume ke CSI.

Gunakan kubectl create -f untuk menghindari konflik penamaan PV dan PVC.

Topik terkait