Defina o número esperado de nós em um node pool para aumentar a capacidade devido ao crescimento de tráfego ou reduzi-la para cortar 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 node pool. Após o envio da alteração, o ACK ajusta o número real de nós para atingir essa meta 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 node pool.
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 o scale-in. 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 o scale-in, seus discos também são liberados. Todos os dados neles contidos são perdidos permanentemente e não podem ser recuperados. Para dados que exigem persistência, gerencie-os com um PersistentVolume (PV) para desacoplar o armazenamento do ciclo de vida do nó.
Quando o scale-in é acionado pela alteração de Expected Nodes, o ACK remove os nós mesmo que o drain do nó falhe. Caso você tenha um requisito rigoroso de drain, remova o nó alvo manualmente. Consulte Remover um nó.
A ordem de remoção durante o scale-in depende da política de dimensionamento:
|
Política de dimensionamento |
Ordem de remoção |
|
Priority |
Instâncias criadas recentemente são removidas primeiro. |
|
Distribution balancing |
As zonas são filtradas pela política; instâncias criadas recentemente são removidas primeiro para equilibrar as contagens entre as zonas. |
|
Cost optimization |
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 por pagamento 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).
Node pools de 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 What do I do if I fail to add ECS Bare Metal instances?
Consulte Famílias de instâncias otimizadas para computação acelerada por GPU (séries gn, ebm e scc).
Pré-requisitos
Certifique-se de ter:
Um cluster ACK com pelo menos um node pool
(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 node pool
Não execute kubectl delete node. Esse comando remove nós do Kubernetes sem liberar as instâncias ECS correspondentes, fazendo com que o node pool perca o controle da capacidade. Use o console ACK para dimensionar node pools.
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Nodes > Node Pools.
Localize o node pool 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 passará por Updating, Scaling Out (ou Removing) e, em seguida, Active.
Quando o status exibir Scaling Out, o node pool estará sendo expandido. Ao retornar para Active, o scale-out estará concluído.
Quando o status exibir Removing, o node pool estará sendo reduzido. Ao retornar para Active, o scale-in estará concluído.
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 scale-out, clique em no nome do node pool 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 com base nas instâncias ECS do grupo de dimensionamento, e não na 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 node pool, 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 ECS console. |
| Liberar instâncias ECS diretamente pelo console ECS ou API | O node pool 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 ECS console. |
| Remover instâncias ECS do grupo de dimensionamento no console Auto Scaling (sem alterar a contagem esperada) | O node pool detecta a mudança e cria instâncias de substituição. | Não modifique grupos de dimensionamento usados por node pools diretamente no console Auto Scaling. |
| Deixar instâncias ECS por assinatura expirarem | O node pool detecta a liberação e cria instâncias de substituição. | Remova ou renove instâncias por assinatura antes que elas 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 saudável (como suspensa), o Auto Scaling cria uma instância ECS de substituição. | As verificações de integridade ficam 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. | Modify the node pool para adicionar vSwitches em zonas diferentes e configurar múltiplos tipos de instância. Consulte Check the scalability of a node pool. |
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 node pool. 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á fora de estoque na zona atual. | Chame DescribeAvailableResource para encontrar tipos de instância suportados na zona e, em seguida, atualize o node pool. |
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 ver as imagens suportadas. |
InvalidParameter.NotMatch (incompatibilidade de imagem vTPM) |
A imagem do SO exige um tipo de instância habilitado para vTPM. | Selecione um tipo de instância diferente. Verifique o SO e o ID da imagem na aba Overview do node pool. |
QuotaExceeded.PrivateIpAddress |
O vSwitch atual não possui endereços IP privados disponíveis. | Adicione mais vSwitches ao node pool 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 OS images 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. | Submit a 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 ECS console, atribua a função AliyunECSDiskEncryptDefaultRole ao ECS. Consulte Encryption-related permissions. |
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 Disk types and encryption. |
ScalingActivityInProgress |
O node pool já está sendo dimensionado. | Aguarde a conclusão da atividade de dimensionamento atual antes de tentar novamente. Não dimensione node pools diretamente no console Auto Scaling. |
Instance.StartInstanceFailed |
Falha ao iniciar instâncias ECS. | Tente novamente. Se o problema persistir, submit a ticket para a equipe do ECS. |
OperationDenied.NoStock |
O tipo de instância está fora de estoque na zona especificada. | Selecione um tipo de instância diferente. Consulte Check the scalability of a node pool. |
NodepoolScaleFailed.WaitForDesiredSizeTimeout |
A tarefa de scale-out atingiu o tempo limite. | No console ACK, acesse Clusters > nome do cluster > Nodes > Node Pools, clique em no nome do node pool 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 ao serem criados devido a estoque insuficiente. | Altere os tipos de instância configurados para o node pool. Consulte Check the scalability of a node pool. Consulte Edit a node pool. |
Próximos passos
Remover um nó — operações e precauções para remover nós de um node pool.
O&M de node pool — atualização, reparo automático e aplicação de patches CVE de SO para node pools.
Melhores práticas para nós e node pools — conjuntos de implantação, node pools baseados em instâncias preemptíveis e muito mais.