Para dimensionar as suas cargas de trabalho no GKE on AWS, pode configurar os seus AWSNodePools para serem dimensionados automaticamente ou criar e eliminar manualmente AWSNodePools para aumentar ou diminuir a escala.
Redimensionador automático de clusters
O GKE na AWS implementa o redimensionador automático de clusters do Kubernetes. Quando a procura nos seus nós é elevada, o Cluster Autoscaler adiciona nós ao conjunto de nós. Quando a procura é baixa, o escalador automático de clusters reduz a escala até um tamanho mínimo que designa. Isto pode aumentar a disponibilidade das suas cargas de trabalho quando precisar, ao mesmo tempo que controla os custos.
Vista geral
O redimensionador automático de clusters redimensiona automaticamente o número de nós num determinado node pool com base nas exigências das suas cargas de trabalho. Não precisa de adicionar nem remover nós manualmente, nem de aprovisionar em excesso os seus conjuntos de nós. Em vez disso, especifica um tamanho mínimo e máximo para o conjunto de nós, e o cluster é dimensionado automaticamente.
Se os recursos forem eliminados ou movidos quando dimensionar automaticamente o cluster, as cargas de trabalho podem sofrer interrupções temporárias. Por exemplo, se a sua carga de trabalho consistir numa única réplica, o pod dessa réplica pode ser reagendado para um nó diferente se o nó atual for eliminado. Antes de ativar o redimensionador automático de clusters no seu AWSNodePool, crie as suas cargas de trabalho para tolerar potenciais interrupções ou certifique-se de que os pods críticos não são interrompidos.
Como funciona o redimensionador automático de clusters
O redimensionador automático de clusters funciona por node pool. Quando cria um node pool, especifica um tamanho mínimo e máximo para o node pool no recurso do Kubernetes AWSNodePool.
Pode desativar o redimensionador automático de clusters definindo spec.minNodeCount
como igual a spec.maxNodeCount
nos seus AWSNodePools.
O redimensionador automático de cluster aumenta ou diminui automaticamente o tamanho do conjunto de nós com base nos pedidos de recursos (em vez da utilização real de recursos) dos pods em execução nos nós desse conjunto de nós. Verifica periodicamente o estado dos pods e dos nós, e toma medidas:
Se os pods não forem agendáveis porque não existem nós suficientes no node pool, o redimensionador automático de clusters adiciona nós até ao tamanho máximo do node pool. Se os nós forem pouco usados e todos os pods puderem ser agendados mesmo com menos nós no conjunto de nós, o redimensionador automático de cluster remove nós até ao tamanho mínimo do conjunto de nós. Se não for possível esvaziar o nó corretamente após um período de limite de tempo (10 minutos), o nó é terminado à força. O período de tolerância não é configurável.
Se os seus pods tiverem pedido poucos recursos (por exemplo, se as predefinições forem insuficientes), o redimensionador automático de cluster não corrige a situação. Pode ajudar a garantir que o redimensionador automático de clusters funciona com a maior precisão possível criando pedidos de recursos adequados para todas as suas cargas de trabalho.
Critérios de funcionamento
O redimensionador automático de cluster faz as seguintes suposições ao redimensionar um conjunto de nós:
Todos os pods replicados podem ser reiniciados noutro nó, o que pode causar uma breve interrupção. Se os seus serviços não tolerarem interrupções, não recomendamos a utilização do Cluster Autoscaler.
Todos os nós num único conjunto de nós têm o mesmo conjunto de etiquetas.
Se tiver AWSNodePools com diferentes tipos de instâncias, o Cluster Autoscaler considera o custo relativo do lançamento de novos nós e tenta expandir o conjunto de nós menos dispendioso.
As etiquetas adicionadas manualmente após a criação inicial do cluster ou do conjunto de nós não são monitorizadas. Os nós criados pelo Cluster Autoscaler são atribuídos a etiquetas especificadas com --node-labels no momento da criação do node pool.
Redimensione um node pool
Um AWSNodePool inclui os campos minNodeCount
e maxNodeCount
. Estes campos declaram um número mínimo e máximo de nós de trabalho no conjunto. Pode editar estes valores antes ou depois de criar o AWSNodePool.
Antes de começar
Aprovisione um cluster seguindo as instruções em
Criar um cluster de utilizadores. Ter o ficheiro YAML (por exemplo, cluster-0.yaml
) que cria o cluster disponível.
Ativar o ajuste de escala automático do node pool
No diretório do
anthos-aws
, useanthos-gke
para mudar o contexto para o seu serviço de gestão.cd anthos-aws anthos-gke aws management get-credentials
Para ativar o redimensionador automático de clusters, edite o manifesto do seu AWSNodePool. Edite o ficheiro
cluster-0.yaml
e procure a secção AWSNodePool. Altere os valores despec.minNodeCount
espec.maxNodeCount
.O exemplo abaixo mantém o tamanho mínimo deste node pool em
3
nós, mas permite que o Cluster Autoscaler aumente o respetivo tamanho para10
nós.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 conjunto de nós.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
O recurso AWSNodePool vai transitar para um estado
Resizing
. Quando o AWSNodePool conclui o dimensionamento, passa para o estadoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
O resultado mostra que o AWSNodePool é
Resizing
. As operações de redimensionamento demoram vários minutos a concluir.NAME CLUSTER STATE AGE VERSION cluster-0-pool-0 cluster-0 Resizing 3h 1.25.5-gke.2100
Criar manualmente um novo AWSNodePool
Também pode dimensionar o cluster criando novos AWSNodePools. Quando cria um novo AWSNodePool, também pode aumentar ou diminuir os tamanhos das instâncias.
Pode obter o manifesto de configuração de um AWSNodePool existente 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 secções que não estão presentes no exemplo seguinte. Guarde o ficheiro.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 gestão.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
O que se segue?
Implemente um serviço suportado pelo Ingress.
Para ver opções adicionais, leia a documentação de referência sobre o AWSNodePool.