Esegui lo strumento pre-upgrade

Questo documento mostra come eseguire uno strumento autonomo in preparazione a un upgrade. Prima di eseguire l'upgrade di un cluster di amministrazione o utente con Google Distributed Cloud versione 1.9 e successive, ti consigliamo di eseguire lo strumento di pre-upgrade.

Per eseguire lo strumento, utilizza lo script bash in questo documento che utilizza algoritmi di hash sicuri (SHA) hardcoded. Per ogni release dello strumento, questo documento verrà aggiornato con il nuovo SHA. Lo script crea un job Kubernetes per eseguire una versione specifica dei controlli preflight a seconda della versione a cui stai eseguendo l'upgrade.

Controlli pre-upgrade

Lo strumento controlla quanto segue prima di eseguire l'upgrade di un cluster utente:

Categoria Descrizione
Stato del cluster
  • Convalida i PDB in tutti gli spazi dei nomi del cluster di amministrazione.
  • Convalida i PDB in tutti gli spazi dei nomi del cluster utente.
  • Verifica che un upgrade precedente del cluster di amministrazione sia stato completato correttamente.
Configurazioni
  • Consiglia la versione della patch a cui eseguire l'upgrade.
  • Verifica se la chiave SA di accesso ai componenti è stata cancellata come descritto nel problema noto correlato.
  • Se stai eseguendo l'upgrade alla versione 1.10, ti avvisa se dovrai applicare la soluzione alternativa in questo problema noto.

Lo strumento controlla quanto segue prima di eseguire l'upgrade di un cluster di amministrazione:

Categoria Descrizione
Stato del cluster Convalida i PodDisruptionBudgets (PDB) in tutti gli spazi dei nomi del cluster di amministrazione.
Configurazioni

Prepararsi a eseguire lo strumento

  1. Esegui l'upgrade della workstation di amministrazione se non l'hai già fatto.

  2. Esegui gkectl prepare per importare le immagini del sistema operativo in vSphere, se non l'hai già fatto:

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

    Sostituisci quanto segue:

    • TARGET_VERSION: la versione della patch di Google Distributed Cloud a cui vuoi eseguire l'upgrade. Il formato del numero di versione deve essere una versione della patch completa, ad esempio 1.13.10-gke.42.

    • ADMIN_CLUSTER_KUBECONFIG: il percorso del kubeconfig del cluster di amministrazione.

  3. Se utilizzi un registro privato, scarica l'immagine container preflight con il digest Docker fornito e caricala nel registro privato. Se non utilizzi un registro privato, vai al passaggio successivo.

    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
    

    Sostituisci REGISTRY_ADDRESS con l'indirizzo del registro privato.

  4. Nello script bash seguente, imposta i valori per questi segnaposto:

    • ADMIN_CLUSTER_KUBECONFIG: il percorso del kubeconfig del cluster di amministrazione.

    • REGISTRY_ADDRESS: se il cluster di amministrazione utilizza un registro privato, questo è l'indirizzo del registro privato che hai specificato nel passaggio precedente. Se non utilizzi un registro privato, specifica il registro pubblico: 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. Salva lo script bash sopra in un file denominato pre-upgrade.sh e rendilo eseguibile:

    chmod +x pre-upgrade.sh
    

Esegui lo script

  1. Gli argomenti che fornisci quando esegui lo script dipendono dal fatto che tu stia eseguendo l'upgrade di un cluster utente o di un cluster di amministrazione:

    • Prima di eseguire l'upgrade di un cluster di amministrazione, esegui lo script nel seguente modo:
    ./pre-upgrade.sh TARGET_VERSION
    
    • Prima di eseguire l'upgrade di un cluster utente:
    ./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
    

    Sostituisci USER_CLUSTER_NAME con il nome del cluster utente di cui eseguirai l'upgrade.

    L'output è simile al seguente:

    job.batch/pre-upgrade-2023-0822-213551 created
    
  2. Esegui il comando seguente sui pod controllati dal job per ottenere un elenco dei risultati della convalida.

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

    Sostituisci quanto segue:

    • JOB_NAME: il nome del job che lo script restituisce dal passaggio precedente.

    • JOB_NAMESPACE: il valore che imposti dipende dal fatto che tu stia eseguendo l'upgrade di un cluster di amministrazione o utente. Se stai eseguendo l'upgrade di un cluster di amministrazione, specifica kube-system. Se stai eseguendo l'upgrade di un cluster utente, specifica USER_CLUSTER_NAME-gke-onprem-mgmt.

    Attendi alcuni minuti affinché il job venga completato o raggiunga il limite di backoff e non vada a buon fine. Nei risultati, esamina il Reason di qualsiasi controllo con lo stato Warning, Unknown o Failure per verificare se puoi risolvere il problema.

  3. Prima di eseguire l'upgrade dei cluster, esegui il comando seguente per eliminare il job:

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