Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Migrate FlexVolume to CSI for clusters that store no data

Dernière mise à jour :Aug 11, 2026

FlexVolume est obsolète dans Container Service for Kubernetes (ACK) et n'est plus disponible dans les nouveaux clusters. Migrez vos clusters existants de FlexVolume vers Container Storage Interface (CSI) pour bénéficier d'une stabilité améliorée, de la création automatique de snapshots, de la prise en charge du stockage Container Network File System (CNFS) et des capacités de restauration des données.

Ce guide concerne les clusters où aucune donnée n'est stockée via FlexVolume. Avant de commencer, assurez-vous que l'une des conditions suivantes est remplie :

  • Aucun volume n'a été monté via FlexVolume.

  • Toutes les données des volumes gérés par FlexVolume ont été supprimées.

Si votre cluster utilise encore des volumes gérés par FlexVolume contenant des données actives, migrez d'abord ces volumes.

Prérequis

  • Un cluster ACK utilisant le plug-in FlexVolume

  • kubectl configuré pour accéder au cluster

  • Accès à la console OpenAPI Explorer avec les autorisations nécessaires pour appeler les opérations API ACK

Comparaison entre FlexVolume et CSI

Élément FlexVolume CSI
Contrôleur Disk-Controller (Deployment) -- création automatique de volumes CSI-Provisioner (Deployment) -- création automatique de volumes, création de snapshots, stockage CNFS et restauration des données
Agent de nœud FlexVolume (DaemonSet) -- montage et démontage de volumes CSI-Plugin (DaemonSet) -- montage et démontage de volumes avec plusieurs types de volumes de disque
Paramètre kubelet enable-controller-attach-detach=true enable-controller-attach-detach=true
Référence Présentation de FlexVolume Stockage

Étape 1 : Désinstaller FlexVolume

  1. Connectez-vous à la console OpenAPI Explorer et appelez l'opération UnInstallClusterAddons. Définissez les paramètres suivants. Pour plus d'informations, consultez la rubrique Désinstaller des composants d'un cluster.

    Paramètre Valeur
    ClusterId ID de votre cluster. Vous pouvez le trouver dans l'onglet Basic Information de la page des détails du cluster.
    name flexvolume
  2. Supprimez les ressources Deployment alicloud-disk-controller et alicloud-nas-controller :

       kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller
  3. Vérifiez que FlexVolume est entièrement supprimé. Si la commande ne renvoie aucun résultat, tous les composants FlexVolume ont été supprimés.

       kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'
  4. Supprimez les ressources StorageClass FlexVolume. Elles utilisent le provisionneur alicloud/disk. Résultat attendu :

       kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssd
       storageclass.storage.k8s.io "alicloud-disk-available" deleted
       storageclass.storage.k8s.io "alicloud-disk-efficiency" deleted
       storageclass.storage.k8s.io "alicloud-disk-essd" deleted
       storageclass.storage.k8s.io "alicloud-disk-ssd" deleted

Étape 2 : Installer le plug-in CSI

Avant d'installer le plug-in CSI standard, vérifiez si le plug-in csi-compatible-controller existe dans le cluster.

Supprimer csi-compatible-controller (si installé)

Si le cluster possède déjà un plug-in CSI personnalisé, supprimez-le avant d'installer la version standard :

kubectl delete deploy csi-provisioner -n kube-system
kubectl delete ds csi-plugin -n kube-system
kubectl delete csidriver diskplugin.csi.alibabacloud.com nasplugin.csi.alibabacloud.com ossplugin.csi.alibabacloud.com
La suppression du plug-in CSI personnalisé n'affecte pas les pods existants. Toutefois, après avoir supprimé le plug-in CSI personnalisé, les pods du cluster ne peuvent pas être modifiés tant que le plug-in CSI standard n'est pas installé.

Installer le plug-in CSI standard

  1. Connectez-vous à la console OpenAPI Explorer et appelez l'opération InstallClusterAddons. Définissez les paramètres suivants. Pour plus d'informations, consultez la rubrique Installer un composant dans un cluster ACK.

    Paramètre Valeur
    ClusterId ID de votre cluster
    name csi-provisioner
    version La dernière version est automatiquement spécifiée. Pour plus d'informations sur les versions CSI, consultez la rubrique csi-provisioner.
  2. Vérifiez que le plug-in CSI est en cours d'exécution. Résultat attendu : Si le résultat précédent s'affiche, le plug-in CSI fonctionne comme prévu dans le cluster.

       kubectl get pods -n kube-system | grep csi
       csi-plugin-577mm                              4/4     Running   0          3d20h
       csi-plugin-k9mzt                              4/4     Running   0          41d
       csi-provisioner-6b58f46989-8wwl5              9/9     Running   0          41d
       csi-provisioner-6b58f46989-qzh8l              9/9     Running   0          6d20h

