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:
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 dereplicas
,minReplicas
emaxReplicas
conforme pretendido. Por exemplo:nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 2 maxReplicas: 6
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:
Edite um
nodePool
específico no ficheiro de configuração do cluster de utilizadores e inclua a secçãoautoscaling
. Defina os valores deminReplicas
emaxReplicas
conforme pretendido.nodePools: - name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
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:
Edite o ficheiro de configuração do cluster de utilizadores e remova a secção
autoscaling
para esse conjunto de nós.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:
A programação personalizada com filtros alterados não é suportada.
Os nós não são dimensionados se os pods tiverem um valor
PriorityClass
inferior a-10
. Saiba mais em Como funciona o Cluster Autoscaler com a prioridade e a antecipação de pods?.O dimensionamento automático para pools de nós do Windows não é suportado.
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 oskube-system
Pods. Para mais informações sobre como adicionar manualmente umPodDisruptionBudget
para oskube-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:
- Como funciona a redução?
- O redimensionador automático de clusters funciona com o PodDisruptionBudget na redução?
- Que tipos de pods podem impedir que o dimensionamento automático do cluster remova um nó?