Exécuter l'outil de pré-mise à niveau

Ce document explique comment exécuter un outil autonome en vue d'une mise à niveau. Avant de mettre à niveau un cluster d'administrateur ou d'utilisateur qui utilise Google Distributed Cloud version 1.9 ou ultérieure, nous vous recommandons d'exécuter l'outil de pré-mise à niveau.

Pour exécuter l'outil, utilisez le script bash de ce document qui utilise des algorithmes de hachage sécurisés (SHA) codés en dur. Pour chaque version de l'outil, ce document sera mis à jour avec le nouveau SHA. Le script crée une tâche Kubernetes pour exécuter une version spécifique des vérifications préliminaires en fonction de la version vers laquelle vous effectuez la mise à niveau.

Vérifications avant la mise à niveau

L'outil vérifie les points suivants avant de mettre à niveau un cluster d'utilisateur:

Catégorie Description
État du cluster
  • Valide les PDB dans tous les espaces de noms du cluster d'administrateur.
  • Valide les PDB dans tous les espaces de noms du cluster d'utilisateur.
  • Vérifie qu'une mise à niveau précédente du cluster d'administrateur s'est terminée avec succès.
Configurations
  • Recommande la version du correctif vers laquelle effectuer la mise à niveau.
  • Vérifie si la clé de sécurité d'accès au composant est effacée comme décrit dans la section Problème connu associé.
  • Si vous effectuez une mise à niveau vers la version 1.10, ce message vous avertit si vous devez appliquer la solution de ce problème connu.

L'outil vérifie les points suivants avant de mettre à niveau un cluster d'administrateur:

Catégorie Description
État du cluster Valide les PodDisruptionBudgets (PDB) dans tous les espaces de noms du cluster d'administrateur.
Configurations

Préparer l'exécution de l'outil

  1. Mettez à niveau votre poste de travail administrateur si ce n'est pas déjà fait.

  2. Si vous ne l'avez pas déjà fait, exécutez gkectl prepare pour importer des images d'OS dans vSphere:

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

    Remplacez les éléments suivants :

    • TARGET_VERSION: version du correctif Google Distributed Cloud vers laquelle vous souhaitez effectuer la mise à niveau. Le numéro de version doit avoir le format d'une version de correctif complète, telle que 1.13.10-gke.42.

    • ADMIN_CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'administrateur.

  3. Si vous utilisez un registre privé, téléchargez l'image de conteneur préliminaire avec le condensé Docker fourni, puis importez l'image dans le registre privé. Si vous n'utilisez pas de registre privé, passez à l'étape suivante.

    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
    

    Remplacez REGISTRY_ADDRESS par l'adresse du registre privé.

  4. Dans le script bash suivant, définissez des valeurs pour ces espaces réservés:

    • ADMIN_CLUSTER_KUBECONFIG: chemin d'accès au fichier kubeconfig du cluster d'administrateur.

    • REGISTRY_ADDRESS: si le cluster d'administrateur utilise un registre privé, il s'agit de l'adresse du registre privé que vous avez spécifiée à l'étape précédente. Si vous n'utilisez pas de registre privé, spécifiez le registre public: 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. Enregistrez le script bash ci-dessus dans un fichier nommé pre-upgrade.sh et rendez-le exécutable:

    chmod +x pre-upgrade.sh
    

Exécuter le script

  1. Les arguments que vous fournissez lors de l'exécution du script varient selon que vous mettez à niveau un cluster d'utilisateur ou un cluster d'administrateur:

    • Avant de mettre à niveau un cluster d'administrateur, exécutez le script comme suit:
    ./pre-upgrade.sh TARGET_VERSION
    
    • Avant de mettre à niveau un cluster d'utilisateur:
    ./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
    

    Remplacez USER_CLUSTER_NAME par le nom du cluster d'utilisateur que vous allez mettre à niveau.

    Le résultat ressemble à ce qui suit :

    job.batch/pre-upgrade-2023-0822-213551 created
    
  2. Exécutez la commande suivante sur les pods contrôlés par la tâche pour obtenir la liste des résultats de validation.

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

    Remplacez les éléments suivants :

    • JOB_NAME: nom de la tâche générée par le script à l'étape précédente.

    • JOB_NAMESPACE: la valeur que vous définissez varie selon que vous mettez à niveau un cluster d'administrateur ou d'utilisateur. Si vous mettez à niveau un cluster d'administrateur, spécifiez kube-system. Si vous mettez à niveau un cluster d'utilisateur, spécifiez USER_CLUSTER_NAME-gke-onprem-mgmt.

    Attendez quelques minutes que la tâche se termine ou qu'elle atteigne la limite d'intervalle entre les tentatives et échoue. Dans les résultats, examinez Reason pour vérifier si l'état est Warning, Unknown ou Failure afin de déterminer si vous pouvez résoudre le problème.

  3. Avant de mettre à niveau des clusters, exécutez la commande suivante pour supprimer le job:

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