Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Migrar FlexVolume para CSI em clusters sem dados

Última atualização: Sep 15, 2026

O plug-in de armazenamento FlexVolume foi descontinuado e não tem mais suporte em novos clusters. Para clusters existentes que utilizam o plug-in FlexVolume, recomendamos a migração para o plug-in Container Storage Interface (CSI). A migração consiste em desinstalar o plug-in FlexVolume, instale o plug-in CSI e atualize as configurações do node pool e dos nós existentes. Este tópico descreve esse processo de migração para clusters sem dados gerenciados pelo FlexVolume.

Comparação entre plug-ins

A tabela a seguir compara os plug-ins de armazenamento CSI e FlexVolume.

Plug-in

Componentes

Parâmetro do kubelet

Referências

CSI

  • CSI-Provisioner (Deployment)

    Gerencia a criação automática de volumes e snapshots. Oferece suporte a recursos como recuperação de dados após exclusão acidental e armazenamento Container Network File System (CNFS).

  • CSI-Plugin (DaemonSet)

    Gerencia a montagem e desmontagem automática de volumes. Compatível com diversos tipos de armazenamento.

Este plug-in exige um parâmetro específico do kubelet.

Defina o parâmetro do kubelet enable-controller-attach-detach como true.

Storage

FlexVolume

  • Disk-Controller (Deployment)

    Gerencia a criação automática de volumes de disco.

  • Flexvolume (DaemonSet)

    Gerencia a montagem e desmontagem de volumes.

Este plug-in exige um parâmetro específico do kubelet.

Defina o parâmetro do kubelet enable-controller-attach-detach como false.

FlexVolume overview

Casos de uso

O plug-in CSI oferece maior estabilidade e eficiência que o FlexVolume. Recomendamos migrar do plug-in FlexVolume para o CSI caso seu cluster atenda a uma das seguintes condições:

  • Nenhum volume foi montado no cluster usando FlexVolume.

  • Volumes foram montados anteriormente com FlexVolume, mas os dados associados já foram excluídos.

Etapa 1: Desinstalar o FlexVolume

  1. Faça login no console do OpenAPI Explorer e chame a operação UnInstallClusterAddons para desinstalar o plug-in FlexVolume.

    • ClusterId: ID do seu cluster. Você encontra o ID do cluster na página Basic Information do cluster.

    • name: Flexvolume.

    Para mais informações, consulte Uninstall cluster add-ons.

  2. Exclua os Deployments alicloud-disk-controller e alicloud-nas-controller.

    kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller
  3. Verifique se o plug-in FlexVolume foi desinstalado.

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

    Se o comando não retornar nenhuma saída, o plug-in FlexVolume foi desinstalado.

  4. Exclua os recursos StorageClass do FlexVolume. O provisionador desses recursos é alicloud/disk.

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

    Saída esperada:

    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

    A saída indica que as StorageClasses foram excluídas.

Etapa 2: Instalar o CSI

  • Caso seu cluster utilize o plug-in csi-compatible-controller, um plug-in CSI personalizado já está instalado. Esse não é o plug-in CSI padrão. Exclua os componentes personalizados do CSI executando os comandos abaixo antes de instale o plug-in CSI padrão.

    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
    Nota

    Essas operações de exclusão não afetam os pods existentes no cluster. No entanto, após excluir os componentes personalizados e antes de instale o plug-in CSI padrão, não faça alterações em nenhum pod.

  • Se o plug-in csi-compatible-controller não estiver em uso, chame diretamente a OpenAPI para instale o plug-in CSI padrão.

  1. Faça login no console do OpenAPI Explorer e chame a operação InstallClusterAddons para instale o plug-in CSI.

    • ClusterId: ID do seu cluster.

    • name: csi-provisioner.

    • version: Versão mais recente do plug-in CSI. Para mais informações sobre as versões do CSI, consulte csi-provisioner.

    Para mais informações, consulte Install cluster add-ons.

  2. Verifique se o plug-in CSI está em execução corretamente.

    kubectl get pods -n kube-system | grep csi

    Saída esperada:

    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

    A saída confirma que o plug-in CSI está funcionando conforme esperado.

Etapa 3: Modifique as configurações do node pool

As configurações do node pool dependem dos componentes de armazenamento do cluster. Após instale os componentes padrão do CSI, as configurações dos node pools existentes não são atualizadas automaticamente. Modifique manualmente as configurações do node pool para acionar uma atualização. Após a atualização bem-sucedida, o parâmetro do kubelet --enable-controller-attach-detach para novos nós no node pool será alterado de false para true.

Importante

A modificação manual da configuração de um node pool reinicia o kubelet nos nós desse pool. Recomendamos realizar essa operação fora dos horários de pico. Após confirmar que um node pool foi atualizado corretamente, atualize os demais node pools em etapas.

Para acionar a atualização, modifique todos os node pools adicionando um tipo de instância ou alterando a senha de login. Essa ação atualiza o tipo de plug-in de armazenamento no backend, dispara uma atualização do script de inicialização do nó e garante que os novos nós sejam configurados com os parâmetros corretos.

Nota

Como alternativa, crie um novo node pool e depois reduza gradualmente a escala e exclua os pools antigos. Se optar por esse método, ignore as etapas a seguir.

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Nodes > Node Pools.

  3. Na página Node Pools, localize o node pool desejado e clique em Edit na coluna Actions.

  4. Na caixa de diálogo exibida, modifique a configuração do tipo de instância do node pool e clique em OK.

    Nota

    Essa modificação serve apenas para acionar a atualização do tipo de plug-in de armazenamento no backend. Depois que a atualização entrar em vigor, reverta essa alteração.

Etapa 4: Modifique as configurações dos nós existentes

Aplique o YAML a seguir para atualize os parâmetros do kubelet e atender aos requisitos do CSI. Este DaemonSet define o parâmetro --enable-controller-attach-detach como true nos nós existentes. Após concluir a operação, exclua o DaemonSet.

Importante

A aplicação do YAML a seguir reinicia o kubelet em cada nó. Avalie o possível impacto nas suas cargas de trabalho antes de prosseguir.

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

Próximas etapas

Após concluir a migração, verifique se o plug-in CSI está funcionando corretamente criando um volume de disco provisionado dinamicamente. Para mais informações, consulte Use a dynamically provisioned disk volume.