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.
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
-
Instal CLI FlexVolume2CSI.
Didukung pada macOS dan Linux.
curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash -
Verifikasi instalasi.
flexvolume2csi versionOutput 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/arm64Hal ini mengonfirmasi bahwa instalasi berhasil.
Langkah 2: Konfigurasikan CLI FlexVolume2CSI
-
Konfigurasikan informasi kluster.
flexvolume2csi configureOutput 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 |
|
|
Jalur untuk YAML CSI yang dihasilkan. Nilai default adalah |
|
|
Jalur backup untuk YAML FlexVolume asli. Nilai default adalah |
|
|
Namespace yang akan diproses. Nilai default adalah semua namespace. |
|
|
Nama PVC spesifik yang akan diproses beserta PV-nya. Memerlukan |
|
|
Awalan untuk nama PV dan PVC CSI yang dihasilkan. Tidak ada awalan secara default. Contoh: pvc-test dengan -p csi menjadi csi-pvc-test. |
|
|
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
-
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" -
Terapkan PV contoh di kluster FlexVolume.
kubectl apply -f pv.yaml -
Buat file pvc.yaml dengan konten berikut.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nas spec: accessModes: - ReadWriteMany storageClassName: nas resources: requests: storage: 5Gi -
Terapkan PVC contoh di kluster FlexVolume.
kubectl apply -f pvc.yaml -
Konfirmasi bahwa PV dan PVC berada dalam status Bound.
kubectl get pvc | grep pvc-nasOutput yang diharapkan:
pvc-nas Bound pv-nas 5Gi RWO nas 10s -
Konversi YAML PV dan PVC.
PentingPVC dan PV FlexVolume tidak dapat dikonversi ke CSI dengan
kubectl applydan harus diterapkan ulang. Lihat Migrasi FlexVolume ke CSI.Untuk koeksistensi sementara PVC/PV FlexVolume dan CSI dengan
csi-compatible-controller, gunakan-patau-suntuk menghindari konflik nama.flexvolume2csi translate -s csi -
Lihat YAML CSI output.
cat ./outputfile.txtOutput 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-csiYAML 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.
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 |
|
|
Jalur untuk YAML CSI yang dihasilkan. Nilai default adalah |
|
|
Jalur backup untuk YAML workload FlexVolume. Nilai default adalah |
|
|
Namespace yang akan diproses. Nilai default adalah semua namespace. |
|
|
Jenis workload, seperti |
|
|
Nama workload spesifik yang akan diproses. Memerlukan |
|
|
Membaca dan mengonversi workload dari file YAML alih-alih mencantumkannya dari kluster. Tidak dapat digabungkan dengan |
Contoh
Mengonversi penyimpanan Cloud Disk dengan volumeId yang tidak ditentukan menjadi volume sementara
-
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" -
Konversi workload yang telah diterapkan dengan FlexVolume2CSI.
flexvolume2csi inline-translate -k deploy -n default -i nginx -
Lihat YAML CSI output.
cat ./outputfile.txtOutput 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: testVolume FlexVolume inline dikonversi menjadi volume sementara.
-
Atur YAML yang dihasilkan sesuai kebutuhan. Untuk konversi volume sementara, lakukan modifikasi berikut:
-
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.
-
Simpan YAML StatefulSet dari awal langkah ini sebagai disk-static-sts.yaml.
-
Konversi YAML aplikasi berstatus dengan FlexVolume2CSI.
flexvolume2csi inline-translate -f disk-static-sts.yaml -
Lihat YAML yang telah dikonversi.
cat ./outputfile.txtOutput 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: 20GiVolume FlexVolume inline dikonversi menjadi PV dan PVC CSI. Definisi volume StatefulSet mereferensikan PVC baru tersebut. Bagian volumeClaimTemplates tetap tidak berubah.
-
Atur YAML yang dihasilkan sesuai kebutuhan:
-
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**** -
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.