Étape 3 : Mettre à jour les configurations du pool de nœuds

Après l'installation du plug-in CSI, les configurations existantes du pool de nœuds ne sont pas mises à jour automatiquement. Déclenchez manuellement une mise à jour afin que les nouveaux nœuds ajoutés utilisent les paramètres kubelet corrects.

Important

Cette opération redémarre kubelet sur les nœuds concernés. Effectuez-la pendant les heures creuses. Terminez la mise à jour sur un pool de nœuds et vérifiez-la avant de mettre à jour le suivant.

Déclenchez la mise à jour en apportant une modification de configuration à chaque pool de nœuds, par exemple en ajoutant un nouveau type d'instance ou en modifiant le mot de passe de connexion. Le système régénère ainsi le script d'initialisation des nœuds en arrière-plan.

Vous pouvez également créer un nouveau pool de nœuds et réduire le nombre de nœuds de tous les pools d'origine, puis supprimer les anciens pools de nœuds. Si vous optez pour cette approche, ignorez les étapes suivantes et passez directement à l'Étape 4.
  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, recherchez votre cluster et cliquez sur son nom. Dans le volet de navigation de gauche, choisissez Nodes > Node Pools.

  3. Sur la page Node Pools, recherchez le pool de nœuds cible et cliquez sur Edit dans la colonne Actions.

  4. Dans la boîte de dialogue, modifiez une valeur de configuration (par exemple, ajoutez un type d'instance), puis cliquez sur Confirm. > Remarque : Cette modification déclenche une mise à jour en arrière-plan de la configuration du plug-in de volume. Une fois la modification effective, revenez aux paramètres d'origine si nécessaire.

  5. Répétez l'opération pour chaque pool de nœuds du cluster.

Étape 4 : Mettre à jour kubelet sur les nœuds existants

Déployez le DaemonSet suivant pour définir le paramètre kubelet --enable-controller-attach-detach sur true sur tous les nœuds existants. Une fois tous les nœuds mis à jour, supprimez le DaemonSet.

Important

Ce DaemonSet redémarre kubelet sur chaque nœud. Évaluez l'impact sur les charges de travail en cours d'exécution avant de l'appliquer.

kind: DaemonSet
apiVersion: apps/v1
metadata:
  name: kubelet-set
spec:
  selector:
    matchLabels:
      app: kubelet-set
  template:
    metadata:
      labels:
        app: kubelet-set
    spec:
      tolerations:
        - operator: "Exists"
      hostNetwork: true
      hostPID: true
      containers:
        - name: kubelet-set
          securityContext:
            privileged: true
            capabilities:
              add: ["SYS_ADMIN"]
            allowPrivilegeEscalation: true
          image: registry.cn-hangzhou.aliyuncs.com/acs/csi-plugin:v1.26.5-56d1e30-aliyun
          imagePullPolicy: "Always"
          env:
          - name: enableADController
            value: "true"
          command: ["sh", "-c"]
          args:
          - echo "Starting kubelet flag set to $enableADController";
            ifFlagTrueNum=`cat /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf | grep enable-controller-attach-detach=$enableADController | grep -v grep | wc -l`;
            echo "ifFlagTrueNum is $ifFlagTrueNum";
            if [ "$ifFlagTrueNum" = "0" ]; then
                curValue="true";
                if [ "$enableADController" = "true" ]; then
                    curValue="false";
                fi;
                sed -i "s/enable-controller-attach-detach=$curValue/enable-controller-attach-detach=$enableADController/" /host/etc/systemd/system/kubelet.service.d/10-kubeadm.conf;
                restartKubelet="true";
                echo "current value is $curValue, change to expect "$enableADController;
            fi;
            if [ "$restartKubelet" = "true" ]; then
                /nsenter --mount=/proc/1/ns/mnt systemctl daemon-reload;
                /nsenter --mount=/proc/1/ns/mnt service kubelet restart;
                echo "restart kubelet";
            fi;
            while true;
            do
                sleep 5;
            done;
          volumeMounts:
          - name: etc
            mountPath: /host/etc
      volumes:
        - name: etc
          hostPath:
            path: /etc

Une fois que tous les pods du DaemonSet atteignent l'état Running et que le paramètre kubelet est mis à jour, supprimez le DaemonSet :

kubectl delete ds kubelet-set

Étapes suivantes

Une fois la migration terminée, vérifiez que le plug-in CSI fonctionne correctement en créant un volume de disque approvisionné dynamiquement. Pour obtenir des instructions, consultez la rubrique Utiliser un volume de disque approvisionné dynamiquement.