Para dimensionar suas cargas de trabalho no GKE na AWS, você pode configurar seus AWSNodePools para dimensionar automaticamente ou criar e excluir manualmente AWSNodePools para dimensionar para cima ou para baixo.
Autoescalador de cluster
O GKE na AWS implementa o Kubernetes Cluster Autoscaler . Quando a demanda nos seus nós é alta, o Cluster Autoscaler adiciona nós ao pool de nós. Quando a demanda é baixa, o Cluster Autoscaler reduz o tamanho para um tamanho mínimo definido por você. Isso pode aumentar a disponibilidade das suas cargas de trabalho quando você precisar, controlando os custos.
Visão geral
O Cluster Autoscaler redimensiona automaticamente o número de nós em um determinado pool de nós, com base nas demandas das suas cargas de trabalho. Você não precisa adicionar ou remover nós manualmente, nem provisionar demais seus pools de nós. Em vez disso, você especifica um tamanho mínimo e máximo para o pool de nós, e o cluster é dimensionado automaticamente.
Se recursos forem excluídos ou movidos durante o dimensionamento automático do cluster, suas cargas de trabalho poderão sofrer interrupções temporárias. Por exemplo, se sua carga de trabalho consistir em uma única réplica, o Pod dessa réplica poderá ser reprogramado para um nó diferente se o nó atual for excluído. Antes de habilitar o Cluster Autoscaler no seu AWSNodePool, projete suas cargas de trabalho para tolerar possíveis interrupções ou garantir que Pods críticos não sejam interrompidos.
Como funciona o Cluster Autoscaler
O Cluster Autoscaler funciona por pool de nós. Ao criar um pool de nós, você especifica um tamanho mínimo e máximo para ele no recurso AWSNodePool do Kubernetes.
Você pode desabilitar o Cluster Autoscaler definindo spec.minNodeCount
como igual spec.maxNodeCount
em seus AWSNodePools.
O Cluster Autoscaler aumenta ou diminui o tamanho do pool de nós automaticamente, com base nas solicitações de recursos (em vez da utilização real dos recursos) dos pods em execução nos nós desse pool. Ele verifica periodicamente o status dos pods e nós e toma as seguintes medidas:
Se os Pods não puderem ser agendados por falta de nós no pool de nós, o Cluster Autoscaler adicionará nós até o tamanho máximo do pool de nós. Se os nós estiverem subutilizados e todos os Pods puderem ser agendados mesmo com menos nós no pool de nós, o Cluster Autoscaler removerá os nós até o tamanho mínimo do pool. Se o nó não puder ser esvaziado normalmente após um período de tempo limite (10 minutos), ele será encerrado à força. O período de carência não é configurável.
Se os seus Pods solicitarem poucos recursos (por exemplo, se os padrões forem insuficientes), o Cluster Autoscaler não corrigirá a situação. Você pode ajudar a garantir que o Cluster Autoscaler funcione com a maior precisão possível criando solicitações de recursos adequadas para todas as suas cargas de trabalho.
Critérios Operacionais
O Cluster Autoscaler faz as seguintes suposições ao redimensionar um pool de nós:
Todos os Pods replicados podem ser reiniciados em outro nó, possivelmente causando uma breve interrupção. Se os seus serviços não toleram interrupções, não recomendamos o uso do Cluster Autoscaler.
Todos os nós em um único pool de nós têm o mesmo conjunto de rótulos.
Se você tiver AWSNodePools com diferentes tipos de instância, o Cluster Autoscaler considerará o custo relativo de inicialização de novos nós e tentará expandir o pool de nós mais barato.
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 Cluster Autoscaler recebem rótulos especificados 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. Você pode editar esses valores antes ou depois da criação do AWSNodePool.
Antes de começar
Provisione um cluster seguindo as instruções em Criação de um cluster de usuário . Tenha disponível o arquivo YAML (por exemplo, cluster-0.yaml
) que cria o cluster.
Habilitando o dimensionamento automático do pool de nós
No seu diretório
anthos-aws
, useanthos-gke
para alternar o contexto para seu serviço de gerenciamento.cd anthos-aws anthos-gke aws management get-credentials
Para habilitar o Cluster Autoscaler, edite o manifesto do seu AWSNodePool. Edite o arquivo
cluster-0.yaml
e localize a seção AWSNodePool. Altere os valores despec.minNodeCount
espec.maxNodeCount
.O exemplo abaixo mantém o tamanho mínimo deste pool de nós em
3
nós, mas permite que o Cluster Autoscaler aumente seu 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 pool de nós.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
O recurso AWSNodePool passará para o estado
Resizing
. Quando o AWSNodePool concluir o escalonamento, ele passará para o estadoProvisioned
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get AWSNodePools
A saída mostra que o AWSNodePool está
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
Criando manualmente um novo AWSNodePool
Você também pode escalar seu cluster criando novos AWSNodePools. Ao criar um novo AWSNodePool, você também pode aumentar ou diminuir o tamanho das instâncias .
Você pode recuperar 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 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 seu cluster de gerenciamento.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f new_nodepool.yaml
O que vem a seguir
Implante um serviço suportado pelo Ingress .
Para ver opções adicionais, leia a documentação de referência em AWSNodePool .