Quando muitos pods compartilham um nó e cada um requer 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 em série 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ê tem um an ACK managed cluster executando o Kubernetes 1.26 ou posterior, com o csi-plugin e o csi-provisioner na versão v1.30.4 ou posterior.
Você instalou e configurou a Alibaba Cloud CLI.
Observações de uso
-
A montagem paralela é compatível apenas com discos que têm 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 têm 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 são executadas em série.
Após ativar a montagem paralela, os campos
Deviceretornados pela API (como o ECS DescribeDisks) e o destino de montagem exibido no console podem ficar imprecisos. Não dependa deste caminho de montagem em suas cargas de trabalho. Use o número de série do disco para determinar o caminho de montagem real.
Procedimento
Para ativar a montagem paralela de discos, use o script automatizado ou o procedimento manual a seguir.
Usar um script automatizado
-
Salve o script a seguir em um arquivo chamado enable_parallel_attach.sh.
-
Execute o script para montar os discos em paralelo.
bash enable_parallel_attach.sh <Cluster ID>
Ative o recurso manualmente
-
Adicione ECS Tags ao pool de nós do cluster. Defina a chave da tag como
supportConcurrencyAttache o valor da tag comotrue. Certifique-se de que a tag seja adicionada a uma nova instância ECS.Acesse o ACK console. 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, selecione o pool de nós, clique em Edit na coluna Actions e edite as configurações. Modifique os parâmetros conforme necessário.
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.NotaEspecifique
DiskADController=truepara que o csi-provisioner passe a executar as operações deattachedetachrelacionadas aos discos. EspecifiqueDiskParallelAttach=truepara que o recurso de montagem paralela de discos seja ativado. Configure o csi-provisioner e, em seguida, atualize o parâmetro FeatureGate do csi-plugin como
DiskADController=true.
Verifique o desempenho da montagem paralela de discos
Neste exemplo, crie 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 dos testes neste tópico servem apenas como referência. Os resultados reais podem variar de acordo com o seu ambiente.
Adicione um nó que suporte vários 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 ele. Substitua<YOUR-HOSTNAME>pelo nome real do nó. -
Execute o comando a seguir e confirme se o aplicativo é iniciado conforme o esperado. Em seguida, reduza 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 dos pods:
NotaNeste cenário, a montagem paralela está desativada no cluster. Ajuste o número de pods do teste com base no número máximo de discos suportados pelo 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 os 28 pods com a montagem paralela desativada.
Ative a montagem paralela conforme as instruções da seção Procedure.
-
Exclua os pods anteriores e prepare a próxima rodada de testes executando o comando a seguir:
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 o comando a seguir novamente 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 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
-
Exclua os aplicativos de teste do cluster executando o comando a seguir:
kubectl delete -f attach-stress.yaml