Executar a ferramenta antes do upgrade

Neste documento, mostramos como executar uma ferramenta autônoma em preparação para um upgrade. Antes de fazer upgrade de um cluster de administrador ou de usuário que está na versão 1.9 e mais recentes do Google Distributed Cloud, recomendamos executar a ferramenta de pré-upgrade.

Para executar a ferramenta, use o script bash neste documento que usa um algoritmo de hash seguro (SHA) codificado. Para cada versão da ferramenta, esse documento será atualizado com o novo SHA. O script cria um job do Kubernetes para executar uma versão específica das verificações de simulação, dependendo da versão para que você está fazendo upgrade.

Verificações antes do upgrade

A ferramenta verifica o seguinte antes de você fazer upgrade de um cluster de usuário:

Categoria Descrição
Integridade do cluster
  • Valida os PDBs em todos os namespaces do cluster de administrador.
  • Valida os PDBs em todos os namespaces do cluster de usuário.
  • Valida se um upgrade anterior do cluster de administrador foi concluído com sucesso.
Configurações
  • Recomenda a versão do patch para o upgrade.
  • Se você estiver fazendo upgrade para a versão 1.10, receberá um alerta se precisar aplicar a solução alternativa neste problema conhecido.

A ferramenta verifica o seguinte antes de você fazer upgrade de um cluster de administrador:

Categoria Descrição
Integridade do cluster Valida o PodDisruptionBudgets (PDBs) em todos os namespaces do cluster de administrador.
Configurações

Preparação para executar a ferramenta

  1. Faça upgrade da estação de trabalho do administrador, caso ainda não tenha feito isso.

  2. Execute gkectl prepare para importar imagens do SO para o vSphere, caso ainda não tenha feito isso:

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

    Substitua:

    • TARGET_VERSION: a versão de patch do Google Distributed Cloud para que você quer fazer upgrade. O formato do número da versão precisa ser uma versão de patch completa, como 1.13.10-gke.42.

    • ADMIN_CLUSTER_KUBECONFIG: o caminho para o kubeconfig do cluster de administrador.

  3. Se você estiver usando um registro particular, faça o download da imagem do contêiner de simulação com o resumo do Docker fornecido e faça upload da imagem nesse registro. Se você não estiver usando um registro particular, pule para a próxima etapa.

    export SRC_IMAGE=gcr.io/gke-on-prem-release/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234
    export DST_IMAGE=REGISTRY_ADDRESS/preflight:$(date +%Y-%m%d-%H%M%S)
    docker pull $SRC_IMAGE
    docker tag $SRC_IMAGE $DST_IMAGE
    docker push $DST_IMAGE
    

    Substitua REGISTRY_ADDRESS pelo endereço de registro particular.

  4. No script bash a seguir, defina valores para esses marcadores de posição:

    • ADMIN_CLUSTER_KUBECONFIG: o caminho para o kubeconfig do cluster de administrador.

    • REGISTRY_ADDRESS: se o cluster de administrador usar um registro particular, esse será o endereço de registro particular especificado na etapa anterior. Se você não estiver usando um registro particular, especifique o registro público: gcr.io/gke-on-prem-release

    #!/bin/bash
    UPGRADE_TARGET_VERSION=${1}
    CLUSTER_NAME=${2}
    ADMIN_KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
    REGISTRY_ADDRESS=REGISTRY_ADDRESS
    pre_upgrade_namespace=kube-system
    if [[ -z "$CLUSTER_NAME" ]]
    then
      echo "Running the pre-ugprade tool before admin cluster upgrade"
    else
      echo "Running the pre-ugprade tool before user cluster upgrade"
      pre_upgrade_namespace=$CLUSTER_NAME-gke-onprem-mgmt
    fi
    kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pre-upgrade-job
      namespace: $pre_upgrade_namespace
    EOF
    kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      creationTimestamp: null
      name: pre-upgrade-job-rolebinding-in-$pre_upgrade_namespace
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: onprem-user-cluster-controller-role
    subjects:
      - kind: ServiceAccount
        name: pre-upgrade-job
        namespace: $pre_upgrade_namespace
    EOF
    kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pre-upgrade-$(date +%Y-%m%d-%H%M%S)
      namespace: $pre_upgrade_namespace
      labels:
        onprem.cluster.gke.io/job-usage: preflight
    spec:
      ttlSecondsAfterFinished: 2592000
      backoffLimit: 2
      template:
        metadata:
          labels:
            onprem.cluster.gke.io/pod-usage: preflight
        spec:
          containers:
          - name: preflight
            image: $REGISTRY_ADDRESS/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234
            imagePullPolicy: Always
            command:
            - /preflight
            - --upgrade-target-version
            - "$UPGRADE_TARGET_VERSION"
            - --cluster-name
            - "$CLUSTER_NAME"
            - --scenario
            - pre-upgrade
          restartPolicy: Never
          serviceAccountName: pre-upgrade-job
          imagePullSecrets:
          - name: private-registry-creds
    EOF
    
  5. Salve o script bash acima em um arquivo chamado pre-upgrade.sh e torne-o executável:

    chmod +x pre-upgrade.sh
    

Executar o script

  1. Os argumentos fornecidos ao executar o script dependem se está fazendo upgrade de um cluster de usuário ou de um cluster de administrador:

    • Antes de fazer upgrade de um cluster de administrador, execute o script da seguinte maneira:
    ./pre-upgrade.sh TARGET_VERSION
    
    • Antes de fazer upgrade de um cluster de usuário:
    ./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
    

    Substitua USER_CLUSTER_NAME pelo nome do cluster de usuário que você vai fazer upgrade.

    O resultado será assim:

    job.batch/pre-upgrade-2023-0822-213551 created
    
  2. Execute o comando a seguir nos pods controlados pelo job para receber uma lista de resultados de validação.

    kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Substitua:

    • JOB_NAME: é o nome do job que o script gera na etapa anterior.

    • JOB_NAMESPACE: o valor que você define depende do upgrade de um cluster de administrador ou de usuário. Se você estiver fazendo upgrade de um cluster de administrador, especifique kube-system. Se você estiver fazendo upgrade de um cluster de usuário, especifique USER_CLUSTER_NAME-gke-onprem-mgmt.

    Aguarde alguns minutos para que o job seja concluído ou atinja o limite de espera e falhe. Nos resultados, analise o Reason de qualquer verificação com o status Warning, Unknown ou Failure para ver se é possível resolver o problema.

  3. Antes de fazer upgrade dos clusters, execute o seguinte comando para excluir o job:

    kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG