All Products
Search
Document Center

Container Service for Kubernetes:Konversi batch file YAML menggunakan antarmuka baris perintah FlexVolume2CSI

Last Updated:Mar 26, 2026

Antarmuka baris perintah (CLI) FlexVolume2CSI melakukan konversi batch file YAML untuk PersistentVolumes (PVs), PersistentVolumeClaims (PVCs), dan workload yang menggunakan penyimpanan inline FlexVolume. Gunakan alat ini sebagai bagian dari proses migrasi kluster ACK dari FlexVolume ke Container Storage Interface (CSI).

FlexVolume2CSI mencantumkan resource volume dan workload di kluster Anda, menerjemahkan field FlexVolume standar ke format CSI yang sesuai, lalu menulis hasil konversi YAML ke file output. Alat ini tidak melakukan deployment resource yang telah dikonversi—Anda harus meninjau dan mendeploynya secara terpisah.

Lingkup: FlexVolume2CSI hanya mengonversi PersistentVolumes (PVs), PersistentVolumeClaims (PVCs), dan volume inline workload standar yang menggunakan volume NAS, OSS, atau disk Alibaba Cloud. Alat ini tidak mengonversi jenis penyimpanan lainnya.

Penting

Verifikasi file YAML yang dihasilkan sebelum mendeploynya ke kluster.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • macOS atau Linux (CLI tidak mendukung Windows)

  • ID kluster dari kluster FlexVolume

  • PV, PVC, atau workload yang menggunakan volume NAS, OSS, atau disk Alibaba Cloud

Langkah 1: Instal FlexVolume2CSI

  1. Jalankan perintah berikut untuk menginstal FlexVolume2CSI.

    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.0+f87c834
      BuildDate: 2025-01-06T03:49:37Z
      GitCommit: f87c83459b8407668a04f7e7434cc51439c87508
      GitTreeState: clean
      GoVersion: go1.23.3
      Compiler: gc
      Platform: darwin/arm64

Langkah 2: Konfigurasi akses kluster

Jalankan perintah berikut dan ikuti prompt untuk mengonfigurasi kluster target.

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.
ParameterDeskripsi
Cluster IdID kluster FlexVolume.
Kubeconfig PathPath ke file kubeconfig untuk kluster FlexVolume. Nilai default-nya adalah ~/.kube/config.

Langkah 3: Konversi PV dan PVC FlexVolume

Gunakan flexvolume2csi translate untuk menghasilkan YAML CSI untuk PV dan PVC.

Penting

PVC dan PV FlexVolume tidak dapat dikonversi secara langsung menggunakan kubectl apply—Anda harus mendeploynya ulang. Jika Anda perlu menjalankan resource FlexVolume dan CSI secara bersamaan sementara waktu (menggunakan komponen csi-compatible-controller), gunakan -p atau -s untuk menghindari konflik nama.

Flag

Jalankan flexvolume2csi translate help untuk melihat semua flag yang tersedia.

flexvolume2csi translate [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-t storageclass]
FlagDeskripsi
-oPath ke file YAML CSI yang dihasilkan. Nilai default-nya adalah ./outputfile.txt. Biarkan kosong untuk mencetak ke stdout.
-bPath ke file YAML backup untuk PV dan PVC FlexVolume asli. Nilai default-nya adalah ./backupfile.txt. Biarkan kosong untuk melewati pembuatan backup.
-nNamespace yang akan diproses. Nilai default-nya adalah semua namespace.
-cNama PVC yang akan diproses. Hanya memproses PVC yang ditentukan beserta PV-nya yang sesuai. Harus digunakan bersama -n.
-pAwalan yang ditambahkan ke nama PV dan PVC CSI yang dihasilkan. Misalnya, -p csi mengubah nama pvc-test menjadi csi-pvc-test.
-sAkhiran yang ditambahkan ke nama PV dan PVC CSI yang dihasilkan. Misalnya, -s csi mengubah nama pvc-test menjadi pvc-test-csi.
-tNama StorageClass yang diterapkan pada resource CSI yang dihasilkan.

Contoh

Contoh ini mengonversi PV dan PVC NAS FlexVolume ke CSI.

  1. Buat file pv.yaml dengan konten berikut dan terapkan ke kluster 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" # Ganti dengan alamat titik pemasangan NAS Anda.
          path: "/k8s"
          vers: "3"
          options: "nolock,tcp,noresvport"
    kubectl apply -f pv.yaml
  2. Buat file pvc.yaml dengan konten berikut dan terapkan.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
    kubectl apply -f pvc.yaml
  3. Konfirmasi bahwa PV dan PVC telah terikat (bound).

    kubectl get pvc | grep pvc-nas

    Output yang diharapkan:

    pvc-nas   Bound    pv-nas   5Gi       RWO            nas       10s
  4. Konversi semua PV dan PVC di kluster. Flag -s csi menambahkan -csi ke nama resource yang dihasilkan untuk menghindari konflik.

    flexvolume2csi translate -s csi
  5. Tinjau YAML CSI yang dihasilkan.

    cat ./outputfile.yaml

    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

(Opsional) Langkah 4: Konversi workload dengan volume FlexVolume inline

Versi sebelumnya dari kluster ACK managed dan kluster ACK Serverless mendukung pemasangan penyimpanan FlexVolume langsung ke workload dalam mode inline. Jika kluster Anda memiliki workload seperti itu, konversi file YAML-nya secara terpisah menggunakan flexvolume2csi inline-translate.

Metode pemasangan inline tidak menggunakan resource PVC atau PV. Contohnya:

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 disk FlexVolume yang dipasang dalam mode inline.

Catatan

Bidang volumeClaimTemplates memungkinkan controller membuat resource PVC dan PV secara dinamis. Resource yang dihasilkan tersebut dapat dikonversi menggunakan prosedur pada Langkah 3. Untuk membuat ulang sebagai resource CSI, pastikan data tidak lagi diperlukan sebelum menghapus resource tersebut, lalu hapus PVC dan PV FlexVolume, serta ubah storageClassName dalam volumeClaimTemplates menjadi StorageClass CSI.

Target konversi

Output konversi bergantung pada jenis volume:

  • Volume disk tanpa `volumeId`: dikonversi menjadi volume sementara inline.

  • Semua jenis lainnya: dikonversi menjadi resource PV dan PVC CSI. File output mencakup PV, PVC, dan manifes workload yang telah diperbarui.

Flags

Jalankan flexvolume2csi inline-translate help untuk melihat semua flag yang tersedia.

flexvolume2csi inline-translate [-n namespace] [-k kind] [-i item] [-f inputfile] [-o outputfile] [-b backupfile] [-t storageclass] [-c capacity]
FlagDeskripsi
-oPath ke file YAML CSI yang dihasilkan. Nilai default-nya adalah ./outputfile.txt. Biarkan kosong untuk mencetak ke stdout.
-bPath ke file YAML backup untuk workload FlexVolume asli. Nilai default-nya adalah ./backupfile.txt. Biarkan kosong untuk melewati pembuatan backup.
-nNamespace yang akan diproses. Nilai default-nya adalah semua namespace.
-kJenis workload yang akan diproses (misalnya, sts atau deploy). Nilai default-nya adalah semua jenis. Pod tidak disertakan kecuali Anda menentukan -k pod.
-iNama workload yang akan diproses. Harus digunakan bersama -n dan -k.
-fMembaca resource workload dari file YAML lokal alih-alih mengambil dari kluster. Tidak dapat digabungkan dengan -n, -k, atau -i.
-tNama StorageClass yang diterapkan pada resource CSI yang dihasilkan.
-cKapasitas penyimpanan yang ditetapkan pada resource CSI yang dihasilkan.

Contoh 1: Konversi volume disk tanpa volumeId menjadi volume sementara

  1. Buat dan deploy workload berikut di kluster 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. Konversi beban kerja.

    flexvolume2csi inline-translate -k deploy -n default -i nginx
  3. Tinjau YAML CSI yang dihasilkan.

    cat ./outputfile.yaml

    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
  4. Sebelum mendeploy, sesuaikan YAML yang dihasilkan sesuai kebutuhan. Untuk volume sementara, tentukan StorageClass:

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

    Atau, gunakan -t saat konversi untuk menetapkan StorageClass untuk semua resource:

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

Contoh 2: Konversi jenis volume lain menjadi resource PV dan PVC CSI

Contoh ini menggunakan -f untuk mengonversi StatefulSet dari file lokal.

  1. Simpan YAML StatefulSet yang ditunjukkan di awal langkah ini sebagai disk-static-sts.yaml.

  2. Konversi StatefulSet tersebut.

    flexvolume2csi inline-translate -f disk-static-sts.yaml
  3. Tinjau YAML CSI yang dihasilkan.

    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 PVC dan PV CSI. StatefulSet kini mereferensikan PVC alih-alih volume inline. Bagian volumeClaimTemplates tidak diubah.

  4. Sebelum mendeploy, sesuaikan YAML yang dihasilkan sesuai kebutuhan. Untuk volume disk CSI, dua bidang biasanya tidak ada dalam output yang dihasilkan:

    • Kapasitas penyimpanan: deklarasikan kapasitas yang dibutuhkan pada PVC dan PV. Misalnya, tetapkan capacity.storage: 20Gi pada PV dan resources.requests.storage: 20Gi pada PVC.

    • StorageClass dalam volumeClaimTemplates: ubah storageClassName menjadi StorageClass CSI.

    Setelah penyesuaian:

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

    Atau, gunakan -t dan -c saat konversi untuk menetapkan StorageClass dan kapasitas untuk semua resource:

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

Langkah 5: Deploy YAML CSI yang dihasilkan

Setelah memverifikasi YAML yang dihasilkan, deploy ke kluster. FlexVolume2CSI hanya menghasilkan file YAML—tidak melakukan deployment. Gunakan kubectl create -f alih-alih kubectl apply -f untuk menghindari konflik nama resource.

Untuk proses migrasi lengkap, lihat panduan skenario di Migrasi dari FlexVolume ke CSI.

Langkah selanjutnya