Como fazer upgrade do GKE no VMware

Nesta página, explicamos como fazer upgrade do GKE no VMware. Nesta página, você verá as etapas para fazer upgrade da estação de trabalho do administrador, do cluster de usuário e do cluster de administrador. Para clusters de usuário, esta página fornece as etapas para fazer upgrade do plano de controle e dos pools de nós ao mesmo tempo ou separadamente.

Antes de continuar, recomendamos que você consulte a seguinte documentação:

  • Visão geral do upgrade
    Entre outras coisas, este documento descreve o desvio de versão compatível e as regras de versão para upgrades, que foram alteradas para a versão 1.28 e posteriores.

  • Práticas recomendadas de upgrade
    Este documento apresenta listas de verificação e práticas recomendadas para fazer upgrade de clusters.

Requisitos do IAM para fazer upgrade de clusters de usuário

Pule esta seção se você planeja usar gkectl para o upgrade do cluster de usuário.

Se você quiser usar o console do Google Cloud, a Google Cloud CLI ou o Terraform para fazer upgrade de um cluster de usuário e não for proprietário de um projeto, será necessário receber o papel do Identity and Access Management roles/gkeonprem.admin no projeto do Google Cloud em que o cluster foi criado. Para detalhes sobre as permissões incluídas nesse papel, consulte Papéis da API GKE On-Prem na documentação do IAM.

Para usar o console para fazer upgrade do cluster, você também precisa de, no mínimo, o seguinte:

  • roles/container.viewer Com esse papel, os usuários podem ver a página de clusters do GKE e outros recursos do contêiner no console. Para ver detalhes sobre as permissões incluídas nesse papel ou conceder um papel com permissões de leitura/gravação, consulte Papéis do Kubernetes Engine na documentação do IAM.

  • roles/gkehub.viewer Esse papel permite que os usuários vejam clusters no console. Para ver detalhes sobre as permissões incluídas nesse papel ou conceder um papel com permissões de leitura/gravação, consulte Papéis do GKE Hub na documentação do IAM.

Faça upgrade da estação de trabalho do administrador

Você precisará fazer upgrade da estação de trabalho do administrador se planeja usar gkectl para fazer upgrade de um cluster de usuário.

Se você planeja usar o console, a CLI gcloud ou o Terraform para fazer upgrade de um cluster de usuário, pule a etapa de upgrade da estação de trabalho de administrador. No entanto, será necessário fazer upgrade da estação de trabalho do administrador quando estiver tudo pronto para fazer upgrade do cluster de administrador, porque apenas gkectl oferece suporte a upgrades do cluster de administrador.

Localizar os arquivos necessários

Antes de criar sua estação de trabalho de administrador, você preencheu um arquivo de configuração da estação de trabalho de administrador que foi gerado por gkeadm create config. O nome padrão deste arquivo é admin-ws-config.yaml.

Além disso, a estação de trabalho tem um arquivo de informações. O nome padrão desse arquivo é o mesmo nome da estação de trabalho do administrador.

Localize o arquivo de configuração da estação de trabalho de administrador e o arquivo de informações. Você precisa deles para as etapas de upgrade. Se esses arquivos estiverem no diretório atual e tiverem os nomes padrão, não será necessário especificá-los ao executar os comandos de upgrade. Se esses arquivos estiverem em outro diretório ou se você tiver alterado os nomes dos arquivos, especifique-os utilizando as sinalizações --config e --info-file.

Se o arquivo de informações de saída estiver ausente, você poderá recriá-lo. Consulte Recriar um arquivo de informações se estiver ausente.

Para fazer upgrade da estação de trabalho do administrador:

  1. Faça o download de gkeadm:

    gkeadm upgrade gkeadm --target-version TARGET_VERSION
    

    Substitua TARGET_VERSION pela versão de destino do seu upgrade. É necessário especificar um número de versão completo no formato X.Y.Z-gke.N.. Para uma lista das versões do GKE no VMware, consulte Histórico de versões.

  2. Faça upgrade da estação de trabalho do administrador:

    gkeadm upgrade admin-workstation --config AW_CONFIG_FILE \
        --info-file INFO_FILE
    

    Substitua:

    • AW_CONFIG_FILE é o caminho do arquivo de configuração da estação de trabalho do administrador. É possível omitir essa sinalização se o arquivo estiver no diretório atual e tiver o nome admin-ws-config.yaml;

    • INFO_FILE é o caminho do seu arquivo de informações. Será possível omitir essa sinalização se o arquivo estiver no seu diretório atual. O nome padrão desse arquivo é o mesmo nome da estação de trabalho do administrador.

    O comando anterior executa as seguintes tarefas:

    • Faça backup de todos os arquivos no diretório inicial da sua estação de trabalho de administrador atual. São elas:

      • O arquivo de configuração do cluster de administrador. O nome padrão é admin-cluster.yaml.
      • Seu arquivo de configuração do cluster de usuário. O nome padrão é user-cluster.yaml.
      • Os arquivos kubeconfig do cluster de administrador e dos clusters de usuário.
      • O certificado raiz do seu servidor vCenter. Esse arquivo precisa ter permissão de leitura e gravação de proprietário.
      • O arquivo de chave JSON para sua conta de serviço de acesso a componentes. Esse arquivo precisa ter permissão de leitura e gravação de proprietário.
      • Os arquivos de chave JSON para suas contas de serviço connect-register e logging-monitoring.
    • Cria uma nova estação de trabalho de administrador e copia todos os arquivos armazenados em backup para a nova estação de trabalho de administrador.

    • Exclui a estação de trabalho de administrador antiga.

