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 |
|
Este plug-in exige um parâmetro específico do kubelet. Defina o parâmetro do kubelet |
|
|
FlexVolume |
|
Este plug-in exige um parâmetro específico do kubelet. Defina o parâmetro do kubelet |
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
-
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.
-
Exclua os Deployments alicloud-disk-controller e alicloud-nas-controller.
kubectl delete deploy -n kube-system alicloud-disk-controller alicloud-nas-controller -
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.
-
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-ssdSaí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" deletedA 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.comNotaEssas 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.
-
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.
-
Verifique se o plug-in CSI está em execução corretamente.
kubectl get pods -n kube-system | grep csiSaí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 6d20hA 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.
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.
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.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Node Pools, localize o node pool desejado e clique em Edit na coluna Actions.
-
Na caixa de diálogo exibida, modifique a configuração do tipo de instância do node pool e clique em OK.
NotaEssa 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.
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.