Para escalonar suas cargas de trabalho no GKE na AWS, configure o AWSNodePools para escalonar horizontalmente de modo automático ou crie e exclua manualmente AWSNodePools para escalonar verticalmente.
Escalonador automático de cluster
O GKE na AWS implementa o escalonador automático de cluster do Kubernetes. Quando a demanda nos nós é alta, o escalonador automático de cluster adiciona nós ao pool de nós. Quando ela é baixa, o escalonador automático do cluster volta para um tamanho mínimo designado por você. Isso pode aumentar a disponibilidade das cargas de trabalho quando você precisar delas e, ao mesmo tempo, controlar os custos.
Visão geral
O escalonador automático de cluster redimensiona automaticamente o número de nós em um determinado pool de nós, com base nas demandas das cargas de trabalho. Não é preciso adicionar ou remover manualmente nós, ou provisionar os pools de nós em excesso. Em vez disso, especifique um tamanho mínimo e máximo para o pool de nós, e o cluster será escalonado automaticamente.
Se os recursos forem excluídos ou movidos durante o escalonamento automático do cluster, as cargas de trabalho poderão sofrer interrupções temporárias. Por exemplo, se a carga de trabalho consistir de uma única réplica, o pod dessa réplica poderá ser reprogramado em um nó diferente caso o nó atual seja excluído. Antes de ativar o escalonador automático de cluster no AWSNodePool, crie as cargas de trabalho para tolerar possíveis interrupções ou garantir que os pods críticos não sejam interrompidos.
Como funciona o escalonador automático de clusters
O escalonador automático de cluster funciona por pool de nós. Ao criar um pool de nós, você especifica um tamanho mínimo e máximo para o pool de nós no recurso AWSNodePool do Kubernetes.
Desative o escalonador automático de cluster definindo spec.minNodeCount
como igual a spec.maxNodeCount
no AWSNodePools.
O escalonador automático de cluster aumenta ou diminui o tamanho do pool de nós automaticamente com base nas solicitações de recursos dos usuários em execução nos nós do conjunto de nós, em vez da utilização real de recursos. Ele verifica periodicamente o status de pods e nós e toma as seguintes medidas:
Se os pods forem não-modificáveis porque não há nós suficientes no pool de nós, o escalonador automático de cluster acrescentará nós até o tamanho máximo do pool de nós. Se os nós forem subutilizados e todos os pods puderem ser programados mesmo com menos nós no pool de nós, o escalonador automático de cluster removerá nós até o tamanho mínimo do pool de nós. Se não for possível esvaziar o nó após um período de tempo limite (10 minutos), ele será forçado a ser encerrado. O período de carência não é configurável.
Se os pods solicitarem poucos recursos (por exemplo, se os padrões forem insuficientes), o escalonador automático de cluster não corrigirá a situação. Para garantir que o escalonador automático de cluster trabalhe com a maior precisão possível, crie solicitações de recursos adequadas para todas as cargas de trabalho.
Critérios de operação
O escalonador automático de clusters parte dos seguintes pressupostos ao redimensionar um pool de nós:
Todos os pods replicados podem ser reiniciados em outro nó, o que pode causar uma breve interrupção. Se seus serviços não tolerarem interrupções, não recomendamos o uso do escalonador automático de cluster.
Todos os nós em um único pool têm o mesmo conjunto de rótulos.
Se você tiver AWSNodePools com diferentes tipos de instância, o escalonador automático de cluster considerará o custo relativo do lançamento de novos nós e tentará expandir o pool de nós mais barato.
Os rótulos adicionados manualmente após a criação inicial do cluster ou do pool de nós não são rastreados. Os nós criados pelo escalonador automático de cluster são especificados por rótulos atribuídos com --node-labels no momento da criação do pool de nós.
Redimensionar um pool de nós
Um AWSNodePool inclui
os campos minNodeCount
e maxNodeCount
. Esses campos declaram um número mínimo e
máximo de nós de trabalho no pool. É possível editar esses valores antes ou
depois da criação do AWSNodePool.
Antes de começar
Provisione um cluster usando as instruções em
Como criar um cluster de usuário. Tenha o
arquivo YAML (por exemplo, cluster-0.yaml
) que cria o cluster disponível.
Como ativar o escalonamento automático de pools de nós
No diretório
anthos-aws
, useanthos-gke
para alternar o contexto para o serviço de gerenciamento.cd anthos-aws anthos-gke aws management get-credentials
Para ativar o escalonador automático de cluster, edite o manifesto para seu AWSNodePool. Edite o arquivo
cluster-0.yaml
e encontre a seção AWSNodePool. Altere os valores despec.minNodeCount
espec.maxNodeCount
.O exemplo abaixo mantém o tamanho mínimo desse pool de nós em nós
3
, mas permite que o escalonador automático de cluster aumente o tamanho para nós10
.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: cluster-0-pool-0 spec: clusterName: cluster-0 version: 1.25.5-gke.2100 minNodeCount: 3 maxNodeCount: 10 ...
Em seguida, aplique o YAML para redimensionar o pool de nós.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
O recurso AWSNodePool será transferido para o estado
Resizing
. Quando o AWSNodePool conclui o escalonamento, ele passa para o estadoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
A saída mostra que o AWSNodePool é
Resizing
. As operações de redimensionamento levam vários minutos para serem concluídas.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Como criar um novo AWSNodePool manualmente
Também é possível escalonar o cluster criando novos AWSNodePools. Ao criar um novo AWSNodePool, também é possível aumentar ou diminuir os tamanhos de instância.
É possível recuperar o manifesto de configuração de um AWSNodePool atual com
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get awsnodepool cluster-0-pool-0 -o yaml > new_nodepool.yaml
Edite
new_nodepool.yaml
e remova as seções que não estão presentes no exemplo a seguir. Salve o arquivo.apiVersion: multicloud.cluster.gke.io/v1 kind: AWSNodePool metadata: name: NODE_POOL_NAME spec: clusterName: AWSCLUSTER_NAME version: CLUSTER_VERSION # latest version is 1.25.5-gke.2100 region: AWS_REGION subnetID: AWS_SUBNET_ID minNodeCount: MINIMUM_NODE_COUNT maxNodeCount: MAXIMUM_NODE_COUNT maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT instanceType: AWS_NODE_TYPE keyName: KMS_KEY_PAIR_NAME iamInstanceProfile: NODE_IAM_PROFILE proxySecretName: PROXY_SECRET_NAME rootVolume: sizeGiB: ROOT_VOLUME_SIZE volumeType: VOLUME_TYPE # Optional iops: IOPS # Optional kmsKeyARN: NODE_VOLUME_KEY # Optional
Para criar um novo AWSNodePool, aplique o manifesto ao cluster de gerenciamento.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
A seguir
Implante um serviço apoiado pelo Ingress.
Para ver outras opções, leia a documentação de referência em AWSNodePool.