Verificar as versões disponíveis para upgrades de cluster

Execute o seguinte comando para ver quais versões estão disponíveis para upgrade:

gkectl version --kubeconfig ADMIN_CLUSTER_KUBECONFIG

A saída mostra a versão atual e as versões disponíveis para upgrade.

Se você planeja usar o console, a CLI gcloud ou o Terraform para o upgrade, levará cerca de 7 a 10 dias após o lançamento para que a versão esteja disponível na API GKE On-Prem em todas as regiões do Google Cloud. O console lista apenas as versões disponíveis para o upgrade do cluster de usuário. As etapas para fazer upgrade de um cluster de usuário usando a CLI gcloud ou o Terraform incluem uma etapa para executar gcloud container vmware clusters query-version-config e acessar as versões disponíveis para o upgrade.

Fazer upgrade de um cluster de usuários

É possível usar o gkectl, o console, a CLI gcloud ou o Terraform para fazer upgrade de um cluster de usuário. Para informações sobre como decidir qual ferramenta usar, consulte Escolher uma ferramenta para fazer upgrade de clusters de usuário.

gkectl

Preparar-se para fazer upgrade de um cluster de usuário

Siga estas etapas na estação de trabalho do administrador:

  1. Execute gkectl prepare para importar imagens do SO para o vSphere:

    gkectl prepare \
      --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  2. Se o cluster tiver um pool de nós do Windows, execute gkectl prepare windows e atualize o campo osImage para o pool de nós. Para instruções detalhadas, consulte Fazer upgrade do cluster de usuário com pools de nós do Windows.

  3. No arquivo de configuração do cluster de usuário, defina gkeOnPremVersion como a versão de destino do upgrade.

  4. Somente pools de nós do Ubuntu e do COS: especifique os pools de nós que você quer fazer upgrade. O upgrade de pools de nós separadamente do plano de controle é compatível com os pools de nós do Ubuntu e do COS, mas não com os pools de nós do Windows.

    No arquivo de configuração do cluster de usuário, indique os pools de nós que você quer fazer upgrade da seguinte maneira:

    • Para cada pool de nós que você quer atualizar, remova o campo nodePools.nodePool[i].gkeOnPremVersion ou defina-o como a string vazia.

    • Para cada pool de nós que você não quiser atualizar, defina nodePools.nodePool[i].gkeOnPremVersion como a versão atual.

    Por exemplo, suponha que o cluster de usuário esteja na versão 1.15.5-gke.41 e tenha dois pools de nós: pool-1 e pool-2. Suponha também que você queira fazer upgrade do plano de controle e de pool-1 para 1.16.3-gke.45, mas queira que pool-2 permaneça na versão 1.15.5-gke.41. A seguinte parte de um arquivo de configuração do cluster de usuário mostra como especificar esse exemplo:

    gkeOnPremVersion: 1.16.3-gke.45
    
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      cpus: 4
      memoryMB: 8192
      replicas: 3
      osImageType: ubuntu_containerd
    - name: pool-2
      gkeOnPremVersion: 1.15.5-gke.41
      cpus: 4
      memoryMB: 8192
      replicas: 5
      osImageType: ubuntu_containerd
    

Executar gkectl upgrade cluster

Há duas variações do comando gkectl upgrade cluster:

  • Assíncrona: (recomendado)
    Com a variação assíncrona, o comando inicia o upgrade e é concluído. Você não precisa verificar a saída do comando durante todo o upgrade. Em vez disso, você pode verificar periodicamente o progresso do upgrade executando gkectl list clusters e gkectl describe clusters. Para usar a variação assíncrona, inclua a sinalização --async no comando.

  • Síncrona:
    com a variação síncrona, o comando gkectl upgrade cluster gera mensagens de status para a estação de trabalho do administrador conforme o upgrade.

