All Products
Search
Document Center

Container Service for Kubernetes:Gunakan CLI FlexVolume2CSI untuk mengonversi YAML secara batch

Last Updated:Jun 10, 2026

Antarmuka baris perintah (CLI) FlexVolume2CSI mengonversi file YAML untuk workload yang menggunakan FlexVolume atau volume inline, sehingga menyederhanakan migrasi dari kluster FlexVolume ke kluster Container Storage Interface (CSI). Topik ini menjelaskan cara menggunakan CLI tersebut untuk melakukan konversi secara batch.

Cara kerja

Tool FlexVolume2CSI mencantumkan semua sumber daya volume atau workload tertentu dalam suatu kluster atau namespace. Tool ini menerjemahkan field FlexVolume ke dalam format CSI dan menulis hasil YAML ke dalam file untuk penerapan.

Penting

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

Langkah 1: Instal CLI FlexVolume2CSI

  1. Jalankan perintah berikut untuk menginstal CLI FlexVolume2CSI.

    Tool ini dapat diinstal pada sistem macOS dan Linux.

    curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
  2. Jalankan perintah berikut untuk memverifikasi 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

    Output ini mengonfirmasi bahwa CLI FlexVolume2CSI berhasil diinstal.

Langkah 2: Konfigurasi CLI FlexVolume2CSI

  1. Jalankan perintah berikut untuk mengonfigurasi 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

Jalankan perintah berikut untuk melihat 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 ke file YAML untuk PV dan PVC CSI yang dihasilkan, dengan nilai default outputfile.txt di direktori saat ini. Jika nilai kosong diberikan, output akan dicetak ke stdout.

-b

Jalur backup untuk file YAML PV dan PVC FlexVolume asli. Nilai default adalah backupfile.txt di direktori saat ini. Jika nilai kosong ditentukan, tidak ada backup yang dilakukan.

-n

Namespace yang berisi sumber daya yang akan diproses. Secara default, semua namespace diproses.

-c

Menentukan nama PVC untuk hanya memproses PVC tersebut dan PV terkaitnya. Parameter ini harus digunakan bersama parameter -n. Secara default, semua PV dan PVC di namespace yang dipilih diproses.

-p

Menambahkan awalan ke nama PV dan PVC CSI yang dihasilkan. Secara default, tidak ada awalan yang ditambahkan.

Contohnya, jika PVC FlexVolume asli bernama pvc-test dan Anda menentukan -p csi, maka PVC CSI terkait akan bernama csi-pvc-test.

-s

Menambahkan akhiran ke nama PV dan PVC CSI yang dihasilkan. Secara default, tidak ada akhiran yang ditambahkan.

Contohnya, jika PVC FlexVolume asli bernama pvc-test dan Anda menentukan -s csi, maka PVC CSI terkait akan bernama pvc-test-csi.

Contoh

  1. Buat file pv.yaml di kluster FlexVolume 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 titik pemasangan penyimpanan file Anda.
          path: "/k8s"
          vers: "3"
          options: "nolock,tcp,noresvport"
  2. Jalankan perintah berikut untuk menerapkan contoh PV di kluster FlexVolume.

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

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

    kubectl apply -f pvc.yaml
  5. Jalankan perintah berikut untuk memastikan 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. Jalankan perintah berikut untuk mengonversi file YAML PV dan PVC.

    Penting

    Sumber daya PVC dan PV FlexVolume tidak dapat langsung dikonversi ke tipe CSI menggunakan perintah seperti kubectl apply dan harus diterapkan ulang. Untuk proses migrasi lengkap, lihat skenario terkait di Migrasi FlexVolume ke CSI.

    Untuk mengaktifkan koeksistensi sementara antara sumber daya PVC dan PV tipe FlexVolume dan CSI dengan komponen csi-compatible-controller, Anda harus menggunakan parameter -p atau -s guna menghindari konflik nama sumber daya.

    flexvolume2csi translate -s csi
  7. Jalankan perintah berikut untuk melihat output YAML CSI untuk PV dan PVC.

    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
    

    Output menunjukkan bahwa YAML CSI untuk PV dan PVC berhasil dihasilkan.

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

Versi awal kluster ACK yang dikelola dan kluster ACK Serverless mendukung pemasangan penyimpanan FlexVolume ke workload sebagai volume inline. Jika Anda memiliki workload semacam itu yang berjalan di kluster Anda, Anda juga harus mengonversi file YAML-nya.

Metode pemasangan inline tidak memerlukan sumber daya PVC dan PV terkait. Berikut adalah contoh YAML untuk aplikasi berstatus yang memasang penyimpanan FlexVolume secara 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 bernama test adalah volume Cloud Disk FlexVolume inline.

