Como fazer o upgrade manual de um cluster ou pool de nós

Por padrão, os clusters e os pools de nós do Google Kubernetes Engine são atualizados automaticamente pelo Google. Esta página explica como solicitar manualmente um upgrade ou downgrade para um cluster do GKE ou seus nós. Saiba mais sobre como os upgrades de cluster automáticos e manuais funcionam. Você também pode controlar quando os upgrades automáticos podem ou não ocorrer com a configuração de janelas e exclusões de manutenção.

Novas versões do GKE são anunciadas regularmente. Consulte Controle de versão e Upgrades para saber mais sobre as versões disponíveis. Para saber mais sobre clusters, consulte Arquitetura de cluster.

Antes de começar

Prepare-se para a tarefa seguindo essas etapas:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API do Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o ID do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona do Compute padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região do Compute padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize gcloud para a versão mais recente:
    gcloud components update

Salve seus dados em discos permanentes

Antes de fazer upgrade de um pool de nós, garanta que todos os dados que você quer manter estejam armazenados em um pod com volumes permanentes que usem discos permanentes. Em vez de apagados, os discos permanentes são desconectados durante os upgrades, e os dados deles são "distribuídos" entre os pods.

As seguintes restrições são relacionadas aos discos permanentes:

  • Os pods estão em execução nos nós que precisam ser VMs do Compute Engine.
  • Essas VMs precisam estar no mesmo projeto e zona do Compute Engine que o disco permanente.

Para saber como adicionar um disco permanente a uma instância de nó atual, consulte Como adicionar ou redimensionar discos permanentes.

Sobre o upgrade de clusters

Os upgrades do mestre e dos nós de um cluster são feitos separadamente.

Limitações

Os clusters inscritos nos canais de lançamento e seus nós não podem fazer upgrade ou downgrade manualmente. Eles sempre recebem upgrade quando uma nova versão está disponível no canal de lançamento inscrito.

Clusters Alpha não podem receber upgrade.

Versões compatíveis

As notas da versão anunciam quando novas versões estão disponíveis e quando versões mais antigas não estão mais disponíveis. A qualquer momento, é possível listar todas as versões compatíveis de cluster e nó usando este comando:

gcloud container get-server-config

Limitações de downgrade

Não é recomendável fazer downgrade de um cluster. É possível fazer o downgrade dos nós para uma versão de patch mais antiga que a versão do cluster. No entanto, não é possível fazer downgrade de um cluster de uma versão secundária para outra. Por exemplo, se um cluster estiver executando o GKE 1.11.5, será possível fazer o downgrade para a versão 1.11.4 (se ainda estiver disponível), mas não para a versão 1.10.9. Em vez disso, um erro como o abaixo será gerado:

ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.10.9-gke.9": specified version is not
newer than the current version.

Como fazer upgrade do cluster

O Google faz upgrade de clusters e nós automaticamente. Para ter mais controle sobre quais upgrades automáticos seu cluster e seus nós recebem, é possível inscrevê-lo em um canal de lançamento.

Para mais informações sobre como gerenciar a versão do GKE do seu cluster, consulte Controle de versão e upgrades.

Depois que uma nova versão estiver disponível, inicie um upgrade manual quando quiser.

Como fazer o upgrade manual do mestre

Ao iniciar um upgrade de cluster, não modifique a configuração do cluster por vários minutos, até que o plano de controle possa ser acessado novamente. Se você precisar evitar a inatividade durante upgrades do mestre, use um cluster regional.

É possível fazer upgrade do cluster manualmente usando o Console do Cloud ou a ferramenta de linha de comando gcloud. Após o upgrade do cluster, é possível atualizar os nós. Por padrão, os nós criados com o Console do Google Cloud têm o upgrade automático ativado. Isso acontece automaticamente.

Não é possível nem necessário fazer upgrade manual de um cluster inscrito em um canal de lançamento.

gcloud

Para fazer upgrade da versão do mestre do cluster, primeiro execute o seguinte comando para ver as versões disponíveis:

gcloud container get-server-config

Para fazer upgrade para a versão mais recente, execute o comando a seguir:

gcloud container clusters upgrade [CLUSTER_NAME] --master