Upgrade assíncrono

  1. Na estação de trabalho do administrador, inicie um upgrade assíncrono:

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG \
      --async
    

    O comando anterior é concluído, e você pode continuar usando a estação de trabalho do administrador enquanto o upgrade está em andamento.

  2. Para ver o status do upgrade, faça o seguinte:

    gkectl list clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    A saída mostra um valor para o cluster STATE. Se o cluster ainda estiver sendo atualizado, o valor de STATE vai ser UPGRADING. Exemplo:

    NAMESPACE             NAME    READY   STATE       AGE   VERSION
    my-uc-gkeonprem-mgmt  my-uc   False   UPGRADING   9h    1.15.0-gke.1
    

    Os valores possíveis para STATE são PROVISIONING, UPGRADING, DELETING, UPDATING, RUNNING, RECONCILING, ERROR e UNKNOWN.

  3. Para ver mais detalhes sobre o progresso do upgrade e os eventos do cluster, faça o seguinte:

    gkectl describe clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --cluster USER_CLUSTER_NAME -v 5
    

    A saída mostra o recurso personalizado OnPremUserCluster para o cluster de usuário especificado, que inclui status, condições e eventos do cluster.

    Registramos eventos do início e fim de cada fase crítica do upgrade, incluindo:

    • ControlPlaneUpgrade
    • MasterNodeUpgrade
    • AddonsUpgrade
    • NodePoolsUpgrade

    Exemplo de saída:

    Events:
    Type    Reason                      Age    From                            Message
    ----     ------                     ----   ----                            -------
    Normal  NodePoolsUpgradeStarted     22m    onprem-user-cluster-controller  Creating or updating node pools: pool-2: Creating or updating node pool
    Normal  AddonsUpgradeStarted        22m    onprem-user-cluster-controller  Creating or updating addon workloads
    Normal  ControlPlaneUpgradeStarted  25m    onprem-user-cluster-controller  Creating or updating cluster control plane workloads: deploying user-kube-apiserver-base, ...: 14/15 pods are ready
    Normal  ControlPlaneUpgradeFinished 23m    onprem-user-cluster-controller  Control plane is running
    
  4. Quando o upgrade for concluído, gkectl list clusters vai mostrar um STATUS de RUNNING:

    NAMESPACE             NAME    READY   STATE     AGE     VERSION
    my-uc-gkeonprem-mgmt  my-uc   True    RUNNING   9h      1.15.0-gke.1
    

    Além disso, quando o upgrade for concluído, gkectl describe clusters vai mostrar um campo LastGKEOnPremVersion em Status. Exemplo:

    Status:
    Cluster State:  RUNNING
    LastGKEOnOremVersion:  1.15.0-gke.1
    

Resolver problemas de upgrade assíncrono

Para fazer um upgrade assíncrono, o tempo limite é baseado no número de nós no cluster. Se o upgrade demorar mais que o tempo limite, o estado do cluster vai ser alterado de UPGRADING para ERROR, com um evento dizendo que a operação de upgrade expirou. O estado ERROR significa que o upgrade está demorando mais do que o esperado, mas não foi encerrado. O controlador continua a reconciliação e a repetir a operação.

Geralmente, uma expiração é o resultado de um impasse causado por um PodDisruptionBudget (PDB). Nesse caso, não é possível remover os pods dos nós antigos e os nós antigos não podem ser reduzidos. Se a remoção do pod demorar mais de 10 minutos, vamos gravar um evento no objeto OnPremUserCluster. É possível capturar o evento executando gkectl describe clusters. Ajuste o PDB para permitir que o nó seja reduzido. Depois disso, vai ser possível continuar e concluir o upgrade.

Evento de exemplo:

Warning  PodEvictionTooLong  96s (x2 over 4m7s)  onprem-user-cluster-controller
Waiting too long(>10m0.00000003s) for (kube-system/coredns-856d6dbfdf-dl6nz) eviction.

Além disso, quando um upgrade é bloqueado ou falha, é possível executar gkectl diagnose para verificar problemas comuns do cluster. Com base no resultado, é possível decidir se você vai realizar uma correção manual ou entrar em contato com a equipe de suporte do Anthos para receber assistência.

Upgrade síncrono

O comando gkectl upgrade executa verificações de simulação. Se as verificações de simulação falharem, o comando vai ser bloqueado. Corrija as falhas ou use a flag --skip-preflight-check-blocking. Só ignore as verificações de simulação se tiver certeza de que não há falhas críticas.

Siga estas etapas na estação de trabalho de administrador:

  1. Fazer upgrade do cluster:

    gkectl upgrade cluster \
      --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config USER_CLUSTER_CONFIG_FILE
    
  2. Se você estiver fazendo upgrade para a versão 1.14.0 ou mais recente, um novo arquivo kubeconfig será gerado para o cluster de usuário que substituirá qualquer arquivo existente. Para acessar os detalhes do cluster no arquivo, execute o seguinte comando:

    kubectl config view --kubeconfig USER_CLUSTER_KUBECONFIG

Fazer upgrade de outros pools de nós

Se você fez upgrade apenas do plano de controle do cluster de usuário ou do plano de controle e alguns, mas não todos, os pools de nós, siga estas etapas para fazer upgrade dos pools de nós:

  1. Edite o arquivo de configuração do cluster de usuário. Para cada pool de nós que você quer atualizar, remova o campo nodePools.nodePool[i].gkeOnPremVersion ou defina-o como a string vazia, conforme mostrado no exemplo a seguir:

    gkeOnPremVersion: 1.16.3-gke.45
    
    nodePools:
    - name: pool-1
      gkeOnPremVersion: ""
      cpus: 4
      memoryMB: 8192
      replicas: 3
      osImageType: ubuntu_containerd
    - name: pool-2
      gkeOnPremVersion: ""
      cpus: 4
      memoryMB: 8192
      replicas: 5
      osImageType: ubuntu_containerd
    
  2. Execute gkectl update cluster para aplicar a alteração:

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

    Substitua:

    • ADMIN_CLUSTER_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador;

    • USER_CLUSTER_CONFIG: o caminho do arquivo de configuração do cluster de usuário.

