Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Batch convert YAML with the FlexVolume2CSI CLI

Dernière mise à jour :Aug 11, 2026

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.

Important

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

  1. Installez la CLI FlexVolume2CSI.

    Compatible avec macOS et Linux.

    curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
  2. Vérifiez l'installation.

    flexvolume2csi version

    Sortie attendue :

    flexvolume2csi: v2.0.1+fb3f6ea
      BuildDate: 2025-12-29T11:17:39Z
      GitCommit: fb3f6eaa300e095053c0eabc8943c678534d4805
      GitTreeState: clean
      GoVersion: go1.24.5
      Compiler: gc
      Platform: darwin/arm64

    Cela confirme que l'installation a réussi.

Étape 2 : Configurer la CLI FlexVolume2CSI

  1. Configurez les informations du cluster.

    flexvolume2csi configure

    Sortie 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

-o

Chemin du fichier YAML CSI généré. La valeur par défaut est outputfile.txt. Indiquez une valeur vide pour afficher la sortie sur stdout.

-b

Chemin de sauvegarde du fichier YAML FlexVolume d'origine. La valeur par défaut est backupfile.txt. Indiquez une valeur vide pour ignorer la sauvegarde.

-n

Namespace à traiter. Par défaut, tous les namespaces sont traités.

-c

Nom d'un PVC spécifique à traiter avec son PV associé. Requiert -n. Par défaut, tous les PV et PVC sont traités.

-p

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.

-s

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

  1. 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"
  2. Déployez l'exemple de PV dans le cluster FlexVolume.

    kubectl apply -f pv.yaml
  3. 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
  4. Déployez l'exemple de PVC dans le cluster FlexVolume.

    kubectl apply -f pvc.yaml
  5. Confirmez que le PV et le PVC sont à l'état Bound.

    kubectl get pvc | grep pvc-nas

    Sortie attendue :

    pvc-nas   Bound    pv-nas   5Gi       RWO            nas       10s
  6. Convertissez le fichier YAML du PV et du PVC.

    Important

    Les PVC et PV FlexVolume ne peuvent pas être convertis en CSI avec kubectl apply et 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 -p ou -s afin d'éviter les conflits de nommage.

    flexvolume2csi translate -s csi
  7. Consultez le fichier YAML CSI généré.

    cat ./outputfile.txt

    Sortie 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-csi
    

    Le 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é.

Remarque

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

-o

Chemin du fichier YAML CSI généré. La valeur par défaut est outputfile.txt. Indiquez une valeur vide pour afficher la sortie sur stdout.

-b

Chemin de sauvegarde du fichier YAML de la charge de travail FlexVolume. La valeur par défaut est backupfile.txt. Indiquez une valeur vide pour ignorer la sauvegarde.

-n

Namespace à traiter. Par défaut, tous les namespaces sont traités.

-k

Type de charge de travail, tel que StatefulSet ou Deployment. Par défaut, tous les types sont traités.

-i

Nom d'une charge de travail spécifique à traiter. Requiert -n et -k.

-f

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 -n, -k ou -i.

Exemples

Conversion du stockage Cloud Disk avec un volumeId non spécifié en volume éphémère

  1. 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"
  2. Convertissez la charge de travail déployée avec FlexVolume2CSI.

    flexvolume2csi inline-translate -k deploy -n default -i nginx 
  3. Consultez le fichier YAML CSI généré.

    cat ./outputfile.txt

    Sortie 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: test

    Le volume FlexVolume intégré est converti en volume éphémère.

  4. Ajustez le fichier YAML généré selon vos besoins. Pour la conversion en volume éphémère, effectuez les modifications suivantes :

    1. 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.

  1. Enregistrez le fichier YAML StatefulSet du début de cette étape sous le nom disk-static-sts.yaml.

  2. Convertissez le fichier YAML de l'application stateful avec FlexVolume2CSI.

    flexvolume2csi inline-translate -f disk-static-sts.yaml
  3. Consultez le fichier YAML converti.

    cat ./outputfile.txt

    Sortie 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: 20Gi
    

    Le 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.

  4. Ajustez le fichier YAML généré selon vos besoins :

    1. 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****
    2. 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.

Rubriques connexes