Para fazer upgrade para uma versão específica que não seja a padrão, execute o comando a seguir:

gcloud container clusters upgrade [CLUSTER_NAME] --master --cluster-version [CLUSTER_VERSION]

Consulte a documentação gcloud container clusters upgrade.

Console

Para atualizar manualmente o mestre do cluster, siga estas etapas:

  1. Acesse o menu do Google Kubernetes Engine no Console do Google Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Selecione o cluster pretendido.

  3. Clique no link Upgrade disponível ao lado da Versão principal.

  4. Selecione a versão pretendida e clique em Alterar.

  5. Clique na seta na parte superior da tela para voltar à página de visão geral do cluster.

Como fazer downgrade de clusters

Para fazer downgrade de um cluster para uma versão anterior do patch, atualize a versão do mestre do cluster usando a ferramenta de linha de comando gcloud.

Como desativar os upgrades automáticos do cluster

Não é possível desativar upgrades do cluster. Embora não seja recomendado, é possível desativar o upgrade automático do nó.

Como fazer upgrade de nós

Por padrão, os nós de um cluster têm o upgrade automático ativado e é recomendável que ele não seja desativado.

Quando um pool de nós é atualizado, o GKE atualiza um nó por vez.

Enquanto um nó está sendo atualizado, o GKE interrompe a programação de novos pods nele e tenta programar seus pods em execução em outros nós. O nó é recriado na nova versão, mas usando o mesmo nome de antes. Isso é semelhante a outros eventos que recriam o nó, como ativar ou desativar um recurso no pool de nós.

Não é possível nem necessário fazer upgrade manual de um nó quando o cluster está inscrito em um canal de lançamento. Quando você usa canais de lançamento, o cluster e os nós deles utilizam a mesma versão, exceto durante o rápido período entre o upgrade automático do cluster e dos nós.

O upgrade será concluído apenas quando todos os nós forem recriados e o cluster assumir o estado desejado. Quando um nó recém-atualizado é registrado no mestre, o GKE o marca como programável.

As novas instâncias de nó executam a versão do Kubernetes desejada e também:

Fazer upgrade manual de um nó

É possível fazer upgrade de uma versão do pool de nós para igualá-la à do mestre ou a uma versão anterior que ainda esteja disponível e seja compatível com o mestre. A versão do Kubernetes e a política de suporte de diferença de versão garantem que os mestres sejam compatíveis com nós até duas versões secundárias mais antigas que o mestre. Por exemplo, os mestres do Kubernetes 1.13 são compatíveis com os nós do Kubernetes 1.11.

É possível fazer upgrade dos nós manualmente para uma versão compatível com o mestre, usando o Console do Google Cloud ou a ferramenta de linha de comando gcloud.

Não é possível nem necessário fazer upgrade manual de um nó quando o cluster está inscrito em um canal de lançamento. Quando você usa canais de lançamento, o cluster e os nós deles utilizam a mesma versão, exceto durante o rápido período entre o upgrade automático do cluster e dos nós.

gcloud

O comando a seguir faz o upgrade dos nodes para a versão principal em execução:

gcloud container clusters upgrade [CLUSTER_NAME] --node-pool=[NODE-POOL-NAME]

em que [CLUSTER_NAME] é o nome do cluster a ser atualizado.

Para especificar uma versão diferente do GKE nos nós, use a sinalização opcional --cluster-version:

gcloud container clusters upgrade [CLUSTER_NAME] --node-pool=[NODE-POOL-NAME] --cluster-version [CLUSTER_VERSION]

em que [CLUSTER_VERSION] é a versão do Kubernetes para a que os nós são atualizados. Por exemplo, --cluster-version=1.7.2 ou cluster-version=latest.

Para mais informações sobre como especificar versões, consulte a documentação Controle de versão e upgrades.

Para mais informações, consulte a documentação gcloud container clusters upgrade.

Console

Para fazer upgrade de um pool de nós com o Console do Cloud, siga as etapas a seguir:

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Clique no botão de edição do cluster, que tem a forma de um lápis.

  3. Na seção Pools de nós, expanda a seta de divulgação do pool de nós que você quer atualizar.

  4. Clique no link Alterar ao lado da Versão do nó.

  5. Selecione a versão pretendida e clique em Alterar.

  6. Clique em Salvar.

