Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Migrer FlexVolume vers CSI pour les clusters sans données

Dernière mise à jour :Sep 15, 2026

Le plug-in de stockage FlexVolume est obsolète et n'est plus pris en charge pour les nouveaux clusters. Pour les clusters existants utilisant le plug-in FlexVolume, nous vous recommandons de migrer vers le plug-in Container Storage Interface (CSI). La migration consiste à désinstaller le plug-in FlexVolume, installer le plug-in CSI et mettre à jour les configurations des pools de nœuds et des nœuds existants. Cette rubrique décrit ce processus de migration pour les clusters ne contenant aucune donnée gérée par FlexVolume.

Comparaison des plug-ins

Le tableau suivant compare les plug-ins de stockage CSI et FlexVolume.

Plug-in

Composants

Paramètre Kubelet

Références

CSI

  • CSI-Provisioner (Deployment)

    Gère la création automatique de volumes et de snapshots. Prend en charge des fonctionnalités telles que la récupération des données après une suppression accidentelle et le stockage Container Network File System (CNFS).

  • CSI-Plugin (DaemonSet)

    Gère le montage et le démontage automatiques des volumes. Prend en charge plusieurs types de stockage.

Le plug-in nécessite un paramètre kubelet spécifique.

Définissez le paramètre kubelet enable-controller-attach-detach sur true.

Stockage

FlexVolume

  • Disk-Controller (Deployment)

    Gère la création automatique de volumes de disque.

  • Flexvolume (DaemonSet)

    Gère le montage et le démontage des volumes.

Le plug-in nécessite un paramètre kubelet spécifique.

Définissez le paramètre kubelet enable-controller-attach-detach sur false.

Présentation de FlexVolume

Cas d'utilisation

Le plug-in CSI est plus stable et plus efficace que le plug-in FlexVolume. Nous vous recommandons de migrer du plug-in FlexVolume vers le plug-in CSI si votre cluster répond à l'une des conditions suivantes :

  • Aucun volume n'a été monté dans le cluster à l'aide de FlexVolume.

  • Des volumes ont été précédemment montés à l'aide de FlexVolume, mais leurs données associées ont été supprimées.

Étape 1 : Désinstaller FlexVolume

  1. Connectez-vous à la console OpenAPI Explorer et appelez l'opération UnInstallClusterAddons pour désinstaller le plug-in FlexVolume.

    • ClusterId : ID de votre cluster. Vous trouverez l'ID du cluster sur la page Basic Information de votre cluster.

    • name : Flexvolume.

    Pour plus d'informations, consultez la rubrique Désinstaller les modules complémentaires du cluster.

  2. Supprimez les déploiements alicloud-disk-controller et alicloud-nas-controller.

    kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller
  3. Vérifiez que le plug-in FlexVolume est désinstallé.

    kubectl get pods -n kube-system | grep 'flexvolume\|alicloud-disk-controller\|alicloud-nas-controller'

    Si la commande ne renvoie aucune sortie, le plug-in FlexVolume est désinstallé.

  4. Supprimez les ressources StorageClass FlexVolume. Le provisioner de ces ressources est alicloud/disk.

    kubectl delete storageclass alicloud-disk-available alicloud-disk-efficiency alicloud-disk-essd alicloud-disk-ssd

    Sortie attendue :

    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

    La sortie indique que les StorageClasses sont supprimées.

Étape 2 : Installer CSI

  • Si votre cluster utilise le plug-in csi-compatible-controller, un plug-in CSI personnalisé est déjà installé. Ce plug-in n'est pas le plug-in CSI standard. Supprimez les composants CSI personnalisés en exécutant les commandes suivantes avant d'installer le plug-in CSI 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
    Remarque

    Ces opérations de suppression n'affectent pas les pods existants dans le cluster. Toutefois, après avoir supprimé les composants personnalisés et avant d'installer le plug-in CSI standard, n'apportez aucune modification aux pods.

  • Si le plug-in csi-compatible-controller n'est pas utilisé, appelez directement l'OpenAPI pour installer le plug-in CSI standard.

  1. Connectez-vous à la console OpenAPI Explorer et appelez l'opération InstallClusterAddons pour installer le plug-in CSI.

    • ClusterId : ID de votre cluster.

    • name : csi-provisioner.

    • version : Dernière version du plug-in CSI. Pour plus d'informations sur les versions de CSI, consultez la rubrique csi-provisioner.

    Pour plus d'informations, consultez la rubrique Installer les modules complémentaires du cluster.

  2. Vérifiez que le plug-in CSI fonctionne correctement.

    kubectl get pods -n kube-system | grep csi

    Sortie attendue :

    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

    La sortie indique que le plug-in CSI fonctionne comme prévu.

Étape 3 : Modifier les configurations du pool de nœuds

Les configurations du pool de nœuds dépendent des composants de stockage du cluster. Après l'installation des composants CSI standard, les configurations des pools de nœuds existants ne sont pas automatiquement mises à jour. Modifiez manuellement les configurations du pool de nœuds pour déclencher une mise à jour. Après une mise à jour réussie, le paramètre kubelet --enable-controller-attach-detach des nouveaux nœuds du pool de nœuds passe de false à true.

Important

La modification manuelle de la configuration d'un pool de nœuds redémarre le kubelet sur les nœuds de ce pool. Nous vous recommandons d'effectuer cette opération pendant les heures creuses. Après avoir confirmé qu'un pool de nœuds est mis à jour correctement, mettez à jour les autres pools de nœuds par étapes.

Pour déclencher la mise à jour, modifiez tous les pools de nœuds en ajoutant un type d'instance ou en changeant le mot de passe de connexion. Cette action met à jour le type de plug-in de stockage dans le backend, déclenche l'actualisation du script d'initialisation des nœuds et garantit que les nouveaux nœuds sont configurés avec les paramètres corrects.

Remarque

Vous pouvez également créer un nouveau pool de nœuds, puis réduire progressivement et supprimer les anciens pools. Si vous utilisez cette méthode, ignorez les étapes suivantes.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur 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 qui s'affiche, modifiez la configuration du type d'instance du pool de nœuds et cliquez sur OK.

    Remarque

    Cette modification déclenche uniquement une mise à jour du type de plug-in de stockage dans le backend. Une fois la mise à jour effective, vous pouvez annuler cette modification.

Étape 4 : Modifier les configurations des nœuds existants

Appliquez le fichier YAML suivant pour mettre à jour les paramètres kubelet afin de répondre aux exigences de CSI. Ce DaemonSet définit le paramètre --enable-controller-attach-detach sur true sur les nœuds existants. Une fois l'opération terminée, supprimez le DaemonSet.

Important

L'application du fichier YAML suivant redémarre le kubelet sur chaque nœud. Évaluez l'impact potentiel sur vos charges de travail avant de continuer.

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

É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 plus d'informations, consultez la rubrique Utiliser un volume de disque approvisionné dynamiquement.