Ative o dimensionamento automático do cluster

Este documento descreve o dimensionamento automático para um cluster de utilizadores no Google Distributed Cloud.

A escala automática de clusters aumenta ou diminui o número de nós num node pool com base nas exigências das suas cargas de trabalho.

Antes de começar

Leia acerca das limitações do dimensionamento automático de clusters.

O redimensionador automático de clusters faz os seguintes pressupostos:

  • 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 escalador automático de clusters.

  • Os utilizadores ou os administradores não gerem manualmente os nós. Se a escalabilidade automática estiver ativada para um conjunto de nós, não pode substituir o campo replicas do conjunto de nós.

  • Todos os nós num único conjunto de nós têm o mesmo conjunto de etiquetas.

Como funciona a escala automática de clusters

O redimensionador automático de clusters funciona com base no node-pool. Quando ativa o dimensionamento automático para um conjunto de nós, especifica um número mínimo e máximo de nós para o conjunto.

O redimensionador automático de cluster aumenta ou diminui automaticamente o número de nós no conjunto, com base nos pedidos de recursos (em vez da utilização real de recursos) dos pods em execução nos 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 conjunto, o escalador automático do cluster adiciona nós até ao máximo especificado.

  • Se os nós estiverem subutilizados e todos os pods puderem ser agendados com menos nós no conjunto, o escalador automático do cluster remove nós até ao mínimo especificado. Se não for possível esvaziar um nó corretamente, o nó é terminado à força e o disco gerido pelo Kubernetes associado é separado em segurança.

Se os seus pods tiverem pedido poucos recursos (ou não tiverem alterado as predefinições, que podem ser insuficientes) e os seus nós estiverem a sofrer escassez, o escalamento automático do cluster não corrige essa situação. Pode ajudar a garantir que o redimensionador automático de clusters funciona com precisão fazendo pedidos de recursos explícitos para todas as suas cargas de trabalho.

Para um node pool individual, minReplicas tem de ser ≥ 1. No entanto, a soma dos nós de cluster de utilizadores não afetados em qualquer momento tem de ser, pelo menos, 3. Isto significa que a soma dos valores de minReplicas para todos os conjuntos de nós com dimensionamento automático, mais a soma dos valores de replicas para todos os conjuntos de nós sem dimensionamento automático, tem de ser, pelo menos, 3.

O escalador automático do cluster considera o custo relativo dos tipos de instâncias nos vários conjuntos de nós e tenta expandir o conjunto de nós de uma forma que cause o menor desperdício possível.

Crie um cluster de utilizadores com escalabilidade automática

Para criar um cluster de utilizadores com o dimensionamento automático ativado para um conjunto de nós, preencha a secção autoscaling do ficheiro de configuração do cluster de utilizadores para o conjunto de nós. Por exemplo:

nodePools:
- name: pool‐1
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5

A configuração anterior cria um node pool com 3 réplicas e aplica o dimensionamento automático com o tamanho mínimo do node pool como 1 e o tamanho máximo do node pool como 5.

O valor de minReplicas tem de ser ≥ 1. Não é possível reduzir a escala de um conjunto de nós para zero nós.

Adicione um conjunto de nós com o dimensionamento automático

Para adicionar um conjunto de nós com o dimensionamento automático a um cluster existente:

  1. Edite o ficheiro de configuração do cluster de utilizadores para adicionar um novo conjunto de nós e inclua uma secção autoscaling para o conjunto. Defina os valores de replicas, minReplicas e maxReplicas conforme pretendido. Por exemplo:

    nodePools:
    - name: my-new-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 2
        maxReplicas: 6
    
  2. Atualize o cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Ative o dimensionamento automático para um conjunto de nós existente

Para ativar a escala automática para um node pool num cluster existente:

  1. Edite um nodePool específico no ficheiro de configuração do cluster de utilizadores e inclua a secção autoscaling. Defina os valores de minReplicas e maxReplicas conforme pretendido.

    nodePools:
    - name: my-existing-node-pool
      …
      replicas: 3
      ...
      autoscaling:
        minReplicas: 1
        maxReplicas: 5
    
  2. Atualize o cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Desative o dimensionamento automático para um conjunto de nós existente

Para desativar o dimensionamento automático para um node pool específico:

  1. Edite o ficheiro de configuração do cluster de utilizadores e remova a secção autoscaling para esse conjunto de nós.

  2. Corrida gkectl update cluster.

Verifique o comportamento do redimensionador automático de clusters

Pode determinar o que o redimensionador automático de clusters está a fazer de várias formas.

Verifique os registos do redimensionador automático de clusters

Primeiro, encontre o nome do pod do redimensionador automático de cluster:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAME | grep cluster-autoscaler

Verifique os registos no pod do redimensionador automático de clusters:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler -n USER_CLUSTER_NAME

Substitua POD_NAME pelo nome do pod do redimensionador automático de cluster.

Verifique o mapa de configuração

O redimensionador automático de clusters publica o mapa de configuração kube-system/cluster-autoscaler-status.

Para ver o mapa de configuração:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml

Verifique os eventos de redimensionamento automático de clusters.

Pode verificar os eventos de ajuste de escala automático do cluster:

  • Em pods (em particular, os que não podem ser agendados ou em nós subutilizados)
  • Nos nós
  • No kube-system/cluster-autoscaler-status mapa de configuração.

Limitações

O redimensionador automático de clusters tem as seguintes limitações:

Resolução de problemas

  • Ocasionalmente, o redimensionador automático de clusters não consegue reduzir completamente os recursos e existe um nó adicional após a redução dos recursos. Isto pode ocorrer quando os pods do sistema necessários são agendados em nós diferentes, porque não existe nenhum acionador para que qualquer um desses pods seja movido para um nó diferente. Veja Tenho alguns nós com baixa utilização, mas não são reduzidos. Porquê?. Para contornar esta limitação, pode configurar um orçamento de interrupção de pods.

  • Se tiver problemas com a redução da escala do cluster, consulte o artigo Programação e interrupção de pods. Pode ter de adicionar um PodDisruptionBudget para os kube-system Pods. Para mais informações sobre como adicionar manualmente um PodDisruptionBudget para os kube-system pods, consulte as Perguntas frequentes do redimensionador automático de clusters de Kubernetes.

  • Quando reduz a escala, o redimensionador automático de cluster respeita as regras de agendamento e despejo definidas nos pods. Estas restrições podem impedir que um nó seja eliminado pelo escalador automático. A eliminação de um nó pode ser impedida se este contiver um pod com qualquer uma das seguintes condições:

    • As regras de afinidade ou anti-afinidade do Pod impedem o reagendamento.

    • O Pod tem armazenamento local.

    • O pod não é gerido por um controlador como uma implementação, um StatefulSet, um trabalho ou um ReplicaSet.

    • O pod está no espaço de nomes kube-system e não tem um PodDisruptionBudget

  • O PodDisruptionBudget de uma aplicação pode impedir o dimensionamento automático. Se a eliminação de nós fizer com que o orçamento seja excedido, o cluster não é reduzido.

Mais informações

Para mais informações sobre o redimensionador automático de clusters e a prevenção de interrupções, consulte as seguintes perguntas nas Perguntas frequentes do redimensionador automático de clusters do Kubernetes: