Fazer upgrade de um cluster

Neste documento, explicamos como fazer upgrade da versão do Kubernetes de um cluster do Kubernetes isolado do Google Distributed Cloud (GDC). É preciso planejar upgrades rotineiros para seus clusters e garantir que eles incorporem os recursos e as correções mais recentes do Kubernetes.

Este documento é destinado a públicos como administradores de TI, engenheiros de segurança e administradores de rede no grupo de administradores de plataforma, que são responsáveis por gerenciar recursos do Kubernetes na organização. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

  • Faça o download e instale a CLI gdcloud.

  • Instale a CLI kubectl. Para mais informações, consulte Instalar componentes.

  • Gere um arquivo kubeconfig para o servidor da API de gerenciamento na zona de destino. Para mais informações, consulte Recursos zonais de cluster do Kubernetes.

  • Para receber as permissões necessárias para listar as versões de upgrade disponíveis, peça ao administrador do IAM da organização para conceder a você o papel de Administrador de cluster de usuário (user-cluster-admin).

    Se você gerencia um cluster padrão e não consegue receber a função de administrador do cluster de usuário do grupo de administradores da plataforma, peça a eles que forneçam a lista de versões de upgrade do Kubernetes disponíveis.

  • Para receber as permissões necessárias para configurar um upgrade de cluster, peça ao administrador do IAM da organização para conceder a você o papel de Administrador de cluster padrão (standard-cluster-admin).

Fazer upgrade de um cluster do Kubernetes

Use a API UserClusterUpgradeRequest para fazer upgrade de um cluster do Kubernetes.

Para fazer upgrade de um cluster do Kubernetes usando a API, siga estas etapas:

  1. Liste as versões de upgrade do Kubernetes disponíveis imprimindo o valor kubernetesVersion dos objetos UserClusterMetadata:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'
    

    Substitua MANAGEMENT_API_SERVER pelo caminho para o arquivo kubeconfig do servidor da API de gerenciamento.

    O comando retorna uma lista de versões disponíveis do Kubernetes:

    TARGET_VERSION
    1.30.1000-gke.85
    
  2. Anote a versão do Kubernetes da saída anterior para a qual você quer fazer upgrade do cluster. O targetVersion especificado na solicitação de upgrade na próxima etapa precisa ser uma dessas versões disponíveis.

  3. Solicite o upgrade do cluster criando um recurso UserClusterUpgradeRequest:

      kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
      apiVersion: cluster.gdc.goog/v1
      kind: UserClusterUpgradeRequest
      metadata:
        name: CLUSTER_NAME
        namespace: CLUSTER_NAMESPACE
      spec:
        clusterRef:
          name: CLUSTER_NAME
        targetVersion: TARGET_VERSION
      EOF
    

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho para o arquivo kubeconfig do servidor da API de gerenciamento.
    • CLUSTER_NAME: o nome do cluster do Kubernetes a ser atualizado, como user-vm-2.
    • CLUSTER_NAMESPACE: o namespace do cluster do Kubernetes. Para clusters compartilhados, use o namespace platform. Para clusters padrão, use o namespace do projeto do cluster.
    • TARGET_VERSION: a versão de destino do upgrade identificada na etapa anterior, como 1.30.1000-gke.85.

    O tempo médio de upgrade de um cluster do Kubernetes é de aproximadamente 20 minutos.

  4. Monitore o recurso UserClusterUpgradeRequest para verificar o upgrade do cluster:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        describe userclusterupgraderequest CLUSTER_NAME \
        -n CLUSTER_NAMESPACE
    

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho para o arquivo kubeconfig do servidor da API de gerenciamento.
    • CLUSTER_NAME: o nome do cluster do Kubernetes a ser atualizado, como user-vm-2.
    • CLUSTER_NAMESPACE: o namespace do cluster do Kubernetes. Para clusters compartilhados, use o namespace platform. Para clusters padrão, use o namespace do projeto do cluster.

    Inspecione a seção Spec da saída. Ele contém Current Version e Target Version. O upgrade ainda está em andamento se Current Version e Target Version forem diferentes.

    Spec:
      ...
      Current Version: 1.29.500-gke.60
      Target Version: 1.30.1000-gke.85
    Status:
      Conditions:
      - Message: Upgrade is in progress
        Reason: UpgradeInProgress
        Status: "False"
        Type: Succeeded
    

    O upgrade será concluído e bem-sucedido quando a condição Succeeded tiver um status de True e o Current Version corresponder ao Target Version.

    Se a condição Succeeded tiver o status False, o upgrade falhou. Se você encontrar erros relacionados ao upgrade do cluster do Kubernetes, entre em contato com o grupo de operadores de infraestrutura para receber mais ajuda.

Verificar os subcomponentes do cluster após o upgrade

Depois que o cluster do Kubernetes for atualizado, recomendamos confirmar se todos os subcomponentes do cluster estão íntegros.

Verifique se há falhas de subcomponentes no cluster:

  1. Verifique se não há subcomponentes que mostrem uma mensagem ReconciliationError:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get subcomponent -n CLUSTER_NAME -o json | jq -r \
        '.items[] |  select(.status.conditions[]?.reason == "ReconciliationError") |
        select(.status.featureDisabled != true) |  "Sub-Component: \(.metadata.name)
        - \(.status.conditions[]?.message)"'
    

    Se a saída retornar subcomponentes, entre em contato com seu grupo de operadores de infraestrutura para receber mais ajuda.

  2. Verifique se não há subcomponentes que mostrem uma mensagem Reconciling:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get subcomponent -n CLUSTER_NAME -o json | jq -r \
        '.items[] |  select(.status.conditions[]?.reason == "Reconciling") |
        select(.status.featureDisabled != true) | select( "\(.status)" |
        contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name)
        - \(.status.conditions[]?.message)"'
    

    Para clusters do Kubernetes com três nós de plano de controle e três nós de trabalho, o tempo de upgrade é de aproximadamente 20 minutos. Se você ainda vir subcomponentes no estado Reconciling após 20 minutos, entre em contato com seu grupo de operadores de infraestrutura para receber mais ajuda.

A seguir