Garantir recursos para upgrades de nós

Nesta página, explicamos como garantir o uso de estratégias de upgrade de nós para fazer alterações nos nós do cluster. Recomendamos verificar se o projeto tem recursos suficientes para atualizar os pools de nós padrão do Google Kubernetes Engine (GKE), dependendo da estratégia escolhida.

Recursos necessários para upgrades de nós

Os upgrades de nós podem exigir que o GKE crie temporariamente mais nós, dependendo da estratégia e da configuração escolhidas. Por isso, o GKE pode exigir mais recursos para fazer upgrade de um pool de nós.

Todos os nós criados pelo GKE, incluindo aqueles usados para upgrades, estão sujeitos à cota de recursos do projeto, à disponibilidade de recursos e à capacidade de reserva, para pools de nós com afinidade de reserva específica.

Recomendamos que você verifique se tem os recursos adequados se tiver requisitos especiais de tipo de máquina e restrições de capacidade. Talvez seja necessário configurar uma estratégia que exija menos recursos para garantir o upgrade dos nós ou realizar outra ação, como criar uma reserva. Para saber mais, consulte Fazer upgrade em um ambiente restrito de recursos.

Recursos necessários para diferentes estratégias de upgrade

As seções a seguir descrevem os recursos extras necessários para usar as estratégias de upgrade disponíveis. Se você tiver problemas de upgrade, verifique as operações de upgrade e siga as instruções para resolver erros de upgrade.

Recursos para upgrades súbitos

Os upgrades súbitos são a estratégia padrão de upgrade de nós. À medida que upgrades súbitos criam VMs extras (se maxSurge estiver definido como mais que zero) antes de drenar e excluir nós antigos, os upgrades poderão falhar se o projeto não tem recursos suficientes.

Se os recursos disponíveis forem menores que o número de nós especificados em maxSurge, o número de upgrades paralelos será menor que maxSurge mais maxUnavailable. Se você não tiver capacidade extra, veja como fazer upgrade em um ambiente com recursos limitados.

Veja na tabela a seguir exemplos que demonstram diferentes comportamentos de upgrade:

Configurações de upgrade Número de nós extras permitidos pelos recursos disponíveis Resultado
maxSurge: 5 maxUnavailable: 0 5 Faz upgrade de cinco nós simultaneamente.
maxSurge: 5 maxUnavailable: 0 2 Faz upgrade de apenas dois nós simultaneamente.
maxSurge: 5 maxUnavailable: 0 0 Houve falha no upgrade, já que não é possível criar nós extras e é proibido reiniciar os existentes pelas configurações de upgrade. O GKE continua tentando fazer upgrade automaticamente até que a operação seja bem-sucedida.
maxSurge: 5 maxUnavailable: 1 5 Faz upgrade de seis nós simultaneamente, garantindo que o pool de nós perca temporariamente apenas um nó devido ao upgrade.
maxSurge: 5 maxUnavailable: 1 2 Faz upgrade de apenas três nós simultaneamente, garantindo que o pool de nós não tenha mais de um nó a menos devido ao upgrade.
maxSurge: 5 maxUnavailable: 1 0 Faz upgrade de apenas um nó por vez, recriando cada nó com um método de upgrade contínuo.

Recursos para upgrades azul-verde

Os upgrades azul-verde duplicam temporariamente o número de nós em um pool de nós, o que significa que seu pool de nós precisa temporariamente do dobro de recursos. Se você não tiver recursos suficientes disponíveis e tiver configurado o pool de nós para usar essa estratégia, configure upgrades súbitos se precisar desbloquear upgrades. Ao configurar essa estratégia, configure parâmetros de upgrade súbito que funcionem com os recursos disponíveis para os nós do pool de nós. Para saber mais, consulte a seção anterior, Recursos para upgrades de sobretensão.

Verificar as operações de upgrade em busca de falhas relacionadas a recursos

Para saber mais sobre suas operações de upgrade, além de encontrar mais informações sobre a possibilidade e o motivo das falhas de upgrade, verifique os objetos de operação de upgrade. Para listar esses objetos, execute o seguinte comando:

gcloud container operations list \
    --filter="STATUS=DONE AND TYPE=UPGRADE_NODES AND targetLink:https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_NAME"