Como fazer downgrade de nós

Não é possível fazer downgrade de um pool de nós. Na verdade, você precisa criar um novo pool de nós na versão pretendida e migrar as cargas de trabalho para ele. Os nós com upgrade automático ativado são atualizados para corresponder à versão mestre.

Como verificar o status do upgrade de nós

É possível verificar o status de um upgrade usando gcloud beta container operations.

Para ver uma lista de todas as operações executadas e concluídas no cluster, execute o comando a seguir:

gcloud beta container operations list

Cada operação recebe um código e um tipo, além de horários de início e término, cluster de destino e status. A lista é semelhante ao exemplo a seguir:

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

Para ver mais informações sobre uma determinada operação, especifique o código dela no seguinte comando:

gcloud beta container operations describe [OPERATION_ID]

Por exemplo:

gcloud beta container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

Como cancelar um upgrade de nó

É possível cancelar um upgrade a qualquer momento. Quando você cancela um upgrade:

  • os nós que iniciaram o upgrade o concluem;
  • os nós que não iniciaram o upgrade não prosseguem com a operação;
  • os nós que já foram concluídos com sucesso não são afetados nem revertidos.

Primeiro, consiga o código da operação do upgrade com o seguinte comando:

gcloud container operations list

Em seguida, para cancelar o upgrade, execute o seguinte comando:

gcloud beta container operations cancel [OPERATION_ID]

Consulte a documentação gcloud container operations cancel.

Como reverter um upgrade do nó

Quando o upgrade falha ou é cancelado, é possível reverter os pools de nós para a versão anterior do Kubernetes. Não é possível revertê-los depois da atualização. Os nodes que não iniciaram um upgrade não são afetados.

Para reverter um upgrade, execute o seguinte comando:

gcloud container node-pools rollback [POOL_NAME] --cluster [CLUSTER_NAME]

em que:

  • [POOL_NAME] é o nome do pool de nós para a reversão;
  • [CLUSTER_NAME] é o nome do cluster em que o pool de nós será revertido.
  • [COMPUTE_ZONE] é a zona do Compute do seu projeto

Consulte a documentação gcloud container node-pools rollback.

Como alterar os parâmetros de upgrade de sobretensão

Upgrades de sobretensão permitem alterar o número de upgrades de nós do GKE de uma só vez e a quantidade de interrupções que um upgrade faz nas suas cargas de trabalho.

As sinalizações max-surge-upgrade e max-unavailable-upgrade são definidas para cada pool de nós.

É possível alterar essas configurações ao criar um cluster ou pool de nós.

Como criar um cluster com diferentes parâmetros de sobretensão

Para criar um cluster com configurações diferentes para upgrades de sobretensão, use as sinalizações max-surge-upgrade e max-unavailable-upgrade.

gcloud beta container clusters create [CLUSTER_NAME] \
  --max-surge-upgrade=[SURGE_NODES] --max-unavailable-upgrade=[UNAVAILABLE_NODES]

Como criar um cluster com upgrade de sobretensão desativado

Para criar um cluster sem upgrades de sobretensão, defina a sinalização max-surge-upgrade como 0.

gcloud beta container clusters create [CLUSTER_NAME] \
  --max-surge-upgrade=0 --max-unavailable-upgrade=1

Como criar um pool de nós com diferentes parâmetros de sobretensão

Para criar um pool de nós em um cluster existente com configurações diferentes para upgrades de sobretensão, use as sinalizações max-surge-upgrade e max-unavailable-upgrade.

gcloud beta container node-pools create [NODE_POOL_NAME] \
  --num-nodes=[NUMBER_NODES] --cluster=[CLUSTER_NAME] \
  --max-surge-upgrade=[SURGE_NODES] --max-unavailable-upgrade=[UNAVAILABLE_NODES]

Como verificar se os upgrades de sobretensão são ativados em um pool de nós

Para ver se os upgrades de sobretensão estão ativados em um pool de nós, use gcloud para descrever os parâmetros do cluster.

gcloud beta container node-pools describe [NODE_POOL_NAME] \
--cluster=[CLUSTER_NAME]

A seguir