Se os nós do Google Kubernetes Engine (GKE) não estiverem a ser reduzidos como esperado, é frequentemente porque o escalador automático do cluster não os está a remover, o que gera custos desnecessários e uma utilização ineficiente dos recursos.
Use esta página para diagnosticar e resolver problemas comuns que bloqueiam as ações de redução da escala do escalador automático do cluster. A resolução destes problemas ajuda a garantir que o cluster funciona de forma rentável e se adapta às alterações da carga de trabalho.
Estas informações são importantes para os administradores e os operadores da plataforma responsáveis pela eficiência do cluster, pela otimização de custos e pela gestão de recursos.
Os programadores de aplicações também podem precisar destas informações se as respetivas configurações de carga de trabalho (como PodDisruptionBudgets
ou seletores de nós) estiverem a impedir involuntariamente a remoção de nós. Para mais informações sobre as funções comuns e exemplos de tarefas que referimos no conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE. Google Cloud
Compreenda quando o dimensionamento automático do cluster reduz os seus nós
Antes de avançar para os passos de resolução de problemas, pode ser útil compreender quando o redimensionador automático do cluster tenta reduzir a escala dos seus nós. Pode acontecer que o redimensionador automático de clusters não tenha sido reduzido porque não era necessário.
O redimensionador automático de clusters determina se um nó está subutilizado e é elegível para redução calculando um fator de utilização. O fator de utilização é calculado dividindo a vCPU e a memória pedidas pelos pods no nó pela vCPU e memória alocáveis no nó.
A cada 10 segundos, o redimensionador automático de clusters verifica o fator de utilização dos seus nós
para ver se está abaixo do limite necessário. Se estiver a usar um balanced
perfil de ajuste automático da escala,
o limite do fator de utilização é 0,5. Se estiver a usar o perfil optimize-utilization
, o fator de utilização varia. Quando o fator de utilização é inferior ao limite necessário para a vCPU e a memória, o escalador automático de clusters considera o nó subutilizado.
Quando um nó é subutilizado, o escalador automático de clusters marca o nó para remoção e monitoriza o nó durante os 10 minutos seguintes para garantir que o fator de utilização permanece abaixo do limite necessário. Se o nó ainda estiver subutilizado após 10 minutos, o escalador automático do cluster deve remover o nó.
Exemplo: cálculo do fator de utilização
Tem um cluster com o redimensionador automático de clusters ativado e está a usar o
balanced
perfil de escala automática. Um nó neste cluster é aprovisionado com o tipo de máquina e2-standard-4
, que oferece 4 vCPUs e 16 GB de memória. Um pod neste nó pede 0,5 vCPU e 10 GB de memória, pelo que o redimensionador automático de clusters calcula os seguintes fatores de utilização:
- Fator de utilização da vCPU: 0,5 vCPU / 4 vCPUs = 0,125
- Fator de utilização da memória: 10 GB / 16 GB = 0,625
Neste cenário, o dimensionamento automático do cluster não considera que este nó está subutilizado porque o fator de utilização da memória (0,625) excede o limite de 0,5. Embora a utilização da vCPU seja baixa, a utilização de memória mais elevada impede a redução da escala para garantir que permanecem recursos suficientes disponíveis para a carga de trabalho do pod.
Verifique se o problema é causado por uma limitação
Se observar um cluster com uma utilização baixa durante mais de 10 minutos e este não estiver a ser reduzido, certifique-se de que o problema não é causado por uma das limitações do redimensionador automático de clusters.
Ver erros
Se o problema não tiver sido causado por uma limitação, pode diagnosticar a causa ao ver as mensagens de erro:
Se já viu uma mensagem de erro, consulte a tabela de mensagens de erro para obter sugestões sobre como resolver o erro.
Se ainda não viu uma mensagem, use uma das seguintes opções:
- Problemas com menos de 72 horas: veja as notificações de erro na Google Cloud consola.
- Problemas com mais de 72 horas: veja erros em eventos no Cloud Logging.
Veja erros nas notificações
Se o problema que observou ocorreu há menos de 72 horas, veja as notificações sobre erros na Google Cloud consola. Estas notificações fornecem estatísticas valiosas sobre o motivo pelo qual o redimensionador automático de clusters não foi reduzido e oferecem sugestões sobre como resolver o erro e ver os registos relevantes para uma investigação mais detalhada.
Para ver as notificações na Google Cloud consola, conclua os seguintes passos:
Na Google Cloud consola, aceda à página Clusters do Kubernetes.
Reveja a coluna Notificações. As seguintes notificações estão associadas a problemas de redução de escala:
Can't scale down nodes
Scale down blocked by pod
Clique na notificação relevante para ver um painel com detalhes sobre a causa do problema e ações recomendadas para o resolver.
Opcional: para ver os registos deste evento, clique em Registos. Esta ação leva-o ao Explorador de registos com uma consulta pré-preenchida para ajudar a investigar mais detalhadamente o evento de escalabilidade. Para saber como funcionam os eventos de redução de escala, consulte o artigo Veja os eventos do escalador automático de clusters.
Se continuar a ter problemas depois de rever as sugestões na notificação, consulte as tabelas de mensagens de erro para receber mais ajuda.
Veja erros em eventos
Se o problema que observou ocorreu há mais de 72 horas, veja os eventos no Cloud Logging. Quando ocorre um erro, este é frequentemente registado num evento.
Para ver os registos do escalador automático de clusters na Google Cloud consola, conclua os seguintes passos:
Na Google Cloud consola, aceda à página Clusters do Kubernetes.
Selecione o nome do cluster que quer investigar para ver a respetiva página de detalhes do cluster.
Na página Detalhes do cluster, clique no separador Registos.
No separador Registos, clique no separador Registos do dimensionamento automático para ver os registos.
Opcional: para aplicar filtros mais avançados para restringir os resultados, clique no botão com a seta no lado direito da página para ver os registos no Logs Explorer.
Para saber mais sobre como funcionam os eventos de redução, consulte o artigo Veja os eventos do escalador automático de clusters. Para ver um exemplo de como usar o Cloud Logging, consulte o seguinte exemplo de resolução de problemas.
Exemplo: resolva um problema com mais de 72 horas
O exemplo seguinte mostra como pode investigar e resolver um problema com um cluster que não está a ser reduzido.
Cenário:
Há uma semana, estava a consultar o painel de controlo do GKE e reparou que o seu cluster só usou 10% da CPU e da memória. Apesar da baixa utilização, o redimensionador automático de clusters não eliminou o nó, como esperado. Quando olha para o painel de controlo, o problema parece ter sido resolvido, mas decide descobrir o que aconteceu para evitar que volte a acontecer.
Investigação:
- Como o problema ocorreu há mais de 72 horas, investiga o problema através do Cloud Logging em vez de analisar as mensagens de notificação.
- No Cloud Logging, encontra os detalhes de registo dos eventos do redimensionador automático de clusters, conforme descrito em Ver erros em eventos.
- Pesquise
scaleDown
eventos que contenham os nós pertencentes ao cluster que está a investigar no camponodesToBeRemoved
. Pode filtrar as entradas do registo, incluindo a filtragem por um valor de campo JSON específico. Saiba mais em Consultas avançadas de registos. - Não encontra eventos de
scaleDown
. No entanto, se encontrou um eventoscaleDown
, pode pesquisar um eventoeventResult
que contenha oeventId
associado. Em seguida, pode pesquisar um erro no campoerrorMsg
. -
Encontra um evento
noScaleDown
que contém um motivo pelo qual o seu nó não está a ser reduzido. O ID da mensagem é"no.scale.down.node.pod.not.backed.by.controller"
e existe um único parâmetro:"test-single-pod"
.
Resolução:
Consulta a tabela de mensagens de erro e descobre que esta mensagem significa que o pod está a bloquear a redução porque não é suportado por um controlador. Descobre que uma solução é adicionar uma anotação "cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
ao Pod. Investiga test-single-pod
e vê que um colega adicionou a anotação e, após a aplicação da anotação, o escalador automático do cluster reduziu corretamente o cluster. Decide adicionar a anotação a todos os outros Pods onde é seguro fazê-lo para evitar que o problema volte a acontecer.
Resolva erros de redução de escala
Depois de identificar o erro, use as tabelas seguintes para ajudar a compreender a causa do erro e como o resolver.
Erros ScaleDown
Pode encontrar mensagens de eventos de erro para eventos scaleDown
no evento eventResult
correspondente, no campo resultInfo.results[].errorMsg
.
Mensagem de evento | Detalhes | Parâmetro | Mitigação |
---|---|---|---|
"scale.down.error.failed.to.mark.to.be.deleted" |
Não foi possível marcar um nó para eliminação. | Nome do nó com falhas. | Esta mensagem deve ser transitória. Se persistir, contacte o apoio ao cliente da nuvem para uma investigação mais detalhada. |
"scale.down.error.failed.to.evict.pods" |
O escalador automático do cluster não consegue reduzir a escala porque não foi possível expulsar alguns dos pods de um nó. | Nome do nó com falhas. | Reveja o PodDisruptionBudget para o pod e certifique-se de que as regras permitem a remoção de réplicas da aplicação quando for aceitável. Para saber mais, consulte Especificar um orçamento de interrupção para a sua aplicação na documentação do Kubernetes. |
"scale.down.error.failed.to.delete.node.min.size.reached" |
O escalador automático do cluster não pode reduzir a escala porque não foi possível eliminar um nó devido ao cluster já ter o tamanho mínimo. | Nome do nó com falhas. | Reveja o valor mínimo definido para a escala automática do node pool e ajuste as definições conforme necessário. Para saber mais, consulte o artigo Erro: os nós no cluster atingiram o tamanho mínimo. |
Motivos de um evento noScaleDown
Um evento noScaleDown
é emitido periodicamente quando existem nós cuja eliminação está bloqueada pelo escalador automático do cluster. Os eventos noScaleDown
são de melhor esforço e não abrangem todos os casos possíveis.
NoScaleDown top-level reasons
As mensagens de motivo de nível superior para eventos noScaleDown
aparecem no campo noDecisionStatus.noScaleDown.reason
. A mensagem contém um motivo de nível superior pelo qual o escalador automático de clusters não consegue reduzir a escala do cluster.
Mensagem de evento | Detalhes | Mitigação |
---|---|---|
"no.scale.down.in.backoff" |
O escalamento automático do cluster não pode ser reduzido porque a redução está num período de recuo (bloqueado temporariamente). | Esta mensagem deve ser transitória e pode ocorrer quando tiver havido um evento de aumento recente. Se a mensagem persistir, contacte o apoio ao cliente do Google Cloud para uma investigação mais aprofundada. |
"no.scale.down.in.progress" |
O redimensionador automático de clusters não consegue reduzir a escala porque uma redução de escala anterior ainda estava em curso. |
Esta mensagem deve ser transitória, uma vez que o pod vai acabar por ser removido. Se esta mensagem ocorrer com frequência, reveja o período de tolerância de encerramento para a redução da escala de pods. Para acelerar a resolução, também pode eliminar o agrupamento se já não for necessário. |
Motivos ao nível do nó para noScaleDown
As mensagens de motivo ao nível do nó para eventos noScaleDown
aparecem em noDecisionStatus.noScaleDown.nodes[].reason field
. A mensagem contém um motivo pelo qual o escalador automático do cluster não consegue remover um nó específico.
Mensagem de evento | Detalhes | Parâmetros | Mitigação |
---|---|---|---|
"no.scale.down.node.scale.down.disabled.annotation" |
O escalador automático de clusters não pode remover um nó do conjunto de nós porque o nó está anotado com cluster-autoscaler.kubernetes.io/scale-down-disabled: true .
|
N/A | O escalador automático de clusters ignora os nós com esta anotação sem considerar a respetiva utilização, e esta mensagem é registada independentemente do fator de utilização do nó. Se quiser que o escalador automático de clusters reduza a escala destes nós, remova a anotação. |
"no.scale.down.node.node.group.min.size.reached" |
O redimensionador automático de clusters não consegue reduzir a escala quando o tamanho do grupo de nós excedeu o limite de tamanho mínimo. Isto acontece porque a remoção de nós violaria os limites mínimos de recursos ao nível do cluster definidos nas definições de aprovisionamento automático de nós. |
N/A | Reveja o valor mínimo definido para o ajuste de escala automático do conjunto de nós. Se quiser que o dimensionamento automático do cluster reduza a escala deste nó, ajuste o valor mínimo. |
"no.scale.down.node.minimal.resource.limits.exceeded" |
O redimensionador automático de clusters não consegue reduzir a escala dos nós porque violaria os limites mínimos de recursos ao nível do cluster. Estes são os limites de recursos definidos para a administração de contas automática de nós. |
N/A | Reveja os limites de memória e vCPU e, se quiser que o redimensionador automático de clusters reduza a escala deste nó, diminua os limites. |
"no.scale.down.node.no.place.to.move.pods" |
O redimensionador automático de clusters não consegue reduzir a escala porque não existe nenhum local para mover os pods. | N/A | Se espera que o pod seja reagendado, reveja os requisitos de agendamento dos pods no nó subutilizado para determinar se podem ser movidos para outro nó no cluster. Para saber mais, consulte o Erro: Não existe nenhum local para mover os pods. |
"no.scale.down.node.pod.not.backed.by.controller" |
O pod está a bloquear a redução porque não tem um controlador. Especificamente, o redimensionador automático de cluster não consegue reduzir a escala de um nó subutilizado devido a um pod que não tem um controlador reconhecido. Os controladores permitidos incluem ReplicationController, DaemonSet, Job, StatefulSet ou ReplicaSet. |
Nome do pod de bloqueio. | Defina a anotação
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
para o Pod ou defina um controlador aceitável. |
"no.scale.down.node.pod.not.safe.to.evict.annotation" |
Um pod no nó tem a anotação safe-to-evict=false . |
Nome do pod de bloqueio. | Se o Pod puder ser removido com segurança, edite o manifesto do Pod e
atualize a anotação para
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true" . |
"no.scale.down.node.pod.kube.system.unmovable" |
O pod está a bloquear a redução porque é um pod não DaemonSet, não espelhado e sem um PodDisruptionBudget no espaço de nomes kube-system . |
Nome do pod de bloqueio. | Nas versões do GKE anteriores a 1.32.4-gke.1236000, o escalador automático de clusters não remove os pods no espaço de nomes Para resolver este problema, adicione um PodDisruptionBudget para os pods |
"no.scale.down.node.pod.not.enough.pdb" |
O pod está a bloquear a redução porque não tem um PodDisruptionBudget suficiente. | Nome do pod de bloqueio. | Reveja o PodDisruptionBudget do pod e considere torná-lo menos restritivo. Para saber mais, consulte o artigo Erro: Not enough PodDisruptionBudget. |
"no.scale.down.node.pod.controller.not.found" |
O pod está a bloquear a redução porque não é possível encontrar o respetivo controlador (por exemplo, uma implementação ou um ReplicaSet). | N/A | Para determinar que ações foram tomadas que deixaram o pod em execução depois de o respetivo controlador ter sido removido, reveja os registos. Para resolver este problema, elimine manualmente o pod. |
"no.scale.down.node.pod.unexpected.error" |
O pod está a bloquear a redução devido a um erro inesperado. | N/A | A causa principal deste erro é desconhecida. Contacte o apoio ao cliente do Google Cloud para uma investigação mais aprofundada. |
Realizar uma investigação mais aprofundada
As secções seguintes fornecem orientações sobre como usar o Explorador de registos e o
gcpdiag
para obter estatísticas adicionais sobre os seus erros.
Investigue erros no Explorador de registos
Se quiser investigar mais a fundo a sua mensagem de erro, pode ver registos específicos do erro:
Na Google Cloud consola, aceda à página Explorador de registos.
No painel de consultas, introduza a seguinte consulta:
resource.type="k8s_cluster" log_id("container.googleapis.com/cluster-autoscaler-visibility") jsonPayload.resultInfo.results.errorMsg.messageId="ERROR_MESSAGE"
Substitua
ERROR_MESSAGE
pela mensagem que quer investigar. Por exemplo,scale.down.error.failed.to.delete.node.min.size.reached
.Clique em Executar consulta.
Depure alguns erros com o gcpdiag
gcpdiag
é uma ferramenta de código aberto criada com o apoio de Google Cloud
engenheiros técnicos. Não é um produto Google Cloud suportado oficialmente.
Se recebeu uma das seguintes mensagens de erro, pode usar a
gcpdiag
para ajudar a resolver o problema:
scale.down.error.failed.to.evict.pods
no.scale.down.node.node.group.min.size.reached
Para ver uma lista e uma descrição de todas as flags da ferramenta gcpdiag
, consulte as
gcpdiag
instruções de utilização.
Resolva erros complexos de redução de escala
As secções seguintes oferecem orientações sobre a resolução de erros em que as mitigações envolvem vários passos e erros que não têm uma mensagem de evento do escalador automático de clusters associada.
Erro: os nós no cluster atingiram o tamanho mínimo
Se vir os seguintes erros, o redimensionador automático de clusters não conseguiu eliminar um nó porque o número de nós no cluster já estava no tamanho mínimo:
Notificação
A redução da escala do nó subutilizado está bloqueada porque foram atingidos os limites mínimos de recursos do escalador automático do cluster.
Evento
"scale.down.error.failed.to.delete.node.min.size.reached"
Para resolver este problema, reveja e atualize os limites mínimos do dimensionamento automático:
Na Google Cloud consola, aceda à página Clusters do Kubernetes:
Clique no nome do cluster identificado na notificação ou no Cloud Logging.
Na página Detalhes do cluster, aceda ao separador Nós.
Reveja o valor na coluna Número de nós e compare-o com o número mínimo de nós indicado na coluna Ajuste automático de escala. Por exemplo, se vir 4 a 6 nós listados na coluna Dimensionamento automático e o número de nós no conjunto de nós for 4, o número de conjuntos de nós já é igual ao tamanho mínimo, pelo que o dimensionamento automático do cluster não pode reduzir ainda mais os nós.
Se a configuração estiver correta e o valor do número de nós for igual ao mínimo definido para o dimensionamento automático, o dimensionador automático do cluster está a funcionar conforme previsto. Se o número mínimo de nós for demasiado elevado para as suas necessidades, reduza o tamanho mínimo para que os nós possam ser reduzidos.
Erro: não existe um local para mover os pods
Ocorrem os seguintes erros quando o redimensionador automático de clusters tenta reduzir um nó, mas não consegue, porque não é possível mover um pod nesse nó para outro nó:
Notificação
A redução do número de nós subutilizados está bloqueada porque tem um pod que não pode ser movido para outro nó no cluster.
Evento
"no.scale.down.node.no.place.to.move.pods"
Se não quiser reagendar este Pod, esta mensagem é esperada e não são necessárias alterações. Se quiser reagendar o pod, investigue as seguintes definições no elemento pod.spec block
no manifesto do pod:
- NodeAffinity: reveja os requisitos de agendamento dos pods no nó com utilização inferior à esperada. Pode rever estes requisitos examinando o manifesto do pod e procurando regras NodeAffinity ou NodeSelector. Se o pod tiver um nodeSelector definido e não existirem outros nós (de outros nodePools) no cluster que correspondam a este seletor, o cluster autoscaler não consegue mover o pod para outro nó, o que, por sua vez, impede a remoção de nós subutilizados.
maxPodConstraint
: semaxPodConstraint
estiver configurado para qualquer outro número que não seja o número predefinido de 110, confirme se esta foi uma alteração pretendida. Diminuir este valor aumenta a probabilidade de problemas. O redimensionador automático de clusters não pode reagendar pods para outros nós, se todos os outros nós no cluster já tiverem atingido o valor definido emmaxPodConstraint
, não deixando espaço para agendar novos pods. Aumentar o valor demaxPodConstraint
permite agendar mais pods em nós e o escalador automático do cluster tem espaço para reagendar pods e reduzir a escala de nós subutilizados. Quando definirmaxPodConstraint
, tenha em atenção que existem aproximadamente 10 pods do sistema em cada nó.hostPort
: especificar umhostPort
para o agrupamento significa que apenas um agrupamento pode ser executado nesse nó. Isto pode dificultar a redução do número de nós por parte do dimensionamento automático do cluster, uma vez que o pod pode não conseguir mover-se para outro nó se a porta desse nó já estiver em utilização. Este comportamento é o esperado.- Armazenamento temporário: os pods dependem do armazenamento temporário para dados temporários. O armazenamento efémero insuficiente nos nós pode impedir o agendamento de pods e impedir a redução de escala de nós subutilizados. Exemplo: não é possível agendar um pod que requer 6 GB de armazenamento efémero em nós com menos de 6 GB de armazenamento efémero livre, mesmo que tenham recursos de CPU e memória suficientes. Para mitigar as limitações de armazenamento efémero, aumente a capacidade de armazenamento efémero aprovisionada para os seus nós. Isto garante capacidade suficiente para a mudança de localização e as operações de escalabilidade dos pods.
Erro: o pod kube-system não pode ser movido
Ocorrem os seguintes erros quando um pod do sistema está a impedir a redução:
Notificação
O pod está a bloquear a redução porque é um pod não DaemonSet, não espelhado, sem um PodDisruptionBudget no espaço de nomes
kube-system
.
Evento
"no.scale.down.node.pod.kube.system.unmovable"
Os pods no espaço de nomes kube-system
são considerados pods do sistema. Na versão 1.32.4-gke.1236000 e posteriores do GKE, o escalamento automático do cluster pode reduzir o número de nós
expulsando pods do sistema que estão em execução há, pelo menos, uma hora. Nas versões anteriores do GKE, o redimensionador automático de clusters não remove os pods no espaço de nomes kube-system
, o que pode impedir a redução de recursos indefinidamente.
Para resolver este erro, escolha uma das seguintes resoluções:
Adicione um
PodDisruptionBudget
para oskube-system
Pods. Para mais informações sobre como adicionar manualmente umPodDisruptionBudget
para os podskube-system
, consulte as Perguntas frequentes do redimensionador automático de clusters de Kubernetes.A criação de um
PodDisruptionBudget
pode afetar a disponibilidade das cargas de trabalho do sistema, o que pode causar tempo de inatividade no cluster. O redimensionador automático de clusters reagenda estas cargas de trabalho do sistema em diferentes nós de trabalho durante o processo de redução da escala.Use uma combinação de taints e tolerations de node pools para separar os pods do sistema dos pods da aplicação.
kube-system
Para mais informações, consulte o aprovisionamento automático de nós no GKE.
Verifique se os nós têm kube-system
pods
Se não tiver a certeza de que os seus nós estão a executar kube-system
pods e quiser
validar, conclua os seguintes passos:
Aceda à página Explorador de registos na Google Cloud consola.
Clique em Criador de consultas.
Use a seguinte consulta para encontrar todos os registos de registo da política de rede:
- resource.labels.location="CLUSTER_LOCATION" resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility" jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
Substitua o seguinte:
CLUSTER_LOCATION
: a região em que o cluster se encontra.CLUSTER_NAME
: o nome do seu cluster.PROJECT_ID
: o ID do projeto ao qual o seu cluster pertence.NODE_POOL_NAME
: o nome do node pool.
Se existirem
kube-system
pods a serem executados no seu conjunto de nós, o resultado inclui o seguinte:"no.scale.down.node.pod.kube.system.unmovable"
Erro: não existem PodDisruptionBudget
suficientes
Ocorrem os seguintes erros quando o seu PodDisruptionBudget
está a impedir a redução:
Notificação
A redução do nó subutilizado está bloqueada porque tem um pod em execução que não tem um orçamento de interrupção de pods suficiente para permitir a remoção do pod.
Evento
NoScaleDownNodePodNotEnoughPdb: "no.scale.down.node.pod.not.enough.pdb"
Para ver se uma PodDisruptionBudget
é demasiado restritiva, reveja as respetivas definições:
kubectl get pdb --all-namespaces
O resultado é semelhante ao seguinte:
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
example-app-one one_pdb N/A 1 1 12d
example-app-two two_pdb N/A 0 0 12d
Neste exemplo, todos os pods que correspondam ao seletor de etiquetas two_pdb
não são
desalojados pelo escalador automático do cluster. A definição maxUnavailable: 0
neste
PodDisruptionBudget
determina que todas as réplicas têm de permanecer disponíveis em todos os
momentos. Além disso, a disruptionsAllowed: 0
proíbe quaisquer interrupções nestes
Pods. Consequentemente, não é possível reduzir a escala dos nós que executam estes pods, uma vez que isso causaria uma interrupção e violaria a PodDisruptionBudget
.
Se o PodDisruptionBudget
estiver a funcionar da forma pretendida, não é necessária nenhuma ação adicional. Se quiser ajustar o PodDisruptionBudget
para que os pods num nó subutilizado possam ser movidos, edite o manifesto do PodDisruptionBudget
.
Por exemplo, se tiver definido maxUnavailable
como 0
, pode alterá-lo para 1
para que o redimensionador automático de clusters possa reduzir a escala.
Problema: o nó permanece no estado isolado e não é removido
Ocorrem erros semelhantes aos seguintes quando o escalador automático de clusters não consegue reduzir o tamanho do conjunto de nós porque a conta de serviço Google não tem a função de editor:
Required 'compute.instanceGroups.update' permission for 'INSTANCE_GROUP_NAME'.
Um sintoma comum deste problema é quando o escalador automático de clusters tenta reduzir o tamanho do node pool, mas o nó não altera o estado.
Para resolver este problema, verifique se a conta de serviço predefinida
(PROJECT_NUMBER@cloudservices.gserviceaccount.com
)
tem a função de editor (roles/editor
) no projeto. Se a conta de serviço não tiver esta função, adicione-a. O GKE usa esta conta de serviço para gerir os recursos do seu projeto. Para saber como o fazer, consulte o artigo
Conceda ou revogue uma única função
na documentação da IAM.
O que se segue?
Reveja as seguintes perguntas nas Perguntas frequentes sobre o redimensionador automático de clusters do Kubernetes:
Veja um vídeo do YouTube sobre a resolução de problemas de dimensionamento.
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obtenha apoio técnico para receber mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio técnico através do contacto com o Cloud Customer Care.
- Receber apoio técnico da comunidade fazendo perguntas no StackOverflow e usando a etiqueta
google-kubernetes-engine
para pesquisar problemas semelhantes. Também pode juntar-se ao#kubernetes-engine
canal do Slack para receber mais apoio técnico da comunidade. - Abrir erros ou pedidos de funcionalidades através do rastreador de problemas público.