Utilisez la CLI FlexVolume2CSI pour convertir par lot les fichiers YAML des volumes persistants (PV), des revendications de volume persistant (PVC) et des volumes intégrés d'un cluster FlexVolume vers le format CSI. Cette opération vous aide à migrer d'un cluster FlexVolume vers un cluster CSI.
Fonctionnement
FlexVolume2CSI répertorie les ressources de volume et de charge de travail dans un cluster ou un namespace, traduit les champs FlexVolume au format CSI et écrit le fichier YAML résultant dans un fichier.
La conversion prend uniquement en charge les PV, PVC et volumes intégrés standard pour Apsara File Storage NAS, Object Storage Service (OSS) et Cloud Disk. Vérifiez le fichier YAML CSI généré avant le déploiement.
Étape 1 : Installer la CLI FlexVolume2CSI
-
Installez la CLI FlexVolume2CSI.
Compatible avec macOS et Linux.
curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash -
Vérifiez l'installation.
flexvolume2csi versionSortie attendue :
flexvolume2csi: v2.0.1+fb3f6ea BuildDate: 2025-12-29T11:17:39Z GitCommit: fb3f6eaa300e095053c0eabc8943c678534d4805 GitTreeState: clean GoVersion: go1.24.5 Compiler: gc Platform: darwin/arm64Cela confirme que l'installation a réussi.
Étape 2 : Configurer la CLI FlexVolume2CSI
-
Configurez les informations du cluster.
flexvolume2csi configureSortie attendue :
Configuring profile 'default' ... Default Cluster Id (ClusterId of ACK Flexvolume Cluster) [c4869a2f603ca4e74****************]: Default Kubeconfig Path (default is ~/.kube/config) []: Saving profile[default] ... Done.Paramètre
description
Cluster Id
ID du cluster FlexVolume.
Kubeconfig Path
Chemin du fichier kubeconfig pour le cluster FlexVolume. La valeur par défaut est ~/.kube/config.
Étape 3 : Générer le fichier YAML CSI pour les PV et les PVC
Paramètres facultatifs
Consultez les paramètres disponibles.
flexvolume2csi translate help
Sortie attendue :
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
|
Paramètre |
description |
|
|
Chemin du fichier YAML CSI généré. La valeur par défaut est |
|
|
Chemin de sauvegarde du fichier YAML FlexVolume d'origine. La valeur par défaut est |
|
|
Namespace à traiter. Par défaut, tous les namespaces sont traités. |
|
|
Nom d'un PVC spécifique à traiter avec son PV associé. Requiert |
|
|
Préfixe pour les noms des PV et PVC CSI générés. Aucun préfixe par défaut. Exemple : pvc-test avec -p csi devient csi-pvc-test. |
|
|
Suffixe pour les noms des PV et PVC CSI générés. Aucun suffixe par défaut. Exemple : pvc-test avec -s csi devient pvc-test-csi. |
Exemples
-
Créez un fichier pv.yaml avec le contenu suivant.
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" # Replace this with the mount target of your file storage. path: "/k8s" vers: "3" options: "nolock,tcp,noresvport" -
Déployez l'exemple de PV dans le cluster FlexVolume.
kubectl apply -f pv.yaml -
Créez un fichier pvc.yaml avec le contenu suivant.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nas spec: accessModes: - ReadWriteMany storageClassName: nas resources: requests: storage: 5Gi -
Déployez l'exemple de PVC dans le cluster FlexVolume.
kubectl apply -f pvc.yaml -
Confirmez que le PV et le PVC sont à l'état Bound.
kubectl get pvc | grep pvc-nasSortie attendue :
pvc-nas Bound pv-nas 5Gi RWO nas 10s -
Convertissez le fichier YAML du PV et du PVC.
ImportantLes PVC et PV FlexVolume ne peuvent pas être convertis en CSI avec
kubectl applyet doivent être redéployés. Consultez la rubrique Migrer FlexVolume vers CSI.Pour une coexistence temporaire des PVC/PV FlexVolume et CSI avec
csi-compatible-controller, utilisez-pou-safin d'éviter les conflits de nommage.flexvolume2csi translate -s csi -
Consultez le fichier YAML CSI généré.
cat ./outputfile.txtSortie attendue :
--- 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-csiLe fichier YAML CSI pour le PV et le PVC est généré.
(Facultatif) Étape 4 : Générer le fichier YAML CSI pour les volumes intégrés
Les premières versions des clusters managés ACK et des clusters ACK Serverless prennent en charge les volumes intégrés FlexVolume pour les charges de travail. Si votre cluster contient de telles charges de travail, convertissez également leurs fichiers YAML.
Les volumes intégrés ne nécessitent pas de ressources PVC ou PV. Voici un exemple de fichier YAML pour une application stateful avec un stockage FlexVolume intégré :
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
Le volume test est un volume Cloud Disk FlexVolume intégré.
Le stockage défini dans volumeClaimTemplates est provisionné dynamiquement par un contrôleur qui crée les PVC et PV correspondants. Convertissez-les en CSI à l'étape 3.
Pour les recréer en tant que ressources CSI, supprimez les PVC et PV FlexVolume (après avoir confirmé que les données ne sont plus nécessaires), puis modifiez le champ storageClassName dans volumeClaimTemplates pour utiliser une classe de stockage CSI.
Cibles de conversion
Lors de la conversion d'un volume FlexVolume intégré :
Un volume Cloud Disk sans volumeId spécifié est converti en un volume éphémère intégré.
Les autres types de volumes sont convertis en PV et PVC CSI autonomes. Le fichier YAML généré inclut le PV, le PVC et la charge de travail d'origine.
Paramètres facultatifs
Consultez les paramètres disponibles.
flexvolume2csi inline-translate help
Sortie attendue :
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
|
Paramètre |
description |
|
|
Chemin du fichier YAML CSI généré. La valeur par défaut est |
|
|
Chemin de sauvegarde du fichier YAML de la charge de travail FlexVolume. La valeur par défaut est |
|
|
Namespace à traiter. Par défaut, tous les namespaces sont traités. |
|
|
Type de charge de travail, tel que |
|
|
Nom d'une charge de travail spécifique à traiter. Requiert |
|
|
Lit et convertit les charges de travail à partir d'un fichier YAML au lieu de les lister depuis le cluster. Ne peut pas être combiné avec |
Exemples
Conversion du stockage Cloud Disk avec un volumeId non spécifié en volume éphémère
-
Créez une charge de travail avec le contenu suivant.
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" -
Convertissez la charge de travail déployée avec FlexVolume2CSI.
flexvolume2csi inline-translate -k deploy -n default -i nginx -
Consultez le fichier YAML CSI généré.
cat ./outputfile.txtSortie attendue :
--- 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: testLe volume FlexVolume intégré est converti en volume éphémère.
-
Ajustez le fichier YAML généré selon vos besoins. Pour la conversion en volume éphémère, effectuez les modifications suivantes :
-
Spécifiez une classe de stockage dans la section ephemeral :
volumes: - ephemeral: volumeClaimTemplate: metadata: spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: ephemeral-disk
Vous pouvez également utiliser les paramètres -t et -c lors de la conversion. Les modifications s'appliquent à toutes les ressources.
flexvolume2csi inline-translate -k deploy -n default -i nginx -t ephemeral-disk -
Convertir d'autres types de volumes en volumes CSI
Utilisez le paramètre -f pour spécifier le fichier YAML à convertir.
Enregistrez le fichier YAML StatefulSet du début de cette étape sous le nom disk-static-sts.yaml.
-
Convertissez le fichier YAML de l'application stateful avec FlexVolume2CSI.
flexvolume2csi inline-translate -f disk-static-sts.yaml -
Consultez le fichier YAML converti.
cat ./outputfile.txtSortie attendue :
--- 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: 20GiLe volume FlexVolume intégré est converti en PV et PVC CSI. La définition du volume StatefulSet fait référence au nouveau PVC. La section volumeClaimTemplates reste inchangée.
-
Ajustez le fichier YAML généré selon vos besoins :
-
Spécifiez la capacité de stockage pour le PV et le PVC. Par exemple, pour 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**** Modifiez la classe de stockage dans volumeClaimTemplates pour utiliser une classe CSI.
Vous pouvez également utiliser les paramètres -t et -c lors de la conversion. Les modifications s'appliquent à toutes les ressources.
flexvolume2csi inline-translate -f disk-static-sts.yaml -t <csi-storageclass> -c "20Gi" -
Étape 5 : Vérifier et déployer le fichier YAML CSI
La CLI génère le fichier YAML mais ne déploie pas les ressources. Vérifiez et déployez manuellement la sortie comme décrit dans la rubrique Migrer FlexVolume vers CSI.
Utilisez kubectl create -f pour éviter les conflits de nommage des PV et PVC.