Defina o número esperado de nós em um pool de nós para expandir a capacidade em caso de aumento de tráfego ou reduzir a escala para diminuir custos.
O ACK oferece suporte ao dimensionamento automático de nós ou dimensionamento instantâneo de nós para ajustar os recursos dos nós conforme a carga de trabalho.
Como funciona
O campo Expected Nodes define a quantidade alvo de nós para um pool de nós. Após o envio da alteração, o ACK ajusta a contagem real de nós para atingir esse alvo e cria ou remove instâncias ECS conforme necessário.
Scale out — aumente o valor de Expected Nodes acima da contagem atual. O ACK provisiona instâncias ECS por meio do Auto Scaling, executa o script cloud-init em cada uma delas e as adiciona ao pool. Se a criação falhar, o ACK tenta novamente automaticamente. Os tipos de instância e as zonas dependem da política de dimensionamento do pool de nós.
Scale in — diminua o valor de Expected Nodes abaixo da contagem atual. Apenas instâncias ECS com pagamento conforme o uso são liberadas durante a redução de escala. O ciclo de vida do disco do sistema e dos discos de dados de um nó está vinculado ao próprio nó. Quando um nó é liberado durante a redução de escala, seus discos também são liberados. Todos os dados nesses discos são perdidos permanentemente e não podem ser recuperados. Para dados que exigem persistência, gerencie-os com um PersistentVolume (PV) e desacople o armazenamento do ciclo de vida do nó.
Quando a redução de escala é acionada pela alteração de Expected Nodes, o ACK remove os nós mesmo se a drenagem do nó falhar. Caso você tenha um requisito rigoroso de drenagem, remova o nó alvo manualmente. Consulte Remover um nó.
A ordem de remoção durante a redução de escala depende da política de dimensionamento:
|
Política de dimensionamento |
Ordem de remoção |
|
Prioridade |
Instâncias criadas recentemente são removidas primeiro. |
|
Balanceamento de distribuição |
As zonas são filtradas pela política; instâncias criadas recentemente são removidas primeiro para equilibrar as contagens entre as zonas. |
|
Otimização de custos |
As instâncias são removidas em ordem decrescente de preço da vCPU. |
Faturamento durante o scale-out
O faturamento baseia-se nas especificações reais das instâncias ECS criadas. Por exemplo, com dois tipos de instância, faturamento conforme o uso e a política de dimensionamento Priority:
Duas instâncias do Nó A são criadas na zona do vSwitch de primeira prioridade.
Se o estoque do Nó A for insuficiente, três instâncias do Nó B são criadas na zona do vSwitch de segunda prioridade.
Custo por uma hora = (preço unitário do Nó A × 2 × 1) + (preço unitário do Nó B × 3 × 1).
Pools de nós GPU
Ao adicionar instâncias das famílias de ECS Bare Metal Instance ebmgn7 ou ebmgn7e, o ACK redefine qualquer configuração de Multi-Instance GPU (MIG) retida nessas instâncias. Essa redefinição consome tempo e pode impedir que as instâncias ingressem no cluster.
Para solucionar falhas de ingresso, consulte O que devo fazer se falhar ao adicionar instâncias ECS Bare Metal?
Consulte Famílias de instâncias otimizadas para computação acelerada por GPU (séries gn, ebm e scc).
Pré-requisitos
Verifique se você tem:
Um cluster ACK com pelo menos um pool de nós
(Opcional, usuários RAM) A função AliyunOOSLifecycleHook4CSRole atribuída à sua conta Alibaba Cloud e a permissão AliyunRAMReadOnlyAccess anexada ao usuário RAM.
Dimensionar um pool de nós
Não execute kubectl delete node. Esse comando remove nós do Kubernetes sem liberar suas instâncias ECS e faz com que o pool de nós perca o controle da capacidade. Use o console ACK para dimensionar pools de nós.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster alvo. No painel de navegação à esquerda, escolha Nodes > Node Pools.
Localize o pool de nós a ser dimensionado e clique em Scale na coluna Actions.
-
(Opcional) Se o CloudOps Orchestration Service (OOS) ainda não tiver sido autorizado, clique em AliyunOOSLifecycleHook4CSRole para criar a função e concluir a autorização.
Se estiver usando um usuário RAM, garanta que a conta Alibaba Cloud possua a função AliyunOOSLifecycleHook4CSRole antes de anexar AliyunRAMReadOnlyAccess ao usuário RAM.
-
Defina o valor de Expected Nodes e confirme a alteração. A coluna Status alterna entre Updating, Scaling Out (ou Removing) e, em seguida, Active.
Quando o status exibir Scaling Out, o pool de nós estará sendo expandido. Ao retornar para Active, a expansão estará concluída.
Quando o status exibir Removing, o pool de nós estará sendo reduzido. Ao retornar para Active, a redução estará concluída.
ImportanteSe o grupo de segurança do cluster bloquear o acesso a
100.64.0.0/10, novos nós não conseguirão ingressar no cluster.
Para visualizar detalhes da tarefa de expansão, clique em no nome do pool de nós e abra a aba Scaling Activities.
Visualize o log operacional em um nó:
grep cloud-init /var/log/messages
Após um nó ingressar no pool, /var/log/messages é limpo e retém apenas entradas de falha de ingresso. Se um nó falhar ao ingressar, o log é sincronizado com o resultado da tarefa na aba Cluster Tasks.
Operações a evitar
As operações a seguir ignoram o mecanismo de contagem esperada e podem causar loops de reconciliação ou perda de dados.
| Operação | O que acontece | O que fazer em vez disso |
|---|---|---|
Excluir nós com kubectl delete node |
O ACK rastreia os nós esperados comparando com as instâncias ECS no grupo de dimensionamento, e não pela lista de nós do Kubernetes. A instância ECS continua em execução, mas o nó aparece como Unknown. | Clique em no nome do pool de nós, abra a aba Nodes e remova os nós. Selecione Release ECS Instance conforme necessário. Nós adicionados manualmente e nós por assinatura devem ser liberados no console ECS. |
| Liberar instâncias ECS diretamente pelo console ECS ou API | O pool de nós detecta a discrepância e cria novas instâncias ECS para restaurar a contagem esperada. | Use o console ACK para remover nós. Consulte Remover um nó. Nós adicionados manualmente e nós por assinatura exigem liberação manual no console ECS. |
| Remover instâncias ECS do grupo de dimensionamento no console Auto Scaling (sem alterar a contagem esperada) | O pool de nós detecta a alteração e cria instâncias de substituição. | Não modifique grupos de dimensionamento usados por pools de nós diretamente no console Auto Scaling. |
| Deixar instâncias ECS por assinatura expirarem | O pool de nós detecta a liberação e cria instâncias de substituição. | Remova ou renove instâncias por assinatura antes que expirem. Consulte Remover um nó e Renovar uma instância por assinatura. |
| Ativar verificações de integridade no grupo de dimensionamento no console Auto Scaling | Quando uma verificação de integridade identifica uma instância não íntegra (como suspensa), o Auto Scaling cria uma instância ECS de substituição. | As verificações de integridade estão desativadas por padrão para grupos de dimensionamento usados pelo ACK. Não modifique essas configurações. |
Solucionar falhas de dimensionamento
Se o dimensionamento falhar, clique em no nome do cluster na página Clusters, abra a aba Cluster Tasks e clique em View Cause para ver os detalhes do erro.
| Código de erro | Causa | Solução |
|---|---|---|
RecommendEmpty.InstanceTypeNoStock |
Estoque insuficiente de ECS na zona atual. | Modifique o pool de nós para adicionar vSwitches em zonas diferentes e configurar múltiplos tipos de instância. Consulte Verificar a escalabilidade de um pool de nós. |
NodepoolScaleFailed.FailedJoinCluster |
Falha dos nós ao ingressar no cluster ACK. | Faça login no nó e execute grep cloud-init /var/log/messages para verificar o erro. |
InvalidAccountStatus.NotEnoughBalance / InsufficientBalance.CreditPay / Account.Arrearage |
Saldo insuficiente na conta. | Recarregue sua conta. |
InvalidParameter.NotMatch (incompatibilidade de modo de inicialização) |
O tipo de instância não suporta o modo de inicialização (BIOS) da imagem do SO. | Selecione um tipo de instância diferente. Verifique o SO e o ID da imagem na aba Overview do pool de nós. Chame DescribeImageSupportInstanceTypes para consultar os tipos de instância suportados. |
QuotaExceed.ElasticQuota |
Cota de ECS excedida para o tipo de instância especificado na região atual. | Selecione um tipo de instância diferente, reduza as instâncias ECS existentes ou solicite um aumento de cota no Quota Center. |
InvalidResourceType.NotSupported |
O tipo de instância não é suportado ou está sem estoque na zona atual. | Chame DescribeAvailableResource para encontrar tipos de instância suportados na zona e, em seguida, atualize o pool de nós. |
InvalidImage.NotSupported |
A imagem do SO não suporta instâncias com segurança aprimorada. | Selecione um tipo de instância diferente. Consulte Criar uma instância confiável no console ECS para imagens suportadas. |
InvalidParameter.NotMatch (incompatibilidade de imagem vTPM) |
A imagem do SO exige um tipo de instância com vTPM ativado. | Selecione um tipo de instância diferente. Verifique o SO e o ID da imagem na aba Overview do pool de nós. |
QuotaExceeded.PrivateIpAddress |
O vSwitch atual não possui endereços IP privados disponíveis. | Adicione mais vSwitches ao pool de nós e tente novamente. |
InvalidParameter.KmsNotEnabled |
A chave do Key Management Service (KMS) está desativada. | Faça login no console KMS e ative a chave. |
InvalidInstanceType.NotSupported |
O tipo de instância não suporta a arquitetura da imagem do SO. | Selecione um tipo de instância diferente. Chame DescribeImageSupportInstanceTypes para consultar tipos de instância compatíveis. Consulte Imagens de SO para imagens suportadas pelo ACK. |
ApiServer.InternalError / Err.QueryEndpoints |
O servidor de API do cluster ACK está inacessível. | Verifique a acessibilidade do servidor de API. Consulte Solucionar problemas de acesso ao cluster no console ACK. |
RecommendEmpty.InstanceTypeNotAuthorized |
Sem permissão para usar o tipo de instância especificado. | Envie um ticket para solicitar permissões de ECS. |
RecommendEmpty.DiskTypeNoStock |
Estoque insuficiente de discos em nuvem na zona. | Adicione mais vSwitches ou selecione um tipo de disco diferente. |
InvalidParameter.KMSKeyId.KMSUnauthorized |
Sem permissão para acessar o KMS. | No console ECS, atribua a função AliyunECSDiskEncryptDefaultRole ao ECS. Consulte Permissões relacionadas à criptografia. |
InvalidParameter.Conflict |
O tipo de disco em nuvem não é compatível com o tipo de instância. | Selecione um tipo de instância ou disco diferente. |
NotSupportSnapshotEncrypted.DiskCategory |
A criptografia do disco do sistema requer um ESSD. | Selecione um ESSD. Para tipos de disco e criptografia, consulte Tipos de disco e criptografia. |
ScalingActivityInProgress |
O pool de nós já está sendo dimensionado. | Aguarde a conclusão da atividade de dimensionamento atual antes de tentar novamente. Não dimensione pools de nós diretamente no console Auto Scaling. |
Instance.StartInstanceFailed |
Falha ao iniciar instâncias ECS. | Tente novamente. Se o problema persistir, envie um ticket para a equipe de ECS. |
OperationDenied.NoStock |
O tipo de instância está sem estoque na zona especificada. | Selecione um tipo de instância diferente. Consulte Verificar a escalabilidade de um pool de nós. |
NodepoolScaleFailed.WaitForDesiredSizeTimeout |
A tarefa de expansão atingiu o tempo limite. | No console ACK, acesse Clusters > nome do cluster > Nodes > Node Pools, clique em no nome do pool de nós e abra a aba Scaling Activities para visualizar os detalhes da tarefa. |
ApiServer.TooManyRequests |
O servidor de API do Kubernetes limitou a solicitação. | Reduza a frequência de solicitações ou tente novamente mais tarde. |
NodepoolScaleFailed.PartialSuccess |
Alguns nós falharam na criação devido a estoque insuficiente. | Altere os tipos de instância configurados para o pool de nós. Consulte Verificar a escalabilidade de um pool de nós. Consulte Editar um pool de nós. |
Próximos passos
Remover um nó — operações e precauções para remover nós de um pool de nós.
O&M de pool de nós — atualização, reparo automático e correção de CVE de SO para pools de nós.
Melhores práticas para nós e pools de nós — conjuntos de implantação, pools de nós baseados em instâncias preemptíveis e muito mais.