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éparation à la 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 un job Kubernetes pour exécuter une version spécifique des vérifications préalables en fonction de la version vers laquelle vous effectuez la mise à niveau.
Vérifications préalables à la mise à niveau
L'outil vérifie les éléments suivants avant que vous ne mettiez à niveau un cluster d'utilisateur :
Catégorie | Description |
---|---|
État du cluster |
|
Configurations |
|
L'outil vérifie les éléments suivants avant que vous ne mettiez à 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
Mettez à niveau votre poste de travail administrateur si vous ne l'avez pas déjà fait.
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 passer. Le format du numéro de version doit être une version de correctif complète, comme1.13.10-gke.42
.ADMIN_CLUSTER_KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster d'administrateur.
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é.Dans le script Bash suivant, définissez les 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 de 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
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
Les arguments que vous fournissez lorsque vous exécutez le 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
Exécutez la commande suivante sur les pods contrôlés par le job 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 du job dans les résultats du script exécuté à l'étape précédente.JOB_NAMESPACE
: la valeur que vous définissez dépend selon que vous mettez à niveau un cluster d'administrateur ou d'utilisateur. Si vous mettez à niveau un cluster d'administrateur, spécifiezkube-system
. Si vous mettez à niveau un cluster d'utilisateur, spécifiezUSER_CLUSTER_NAME-gke-onprem-mgmt
.
Attendez quelques minutes que le job soit terminé ou qu'il atteigne la limite de délai d'attente et échoue. Dans les résultats, examinez
Reason
pour identifier les vérifications dont l'état estWarning
,Unknown
ouFailure
afin de voir si vous pouvez résoudre le problème.Avant de mettre à niveau les clusters, exécutez la commande suivante pour supprimer le job :
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG