Quando muitos pods compartilham um nó e cada um exige vários discos — cenário comum em cargas de trabalho de banco de dados, integração contínua (CI) e processamento em lote — a montagem serial padrão aumenta o tempo de inicialização dos pods. A montagem paralela de discos anexa os discos simultaneamente, reduzindo a latência de inicialização.
Pré-requisitos
Você possui um cluster ACK gerenciado executando Kubernetes 1.26 ou posterior, com csi-plugin e csi-provisioner na versão v1.30.4 ou superior.
Você instalou e configurou a Alibaba Cloud CLI.
Observações de uso
-
A montagem paralela é compatível apenas com discos que possuem números de série. Para mais informações sobre como consultar o número de série de um disco, consulte Query serial number.
Discos criados antes de 10 de junho de 2020 não possuem números de série reconhecíveis. Se você ativar a montagem paralela para esses discos, a montagem falhará.
Ao desmontar vários discos do mesmo nó, as operações de desmontagem ainda ocorrem no modo serial.
Após ativar a montagem paralela, os campos
Deviceretornados pela API (como ECS DescribeDisks) e o destino de montagem exibido no console podem estar imprecisos. Não confie nesse caminho de montagem em suas cargas de trabalho. Utilize o número de série do disco para determinar o caminho real de montagem.
Procedimento
Para ativar a montagem paralela de discos, utilize o script automatizado ou o procedimento manual abaixo.
Usar um script automatizado
-
Salve o script a seguir em um arquivo chamado enable_parallel_attach.sh.
-
Execute o script para montar discos no modo paralelo.
bash enable_parallel_attach.sh <Cluster ID>
Ativar o recurso manualmente
-
Adicione ECS Tags ao pool de nós do cluster. Defina a chave da tag como
supportConcurrencyAttache o valor comotrue. Certifique-se de adicionar a tag à nova instância ECS.Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em .
Na página Node Pools, localize o pool de nós a modificar e clique em Edit na coluna Actions.
Na parte inferior da página, localize a seção Advanced e adicione uma ECS Tags. Defina a chave como
supportConcurrencyAttache o valor comotrue.
Adicione uma tag às instâncias ECS de todos os nós existentes no cluster. Defina a chave como
supportConcurrencyAttache o valor comotrue. Para mais informações, consulte Add a custom tag.-
No painel de navegação à esquerda, clique em Components and Add-ons. Clique na aba Storage, localize o add-on
csi-provisioner, clique em Configuration no canto inferior direito do componente e defina o parâmetro FeatureGate comoDiskADController=true,DiskParallelAttach=true.NotaAo especificar
DiskADController=true, o csi-provisioner passa a executar as operaçõesattachedetachrelacionadas a discos. Ao especificarDiskParallelAttach=true, você ativa o recurso de montagem paralela de discos. Após configurar o csi-provisioner, defina o parâmetro FeatureGate do csi-plugin como
DiskADController=true.
Verificar o desempenho da montagem paralela de discos
Neste exemplo, cria-se pods com vários discos montados no mesmo nó para verificar a aceleração da inicialização após ativar a montagem paralela.
Os resultados de teste neste tópico são valores de referência. Os resultados reais podem variar conforme o ambiente.
Adicione um nó compatível com múltiplos discos a um cluster ACK. Por exemplo, uma instância
ecs.g7se.16xlargesuporta até 56 discos.-
Crie um arquivo de teste chamado
attach-stress.yamle copie o conteúdo a seguir para o arquivo. Substitua<YOUR-HOSTNAME>pelo nome real do nó. -
Execute o comando a seguir para confirmar que a aplicação inicia conforme esperado. Em seguida, escale a contagem de réplicas para 0 para preparar os testes de montagem em lote.
kubectl apply -f attach-stress.yaml kubectl rollout status sts attach-stress kubectl scale sts attach-stress --replicas 0Saída esperada:
storageclass.storage.k8s.io/alibabacloud-disk created statefulset.apps/attach-stress created partitioned roll out complete: 1 new pods have been updated... statefulset.apps/attach-stress scaled -
Execute os comandos a seguir para iniciar o teste de montagem em lote e medir o tempo de inicialização do pod:
NotaNeste caso, a montagem paralela está desativada para o cluster. Ajuste o número de pods para o teste com base no número máximo de discos compatíveis com o seu nó.
date && \ kubectl scale sts attach-stress --replicas 28 && \ kubectl rollout status sts attach-stress && \ dateSaída esperada:
Tuesday October 15 19:21:36 CST 2024 statefulset.apps/attach-stress scaled Waiting for 28 pods to be ready... Waiting for 27 pods to be ready... <Omitted...> Waiting for 3 pods to be ready... Waiting for 2 pods to be ready... Waiting for 1 pods to be ready... partitioned roll out complete: 28 new pods have been updated... Tuesday October 15 19:24:55 CST 2024A saída indica que são necessários mais de 3 minutos para iniciar todos os 28 pods quando a montagem paralela está desativada.
Ative a montagem paralela seguindo as instruções na seção Procedure.
-
Execute o comando a seguir para excluir os pods anteriores e preparar a próxima rodada de testes:
NotaMonitore os recursos
volumeattachmentsno cluster. Após a exclusão desses recursos, os discos serão desmontados. Esse processo leva alguns minutos.kubectl scale sts attach-stress --replicas 0 -
Execute novamente o comando a seguir para calcular o tempo necessário para iniciar os pods após ativar a montagem paralela. O tempo esperado é de aproximadamente 40 segundos, muito mais rápido que os 3 minutos observados com a montagem paralela desativada.
date && \ kubectl scale sts attach-stress --replicas 28 && \ kubectl rollout status sts attach-stress && \ dateSaída esperada:
Tuesday October 15 20:02:54 CST 2024 statefulset.apps/attach-stress scaled Waiting for 28 pods to be ready... Waiting for 27 pods to be ready... <Omitted...> Waiting for 3 pods to be ready... Waiting for 2 pods to be ready... Waiting for 1 pods to be ready... partitioned roll out complete: 28 new pods have been updated... Tuesday October 15 20:03:31 CST 2024
-
Execute o comando a seguir para excluir as aplicações de teste no cluster:
kubectl delete -f attach-stress.yaml