Catatan

Penyimpanan dalam volumeClaimTemplates disediakan secara dinamis oleh controller, yang secara otomatis membuat sumber daya PVC dan PV terkait. Anda dapat mengonversi sumber daya PVC dan PV yang dihasilkan ke CSI pada Langkah 3.

Agar controller membuat ulang sumber daya PVC dan PV CSI, Anda dapat menghapus sumber daya PVC dan PV FlexVolume terkait (setelah memastikan data tidak lagi diperlukan), lalu mengubah nilai bidang 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 sumber daya workload asli.

Parameter opsional

Jalankan perintah berikut untuk melihat 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 file YAML CSI yang dihasilkan, dengan nilai default outputfile.txt di direktori saat ini. Jika nilai kosong diberikan, output akan dicetak ke stdout.

-b

Jalur backup untuk file YAML workload yang menggunakan penyimpanan FlexVolume, dengan nilai default backupfile.txt di jalur saat ini. Jika Anda menentukan nilai kosong, tidak ada backup yang dilakukan.

-n

Namespace yang berisi workload yang akan diproses. Secara default, semua namespace diproses.

-k

Jenis workload yang akan diproses, seperti StatefulSet atau Deployment. Secara default, semua jenis diproses.

-i

Menentukan nama workload yang akan diproses, dan harus digunakan bersama parameter -n dan -k.

-f

Membaca dan mengonversi sumber daya workload dari jalur file YAML yang ditentukan, bukan mencantumkan workload dari kluster. Mengonfigurasi parameter -n, -k, dan -i secara bersamaan tidak didukung.

Contoh

Mengonversi penyimpanan Cloud Disk tanpa volumeId yang ditentukan menjadi volume sementara

  1. Buat workload di kluster FlexVolume 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. Jalankan perintah berikut untuk menggunakan CLI FlexVolume2CSI guna mengonversi workload yang telah diterapkan.

    flexvolume2csi inline-translate -k deploy -n default -i nginx 
  3. Jalankan perintah berikut untuk melihat file 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 yang sesuai.

  4. Sesuaikan konten YAML yang dihasilkan sesuai kebutuhan. Saat mengonversi ke volume sementara, biasanya Anda perlu melakukan modifikasi berikut:

    1. Anda harus menentukan kelas penyimpanan untuk volume sementara dalam bagian ephemeral. Berikut adalah konten yang telah disesuaikan:

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

    Anda juga dapat menerapkan perubahan ini selama konversi dengan menggunakan parameter -t dan -c. Perubahan tersebut berlaku untuk semua sumber daya.

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

Mengonversi jenis volume lain ke volume CSI

Contoh ini menunjukkan cara menggunakan parameter -f untuk menentukan konten YAML yang akan dikonversi.

  1. Simpan YAML aplikasi berstatus yang ditampilkan di awal langkah ini ke dalam file bernama disk-static-sts.yaml.

  2. Jalankan perintah berikut untuk menggunakan CLI FlexVolume2CSI guna mengonversi aplikasi berstatus yang dijelaskan dalam file tersebut.

    flexvolume2csi inline-translate -f disk-static-sts.yaml
  3. Jalankan perintah berikut untuk melihat YAML aplikasi berstatus 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 yang sesuai. Definisi volume dalam StatefulSet diperbarui untuk mereferensikan PVC baru. Bagian volumeClaimTemplates tetap tidak berubah.

  4. Sesuaikan konten YAML yang dihasilkan sesuai kebutuhan. Saat mengonversi ke PV dan PVC CSI, biasanya Anda perlu melakukan perubahan berikut:

    1. Tentukan kapasitas penyimpanan yang diperlukan untuk PVC dan PV CSI. Misalnya, untuk meminta 20 Gi, sesuaikan file sebagai berikut:

      ---
      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. Kelas penyimpanan yang ditentukan dalam volumeClaimTemplates harus diubah menjadi kelas CSI. Anda dapat langsung mengubah nilai bidang tersebut.

    Anda juga dapat menerapkan perubahan ini selama konversi dengan menggunakan parameter -t dan -c. Perubahan tersebut 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 FlexVolume2CSI hanya menghasilkan YAML; tool ini tidak menerapkan sumber daya. Setelah memverifikasi konten YAML, terapkan secara manual ke kluster Anda. Untuk alur kerja migrasi lengkap, lihat skenario di Migrasi FlexVolume ke CSI.

Untuk menghindari konflik penamaan sumber daya PVC dan PV, kami menyarankan menggunakan perintah kubectl create -f saat penerapan.

Topik terkait