Substitua:

  • PROJECT_ID: o ID do Google Cloud projeto.
  • COMPUTE_ZONE: a zona do Compute Engine para o cluster.
  • CLUSTER_NAME: o nome do cluster.

Se o upgrade mais recente falhar devido à cota insuficiente de recursos, a saída será semelhante a esta:

gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Insufficient quota to satisfy the request: waiting on IG: instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
  \ is still CREATING. Last attempt errors: [QUOTA_EXCEEDED] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
  \ creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 50.0 in region us-central1.\
...

Se o motivo for por reservas insuficientes, a saída será semelhante a esta:

gcloud container operations describe operation-1234567891234-1abc2d3e
detail: "Reservation does not have enough resources for the request: waiting on IG:\
  \ instance https://www.googleapis.com/compute/v1/projects/my-project-123/zones/us-central1-a/instances/gke-my-cluster-default-pool-123ab45c-de67\
  \ is still CREATING. Last attempt error: [CONDITION_NOT_MET] Instance 'gke-my-cluster-default-pool-123ab45c-de67'\
  \ creation failed: Specified reservation 'foo' does not have available resources\
  \ for the request."

Se o motivo for devido à capacidade insuficiente, você verá mensagens de erro de disponibilidade de recursos.

Como resolver erros de upgrade

Se o upgrade falhar devido à falta de recursos, tente estas etapas:

  1. Considere uma estratégia de upgrade que consome menos recursos. Se você estiver usando upgrades azul-verde, considere upgrades súbitos.
  2. Verifique se há recursos do Compute Engine no seu projeto que estão consumindo recursos e que não são mais necessários. Se você encontrar algum, remova-o e tente fazer o upgrade novamente.
  3. Se as duas primeiras etapas não conseguirem desbloquear o upgrade, solicite um aumento de cota ou aumente o tamanho da reserva específica.
  4. Se você estiver operando em um ambiente com recursos restritos, por exemplo, requisitos especiais de tipo de máquina e restrições de capacidade, consulte a próxima seção para saber como desbloquear upgrades.

Fazer upgrade em um ambiente com recursos restritos

Se Google Cloud tiver capacidade limitada para um recurso específico que o pool de nós está usando, recomendamos que você use uma reserva para GPUs e TPUs. Para pools de nós que contêm apenas CPUs, recomendamos que você faça upgrade das CPUs usando capacidade fixa.

Essas duas estratégias podem ajudar a garantir que você tenha recursos adequados para realizar um upgrade de versão. Se você não tiver recursos adequados, talvez não seja possível fazer upgrade dos nós até que você possa acessar mais capacidade.

Se você não tiver capacidade extra, não poderá usar upgrades azul-verde.

Ao usar upgrades súbitos em um ambiente com recursos restritos, observe o seguinte:

Use as orientações a seguir, dependendo se você tem uma reserva para o pool de nós que precisa ser atualizada.

Upgrade com capacidade fixa

Para CPUs, para fazer upgrade em um ambiente com recursos restritos, use capacidade fixa. Para fazer isso, use upgrades súbitos e defina a configuração maxUnavailable como um valor maior que zero. Para mais detalhes, consulte maxUnavailable: o GKE torna um nó atual indisponível para recriá-lo.

O upgrade usando uma capacidade fixa permite que você faça upgrades quando não for possível conseguir mais capacidade e ajuda a evitar a perda de capacidade atual durante o upgrade.

Upgrade com capacidade limitada com uma reserva

Para GPUs e TPUs, para fazer upgrade em um ambiente com restrição de capacidade, use uma reserva e ajuste as configurações de upgrade súbito para velocidade e confiabilidade.

Se você tiver capacidade extra na reserva, poderá usar maxSurge para criar nós súbitos. Defina maxSurge dependendo de quantos nós você quer interromper por vez e da capacidade extra que você tem. Por exemplo, defina maxSurge=1;maxUnavailable=0 se você quiser interromper apenas um nó por vez ou se só tiver capacidade para criar um nó extra.

Se você não tiver capacidade extra, use maxUnavailable com uma configuração como maxSurge=0;maxUnavailable=1, já que a capacidade está reservada. Essa configuração interrompe um nó por vez, recriando o nó para atualizá-lo. Recomendamos essa abordagem para realizar a manutenção do host para nós que executam cargas de trabalho de treinamento e inferência.

A seguir