Se você encontrar um problema depois de fazer upgrade de um pool de nós, poderá reverter para a versão anterior. Para mais informações, consulte Como reverter um pool de nós após um upgrade.

Retomar um upgrade

Se um upgrade de cluster de usuário for interrompido, é possível retomá-lo executando o mesmo comando de upgrade com a sinalização --skip-validation-all:

gkectl upgrade cluster \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
  --config USER_CLUSTER_CONFIG_FILE \
  --skip-validation-all

Console

O upgrade de um cluster de usuário exige algumas alterações no cluster de administrador. O console faz o seguinte automaticamente:

  • Registra o cluster de administrador na API GKE On-Prem se ele ainda não estiver inscrito.

  • Faz o download e implanta um pacote de componentes no cluster de administrador. A versão dos componentes corresponde à versão especificada para o upgrade. Esses componentes permitem que o cluster de administrador gerencie clusters de usuário nessa versão.

Para fazer upgrade de um cluster de usuário, faça o seguinte:

  1. No console, acesse a página de visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Selecione o projeto do Cloud e, em seguida, o cluster que você quer atualizar.

  3. No painel Detalhes, clique em Mais detalhes.

  4. Na seção Princípios básicos do cluster, clique em Fazer upgrade.

  5. Na lista Escolher versão de destino, selecione para qual versão quer fazer upgrade. A lista selecionada contém apenas as versões de patch mais recentes.

  6. Clique em Fazer upgrade.

Antes do upgrade do cluster, as verificações de simulação são executadas para validar o status do cluster e a integridade do nó. Se as verificações de simulação forem aprovadas, o cluster de usuário será atualizado. A atualização leva cerca de 30 minutos.

Para ver o status do upgrade, clique em Mostrar detalhes na guia Detalhes do cluster.

CLI da gcloud

O upgrade de um cluster de usuário exige algumas alterações no cluster de administrador. O comando gcloud container vmware clusters upgrade faz automaticamente o seguinte:

  • Registra o cluster de administrador na API GKE On-Prem se ele ainda não estiver inscrito.

  • Faz o download e implanta um pacote de componentes no cluster de administrador. A versão dos componentes corresponde à versão especificada para o upgrade. Esses componentes permitem que o cluster de administrador gerencie clusters de usuário nessa versão.

Para fazer upgrade de um cluster de usuário, faça o seguinte:

  1. Atualize os componentes da Google Cloud CLI:

    gcloud components update
    
  2. Somente pools de nós do Ubuntu e do COS: se você quiser fazer upgrade apenas do plano de controle do cluster de usuário e deixar todos os pools de nós na versão atual, altere a política de upgrade no cluster:

    gcloud container vmware clusters update USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --upgrade-policy control-plane-only=True
    

    Substitua:

    • USER_CLUSTER_NAME: o nome do cluster de usuário que será atualizado.

    • PROJECT_ID: o ID do projeto host da frota em que o cluster de usuário faz parte. Esse é o projeto especificado quando o cluster foi criado. Se você criou o cluster usando gkectl, esse é o ID do projeto no campo gkeConnect.projectID no arquivo de configuração do cluster.

    • REGION: a região do Google Cloud em que a API GKE On-Prem executa e armazena metadados. Se você criou o cluster usando um cliente da API GKE On-Prem, essa é a região selecionada ao criar o cluster. Se você criou o cluster usando gkectl, essa é a região que você especificou quando registrou o cluster na API GKE On-Prem.

  3. Veja uma lista das versões disponíveis para upgrade:

    gcloud container vmware clusters query-version-config \
      --cluster=USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION
    

    A saída deste comando é semelhante a:

    versions:
    - version: 1.16.3-gke.45
    - version: 1.16.2-gke.28
    - version: 1.16.1-gke.45
    - version: 1.16.0-gke.669
    - version: 1.15.6-gke.25
    - version: 1.15.5-gke.41
    
    An Anthos version must be made available on the admin cluster ahead of the user
    cluster creation or upgrade. Versions annotated with isInstalled=true are
    installed on the admin cluster for the purpose of user cluster creation or
    upgrade whereas other version are released and will be available for upgrade
    once dependencies are resolved.
    
    To install the version in the admin cluster, run:
    $ gcloud container vmware admin-clusters update my-admin-cluster --required-platform-version=VERSION
    

    Ignore a mensagem após a lista de versões. Não importa se a versão para a qual você está fazendo upgrade está instalada no cluster de administrador. O comando upgrade faz o download e implanta um pacote dos componentes que corresponde à versão especificada no comando upgrade.

  4. Faça upgrade do cluster. Se você executou o comando update para alterar a política de upgrade para control-plane-only=True, apenas o plano de controle do cluster será atualizado. Caso contrário, o plano de controle do cluster e todos os pools de nós vão ser atualizados.

    gcloud container vmware clusters upgrade USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --version=VERSION
    

    Substitua VERSION pela versão do GKE no VMware para que você quer fazer upgrade. Especifique uma versão da saída do comando anterior. Recomendamos que você faça upgrade para a versão de patch mais recente.

    A saída deste comando terá esta aparência:

    Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
    

    No exemplo de saída, a string operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 é o OPERATION_ID da operação de longa duração. Descubra o status da operação executando o comando a seguir em outra janela de terminal:

    gcloud container vmware operations describe OPERATION_ID \
      --project=PROJECT_ID \
      --location=REGION
    

