Escalar clusters de utilizadores

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

  1. No diretório do anthos-aws, use anthos-gke para mudar o contexto para o seu serviço de gestão.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. 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 de spec.minNodeCount e spec.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 para 10 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
      ...
    
  3. Em seguida, aplique o YAML para redimensionar o conjunto de nós.

    env HTTPS_PROXY=http://localhost:8118 \
        kubectl apply -f cluster-0.yaml
    
  4. O recurso AWSNodePool vai transitar para um estado Resizing. Quando o AWSNodePool conclui o dimensionamento, passa para o estado Provisioned.

    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.

  1. 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
    
  2. 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 
    
  3. 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.