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.
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
Jalankan perintah berikut untuk menginstal FlexVolume2CSI.
curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bashVerifikasi instalasi.
flexvolume2csi versionOutput 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 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 | Path 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.
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]| Flag | Deskripsi |
|---|---|
-o | Path ke file YAML CSI yang dihasilkan. Nilai default-nya adalah ./outputfile.txt. Biarkan kosong untuk mencetak ke stdout. |
-b | Path ke file YAML backup untuk PV dan PVC FlexVolume asli. Nilai default-nya adalah ./backupfile.txt. Biarkan kosong untuk melewati pembuatan backup. |
-n | Namespace yang akan diproses. Nilai default-nya adalah semua namespace. |
-c | Nama PVC yang akan diproses. Hanya memproses PVC yang ditentukan beserta PV-nya yang sesuai. Harus digunakan bersama -n. |
-p | Awalan yang ditambahkan ke nama PV dan PVC CSI yang dihasilkan. Misalnya, -p csi mengubah nama pvc-test menjadi csi-pvc-test. |
-s | Akhiran yang ditambahkan ke nama PV dan PVC CSI yang dihasilkan. Misalnya, -s csi mengubah nama pvc-test menjadi pvc-test-csi. |
-t | Nama StorageClass yang diterapkan pada resource CSI yang dihasilkan. |
Contoh
Contoh ini mengonversi PV dan PVC NAS FlexVolume ke CSI.
Buat file
pv.yamldengan 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.yamlBuat file
pvc.yamldengan konten berikut dan terapkan.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nas spec: accessModes: - ReadWriteMany storageClassName: nas resources: requests: storage: 5Gikubectl apply -f pvc.yamlKonfirmasi bahwa PV dan PVC telah terikat (bound).
kubectl get pvc | grep pvc-nasOutput yang diharapkan:
pvc-nas Bound pv-nas 5Gi RWO nas 10sKonversi semua PV dan PVC di kluster. Flag
-s csimenambahkan-csike nama resource yang dihasilkan untuk menghindari konflik.flexvolume2csi translate -s csiTinjau YAML CSI yang dihasilkan.
cat ./outputfile.yamlOutput 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: 20GiVolume bernama test adalah volume disk FlexVolume yang dipasang dalam mode inline.
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]| Flag | Deskripsi |
|---|---|
-o | Path ke file YAML CSI yang dihasilkan. Nilai default-nya adalah ./outputfile.txt. Biarkan kosong untuk mencetak ke stdout. |
-b | Path ke file YAML backup untuk workload FlexVolume asli. Nilai default-nya adalah ./backupfile.txt. Biarkan kosong untuk melewati pembuatan backup. |
-n | Namespace yang akan diproses. Nilai default-nya adalah semua namespace. |
-k | Jenis workload yang akan diproses (misalnya, sts atau deploy). Nilai default-nya adalah semua jenis. Pod tidak disertakan kecuali Anda menentukan -k pod. |
-i | Nama workload yang akan diproses. Harus digunakan bersama -n dan -k. |
-f | Membaca resource workload dari file YAML lokal alih-alih mengambil dari kluster. Tidak dapat digabungkan dengan -n, -k, atau -i. |
-t | Nama StorageClass yang diterapkan pada resource CSI yang dihasilkan. |
-c | Kapasitas penyimpanan yang ditetapkan pada resource CSI yang dihasilkan. |
Contoh 1: Konversi volume disk tanpa volumeId menjadi volume sementara
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"Konversi beban kerja.
flexvolume2csi inline-translate -k deploy -n default -i nginxTinjau YAML CSI yang dihasilkan.
cat ./outputfile.yamlOutput 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: testSebelum 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-diskAtau, gunakan
-tsaat 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.
Simpan YAML StatefulSet yang ditunjukkan di awal langkah ini sebagai
disk-static-sts.yaml.Konversi StatefulSet tersebut.
flexvolume2csi inline-translate -f disk-static-sts.yamlTinjau YAML CSI yang dihasilkan.
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 PVC dan PV CSI. StatefulSet kini mereferensikan PVC alih-alih volume inline. Bagian
volumeClaimTemplatestidak diubah.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: 20Gipada PV danresources.requests.storage: 20Gipada PVC.StorageClass dalam volumeClaimTemplates: ubah
storageClassNamemenjadi 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
-tdan-csaat 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.