Fazer upgrade dos pools de nós

Se você optar por fazer upgrade apenas do plano de controle do cluster de usuário, siga estas etapas para fazer o upgrade dos pools de nós após o upgrade do plano de controle do cluster de usuário:

  1. Receba uma lista de pools de nós no cluster de usuário:

    gcloud container vmware node-pools list
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION
    
  2. Para cada pool de nós que você quer atualizar, execute o seguinte comando:

    gcloud container vmware node-pools update NODE_POOL_NAME \
      --cluster=USER_CLUSTER_NAME  \
      --project=PROJECT_ID \
      --location=REGION \
      --version=VERSION
    

Terraform

  1. Atualize os componentes da Google Cloud CLI:

    gcloud components update
    
  2. Se você ainda não tiver feito isso, registre o cluster de administrador na API GKE On-Prem. Depois que o cluster for registrado na API GKE On-Prem, não será necessário fazer esta etapa novamente.

  3. Veja uma lista das versões disponíveis para upgrade:

    gcloud container vmware clusters query-version-config \
      --cluster=USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION
    

    Substitua:

    • USER_CLUSTER_NAME: o nome do cluster do usuário.

    • PROJECT_ID: o ID do projeto da frota em que o cluster de usuário é membro. Esse é o projeto especificado quando o cluster foi criado. Se você criou o cluster usando gkectl, esse é o ID do projeto no campo gkeConnect.projectID no arquivo de configuração do cluster.

    • REGION: a região do Google Cloud em que a API GKE On-Prem executa e armazena metadados. No arquivo main.tf usado para criar o cluster de usuário, a região está no campo location do recurso de cluster.

    A saída deste comando é semelhante a:

    versions:
    - version: 1.16.3-gke.45
    - version: 1.16.2-gke.28
    - version: 1.16.1-gke.45
    - version: 1.16.0-gke.669
    - version: 1.15.6-gke.25
    - version: 1.15.5-gke.41
    
    An Anthos version must be made available on the admin cluster ahead of the user
    cluster creation or upgrade. Versions annotated with isInstalled=true are
    installed on the admin cluster for the purpose of user cluster creation or
    upgrade whereas other version are released and will be available for upgrade
    once dependencies are resolved.
    
    To install the version in the admin cluster, run:
    $ gcloud container vmware admin-clusters update my-admin-cluster --required-platform-version=VERSION
    
  4. Faça o download da nova versão dos componentes e implante-os no cluster de administrador:

    gcloud vmware admin-clusters update ADMIN_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --required-platform-version=VERSION
    

    Esse comando faz o download da versão dos componentes especificados em --required-platform-version no cluster de administrador e, em seguida, implanta os componentes. Esses componentes permitem que o cluster de administrador gerencie clusters de usuário nessa versão.

  5. No arquivo main.tf usado para criar o cluster de usuário, altere on_prem_version no recurso de cluster para a nova versão.

  6. Somente pools de nós do Ubuntu e do COS: se você quiser fazer upgrade apenas do plano de controle do cluster de usuário e deixar todos os pools de nós na versão atual, adicione o seguinte ao recurso do cluster:

    upgrade_policy {
      control_plane_only = true
    }
    
  7. Inicialize e crie o plano do Terraform:

    terraform init
    

    O Terraform instala todas as bibliotecas necessárias, como o provedor do Google Cloud.

  8. Revise a configuração e faça alterações, se necessário:

    terraform plan
    
  9. Aplique o plano do Terraform para criar o cluster de usuário:

    terraform apply
    

Fazer upgrade dos pools de nós

Se você optar por fazer upgrade apenas do plano de controle do cluster de usuário, siga as etapas abaixo para fazer upgrade de outros pools de nós após o upgrade do plano de controle do cluster de usuário:

  1. Em main.tf no recurso para cada pool de nós que você quer atualizar, adicione o seguinte:

    on_prem_version = "VERSION"
    

    Exemplo:

    resource "google_gkeonprem_vmware_node_pool" "nodepool-basic" {
    name = "my-nodepool"
    location = "us-west1"
    vmware_cluster = google_gkeonprem_vmware_cluster.default-basic.name
    config {
      replicas = 3
      image_type = "ubuntu_containerd"
      enable_load_balancer = true
    }
    on_prem_version = "1.16.0-gke.0"
    }
    
  2. Inicialize e crie o plano do Terraform:

    terraform init
    
  3. Revise a configuração e faça alterações, se necessário:

    terraform plan
    
  4. Aplique o plano do Terraform para criar o cluster de usuário:

    terraform apply
    

