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.
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
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 | bashJalankan perintah berikut untuk memverifikasi 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/arm64Output ini mengonfirmasi bahwa CLI FlexVolume2CSI berhasil diinstal.
Langkah 2: Konfigurasi CLI FlexVolume2CSI
Jalankan perintah berikut untuk mengonfigurasi 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
Jalankan perintah berikut untuk melihat parameter yang tersedia.
flexvolume2csi translate helpOutput 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-suffixParameter | Deskripsi |
| Jalur ke file YAML untuk PV dan PVC CSI yang dihasilkan, dengan nilai default |
| Jalur backup untuk file YAML PV dan PVC FlexVolume asli. Nilai default adalah |
| Namespace yang berisi sumber daya yang akan diproses. Secara default, semua namespace diproses. |
| Menentukan nama PVC untuk hanya memproses PVC tersebut dan PV terkaitnya. Parameter ini harus digunakan bersama parameter |
| 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. |
| 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
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"Jalankan perintah berikut untuk menerapkan contoh PV di kluster FlexVolume.
kubectl apply -f pv.yamlBuat 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: 5GiJalankan perintah berikut untuk menerapkan contoh PVC di kluster FlexVolume.
kubectl apply -f pvc.yamlJalankan perintah berikut untuk memastikan PV dan PVC berada dalam status Bound.
kubectl get pvc | grep pvc-nasOutput yang diharapkan:
pvc-nas Bound pv-nas 5Gi RWO nas 10sJalankan perintah berikut untuk mengonversi file YAML PV dan PVC.
PentingSumber daya PVC dan PV FlexVolume tidak dapat langsung dikonversi ke tipe CSI menggunakan perintah seperti
kubectl applydan 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-patau-sguna menghindari konflik nama sumber daya.flexvolume2csi translate -s csiJalankan perintah berikut untuk melihat output YAML CSI untuk PV dan PVC.
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-csiOutput 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.
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 helpOutput 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 workloadsParameter | Deskripsi |
| Jalur untuk file YAML CSI yang dihasilkan, dengan nilai default |
| Jalur backup untuk file YAML workload yang menggunakan penyimpanan FlexVolume, dengan nilai default |
| Namespace yang berisi workload yang akan diproses. Secara default, semua namespace diproses. |
| Jenis workload yang akan diproses, seperti |
| Menentukan nama workload yang akan diproses, dan harus digunakan bersama parameter |
| Membaca dan mengonversi sumber daya workload dari jalur file YAML yang ditentukan, bukan mencantumkan workload dari kluster. Mengonfigurasi parameter |
Contoh
Mengonversi penyimpanan Cloud Disk tanpa volumeId yang ditentukan menjadi volume sementara
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"Jalankan perintah berikut untuk menggunakan CLI FlexVolume2CSI guna mengonversi workload yang telah diterapkan.
flexvolume2csi inline-translate -k deploy -n default -i nginxJalankan perintah berikut untuk melihat file 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 yang sesuai.
Sesuaikan konten YAML yang dihasilkan sesuai kebutuhan. Saat mengonversi ke volume sementara, biasanya Anda perlu melakukan modifikasi berikut:
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.
Simpan YAML aplikasi berstatus yang ditampilkan di awal langkah ini ke dalam file bernama disk-static-sts.yaml.
Jalankan perintah berikut untuk menggunakan CLI FlexVolume2CSI guna mengonversi aplikasi berstatus yang dijelaskan dalam file tersebut.
flexvolume2csi inline-translate -f disk-static-sts.yamlJalankan perintah berikut untuk melihat YAML aplikasi berstatus 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 yang sesuai. Definisi volume dalam StatefulSet diperbarui untuk mereferensikan PVC baru. Bagian volumeClaimTemplates tetap tidak berubah.
Sesuaikan konten YAML yang dihasilkan sesuai kebutuhan. Saat mengonversi ke PV dan PVC CSI, biasanya Anda perlu melakukan perubahan berikut:
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****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.