Fazer upgrade do cluster de administrador

Antes de começar:

  • Determine se os certificados estão atualizados e, se necessário, renove-os.

  • Se você estiver fazendo upgrade para a versão 1.13 ou mais recente, primeiro vai precisar registrar o cluster de administrador preenchendo a seção gkeConnect no arquivo de configuração do cluster de administrador. Execute o comando update cluster com as mudanças do arquivo de configuração.

Siga as etapas desta seção na nova estação de trabalho do administrador. Verifique se gkectl e os clusters estão no nível de versão apropriado para o upgrade e se você fez o download do pacote apropriado.

  1. Verifique se o campo bundlepath no arquivo de configuração do cluster de administrador corresponde ao caminho do pacote que você quer fazer upgrade.

    Se você fizer outras alterações nos campos do arquivo de configuração do cluster de administrador, essas alterações serão ignoradas durante o upgrade. Para que essas alterações entrem em vigor, primeiro faça upgrade do cluster e, em seguida, execute um comando update cluster com as alterações no arquivo de configuração para fazer outras alterações no cluster.

  2. Execute este comando:

    gkectl upgrade admin \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config ADMIN_CLUSTER_CONFIG_FILE \
        FLAGS
    

    Substitua:

    • ADMIN_CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster de administrador.

    • ADMIN_CLUSTER_CONFIG_FILE são os arquivos de configuração do cluster de administrador do GKE no VMware na nova estação de trabalho de administrador.

    • FLAGS: um conjunto opcional de sinalizações. Por exemplo, inclua a sinalização --skip-validation-infra para pular a verificação da infraestrutura do vSphere.

Se você estiver fazendo upgrade para a versão 1.14.0 ou superior, um novo arquivo kubeconfig será gerado para o cluster de administrador que substituirá qualquer arquivo existente. Para acessar os detalhes do cluster no arquivo, execute o seguinte comando:

  kubectl config view --kubeconfig ADMIN_CLUSTER_KUBECONFIG 

Se você fez o download de um pacote completo e executou os comandos gkectl prepare e gkectl upgrade admin, exclua o pacote completo para economizar espaço em disco na estação de trabalho do administrador. Use este comando:

rm /var/lib/gke/bundles/gke-onprem-vsphere-${TARGET_VERSION}-full.tgz

Como retomar um upgrade de cluster de administrador

Se o upgrade de um cluster de administrador for interrompido ou falhar, o upgrade poderá ser retomado se o ponto de verificação do cluster de administrador contiver o estado necessário para restaurar o estado antes da interrupção.

Aviso: não repare o admin-master com gkectl repair admin-master após uma tentativa de upgrade com falha. Isso fará com que o cluster de administrador fique em um estado inadequado.

Siga estas etapas:

  1. Verifique se o plano de controle do administrador está íntegro antes de iniciar a tentativa de upgrade inicial. Consulte Como diagnosticar problemas de cluster. Conforme discutido neste tópico, execute o comando gkectl diagnose cluster para o cluster de administrador.

  2. Se o plano de controle do administrador não estiver íntegro antes da tentativa inicial de upgrade, repare o plano de controle do administrador com o comando gkectl repair admin-master.

  3. Ao executar o comando de upgrade novamente depois que um upgrade for interrompido ou falhar, use o mesmo pacote e versão de destino do que você fez na tentativa anterior.

Quando você executa o comando de upgrade novamente, o upgrade retomado recria o estado do cluster de administrador do checkpoint e executa todo o upgrade novamente. A partir da versão 1.12.0, se o plano de controle do administrador não estiver íntegro, o processo de upgrade vai ser atualizado diretamente para a versão de destino sem tentar restaurar o cluster de administrador na versão de origem antes de dar continuidade ao upgrade.

O upgrade será retomado a partir do ponto em que falhou ou saiu, se o checkpoint do cluster de administrador estiver disponível. Se o checkpoint não estiver disponível, o upgrade voltará a depender do plano de controle do administrador. Portanto, o plano de controle de administrador precisa estar íntegro para prosseguir com o upgrade. Após um upgrade bem-sucedido, o checkpoint é gerado novamente.

Se o gkectl sair inesperadamente durante um upgrade de cluster de administrador, o cluster de tipo não será limpo. Antes de executar o comando de upgrade novamente para retomar o upgrade, exclua o cluster de tipo:

docker stop gkectl-control-plane && docker rm gkectl-control-plane

Depois de excluir o cluster de tipo, execute o comando de upgrade novamente.

Reverter uma estação de trabalho de administrador após um upgrade

É possível reverter a estação de trabalho do administrador para a versão usada antes do upgrade.

Durante o upgrade, gkeadm registra a versão anterior no arquivo de informações de saída. Durante a reversão, gkeadm usa a versão listada para fazer o download do arquivo mais antigo.

Para reverter a estação de trabalho do administrador para a versão anterior, faça o seguinte:

gkeadm rollback admin-workstation --config=AW_CONFIG_FILE

Será possível omitir --config=AW_CONFIG_FILE se o arquivo de configuração da estação de trabalho do administrador for o admin-ws-config.yaml padrão. Caso contrário, substitua AW_CONFIG_FILE pelo caminho do arquivo de configuração da estação de trabalho de administrador.

O comando de reversão executa as seguintes etapas:

  1. Faz o download da versão de reversão de gkeadm.
  2. Faz o backup do diretório inicial da estação de trabalho de administrador atual.
  3. Cria uma nova estação de trabalho de administrador usando a versão de reversão do gkeadm.
  4. Exclui a estação de trabalho de administrador original.

Instalar o pacote com uma versão diferente para fazer upgrade

Se você fizer upgrade da estação de trabalho, um pacote com uma versão correspondente será instalado nela para fazer o upgrade dos clusters. Se você quiser uma versão diferente, siga estas etapas para instalar um pacote para TARGET_VERSION, que é a versão para que você quer fazer upgrade.

  1. Para verificar as versões atuais de gkectl e de cluster, execute este comando. Use a sinalização --details/-d para informações mais detalhadas.

    gkectl version --kubeconfig ADMIN_CLUSTER_KUBECONFIG --details
    

    A resposta mostra informações sobre as versões do cluster.

  2. Com base no resultado, procure os seguintes problemas e corrija-os conforme necessário.

    • Se a versão atual do cluster de administrador for mais recente que a versão secundária da TARGET_VERSION, faça upgrade de todos os clusters para uma versão secundária inferior à TARGET_VERSION.

    • Se a versão do gkectl for anterior à 1.11 e você quiser fazer upgrade para a 1.12.x, precisará fazer vários upgrades. Faça upgrade de uma versão secundária de cada vez até chegar à versão 1.11.x e siga as instruções neste tópico.

    • Se a versão gkectl for anterior à TARGET_VERSION, faça upgrade da estação de trabalho do administrador para o TARGET_VERSION.

  3. Depois de determinar que gkectl e as versões de cluster são apropriadas para um upgrade, faça o download do pacote.

    Verifique se o tarball do pacote já existe na estação de trabalho do administrador.

    stat /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz

    Se o pacote não estiver na estação de trabalho de administrador, faça o download dele.

    gsutil cp gs://gke-on-prem-release/gke-onprem-bundle/TARGET_VERSION/gke-onprem-vsphere-TARGET_VERSION.tgz /var/lib/gke/bundles/
    

  4. Instale o pacote.

    gkectl prepare --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Substitua ADMIN_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig. É possível omitir essa sinalização se o arquivo estiver no diretório atual e tiver o nome kubeconfig.

  5. Liste as versões de cluster disponíveis e verifique se a versão de destino está incluída nas versões disponíveis do cluster de usuário.

    gkectl version --kubeconfig ADMIN_CLUSTER_KUBECONFIG --details

Agora você pode criar um cluster de usuário na versão de destino ou fazer upgrade de um cluster de usuário para a versão de destino.

Como solucionar problemas do processo de upgrade

Se você tiver um problema ao seguir o processo de upgrade recomendado, siga estas recomendações para resolvê-los. Essas sugestões presumem que você começou com a configuração da versão 1.11.x e está seguindo o processo de upgrade recomendado.

Veja também Solução de problemas na criação e no upgrade de clusters.

Como solucionar problemas de upgrade de cluster de usuário

Suponha que você encontre um problema com a versão de upgrade ao fazer upgrade de um cluster de usuário. Você determina com o Suporte do Google que o problema será corrigido em uma próxima versão de patch. Você pode prosseguir da seguinte forma:

  1. Continue usando a versão atual para produção.
  2. Teste a versão do patch em um cluster que não seja de produção quando ele for lançado.
  3. Quando você tiver certeza, faça upgrade de todos os clusters de usuário de produção para a versão de lançamento do patch.
  4. Faça upgrade do cluster de administrador para a versão de lançamento do patch.

Como solucionar problemas de upgrade de cluster de administrador

Se você encontrar um problema ao fazer upgrade do cluster de administrador, entre em contato com o Suporte do Google para resolvê-lo.

Enquanto isso, com o novo fluxo de upgrade, você ainda pode aproveitar os novos recursos de cluster de usuário sem ser bloqueado pelo upgrade do cluster de administrador, o que permite reduzir a frequência de upgrade do cluster de administrador se quiser. O processo de upgrade pode prosseguir da seguinte maneira:

  1. Fazer upgrade dos clusters de usuários de produção para a versão 1.12.x
  2. Manter o cluster de administrador na versão anterior e continuar recebendo patches de segurança
  3. Testar o upgrade do cluster de administrador de 1.11.x para 1.12.x em um ambiente de teste e informar eventuais problemas
  4. Se o problema for resolvido por uma versão de patch 1.12.x, você poderá fazer upgrade do cluster de administrador de produção para essa versão de patch, se quiser

Problemas conhecidos das versões recentes

Os problemas conhecidos a seguir podem afetar os upgrades se você estiver fazendo upgrade da versão 1.7 ou posterior.

Consulte também Problemas conhecidos.

A atualização da estação de trabalho do administrador pode falhar se o disco de dados estiver quase cheio

Se você atualizar a estação de trabalho de administrador com o comando gkectl upgrade admin-workstation, o upgrade poderá falhar se o disco de dados estiver quase cheio, porque o sistema tentará fazer o backup da estação de trabalho de administrador atual localmente durante o upgrade para uma nova estação de trabalho de administrador. Se não for possível liberar espaço suficiente no disco de dados, use o comando gkectl upgrade admin-workstation com a sinalização adicional --backup-to-local=false para evitar fazer um backup local da estação de trabalho do administrador atual.

Interrupção de cargas de trabalho com PodDisruptionBudgets

Atualmente, o upgrade de clusters pode causar interrupção ou inatividade para cargas de trabalho que usam PodDisruptionBudgets (PDBs).

Falha no processo de upgrade dos nós

Se você tiver objetos PodDisruptionBudget configurados que não podem permitir outras interrupções, o upgrade dos nós poderá falhar no upgrade para a versão do plano de controle após várias tentativas. Para evitar essa falha, recomendamos que você escalone verticalmente Deployment ou HorizontalPodAutoscaler para permitir que o nó seja drenado enquanto respeita a configuração PodDisruptionBudget.

Para ver todos os objetos PodDisruptionBudget que não permitem interrupções:

kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'

Apêndice

Sobre as regras do VMware DRS ativadas na versão 1.1.0-gke.6

A partir da versão 1.1.0-gke.6, o GKE no VMware cria automaticamente regras de antiafinidade do VMware Distributed Resource Scheduler (DRS) para os nós do cluster de usuário, fazendo com que eles sejam distribuídos por pelo menos três hosts físicos no seu data center (link em inglês). A partir da versão 1.1.0-gke.6, esse recurso é ativado automaticamente para clusters novos e atuais.

Antes de fazer upgrade, verifique se o ambiente vSphere atende às condições a seguir:

Caso seu ambiente do vSphere não atenda às condições anteriores, você ainda pode fazer upgrade, mas, para atualizar um cluster de usuário de 1.3.x para 1.4.x, você precisará desativar grupos antiafinidade. Para mais informações, consulte este problema conhecido nas notas da versão do GKE no VMware.

Sobre a inatividade durante upgrades

Resource Descrição
Cluster de administrador

Quando um cluster de administrador fica inativo, os planos de controle do cluster de usuário e as cargas de trabalho em clusters de usuário continuam em execução, a menos que tenham sido afetados por uma falha que causou a inatividade.

Plano de controle do cluster de usuário

Normalmente, não há inatividade perceptível nos planos de controle do cluster de usuário. No entanto, conexões de longa duração com o servidor da API Kubernetes podem falhar e precisam ser restabelecidas. Nesses casos, o autor da chamada da API precisa tentar novamente até estabelecer uma conexão. No pior dos casos, pode haver até um minuto de inatividade durante um upgrade.

Nós do cluster de usuário

Se um upgrade exigir uma alteração nos nós do cluster de usuário, o GKE no VMware recriará os nós de maneira contínua e reagendará os pods em execução nesses nós. É possível evitar o impacto nas suas cargas de trabalho configurando PodDisruptionBudgets e regras antiafinidade apropriados.

Recriar um arquivo de informações se estiver ausente

Se o arquivo de informações de saída da estação de trabalho do administrador estiver ausente, recrie esse arquivo para continuar o upgrade. Esse arquivo foi criado durante a criação da estação de trabalho. Se você fez o upgrade, ele foi atualizado com novas informações.

O arquivo de informações de saída tem este formato:

Admin workstation version: GKEADM_VERSION
Created using gkeadm version: GKEADM_VERSION
VM name: ADMIN_WS_NAME
IP: ADMIN_WS_IP
SSH key used: FULL_PATH_TO_ADMIN_WS_SSH_KEY
To access your admin workstation:
ssh -i FULL-PATH-TO-ADMIN-WS-SSH-KEY ubuntu@ADMIN-WS-IP

Veja um exemplo de arquivo de informações de saída:

Admin workstation version: v1.10.3-gke.49
Created using gkeadm version: v1.10.3-gke.49
VM name: admin-ws-janedoe
IP: 172.16.91.21
SSH key used: /usr/local/google/home/janedoe/.ssh/gke-admin-workstation
Upgraded from (rollback version): v1.10.0-gke.194
To access your admin workstation:
ssh -i /usr/local/google/home/janedoe/.ssh/gke-admin-workstation ubuntu@172.16.91.21

Crie o arquivo em um editor, substituindo os parâmetros adequados. Salve o arquivo com um nome de arquivo igual ao da VM no diretório em que o gkeadm é executado. Por exemplo, se o nome da VM for admin-ws-janedoe, salve o arquivo como admin-ws-janedoe.

A seguir