Questo documento mostra come eseguire uno strumento autonomo in preparazione di un upgrade. Prima di eseguire l'upgrade di un cluster di amministrazione o utente in Google Distributed Cloud versione 1.9 e versioni 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 valore SHA. Lo script crea un job Kubernetes per eseguire una versione specifica dei controlli preliminari a seconda della versione a cui stai eseguendo l'upgrade.
Controlli di pre-upgrade
Lo strumento controlla quanto segue prima di eseguire l'upgrade di un cluster utente:
Categoria | Descrizione |
---|---|
Integrità del cluster |
|
Configurazioni |
|
Lo strumento controlla quanto segue prima di eseguire l'upgrade di un cluster di amministrazione:
Categoria | Descrizione |
---|---|
Integrità del cluster | Convalida i PodDisruptionBudgets (PDB) in tutti
gli spazi dei nomi del cluster di amministrazione. |
Configurazioni |
|
Prepararsi a eseguire lo strumento
Esegui l'upgrade della workstation di amministrazione se non l'hai ancora fatto.
Se non l'hai ancora fatto, esegui
gkectl prepare
per importare le immagini del sistema operativo in vSphere: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 patch completa, ad esempio1.13.10-gke.42
.ADMIN_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.
Se utilizzi un registry privato, scarica l'immagine del container preflight con il digest Docker fornito e caricala nel registry privato. Se non utilizzi un registry 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 registry privato.Nel seguente script bash, imposta i valori per questi segnaposto:
ADMIN_CLUSTER_KUBECONFIG
: il percorso del file kubeconfig del cluster di amministrazione.REGISTRY_ADDRESS
: se il cluster di amministrazione utilizza un registry privato, questo è l'indirizzo del registry privato specificato nel passaggio precedente. Se non utilizzi un registry privato, specifica il registry 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
Salva lo script bash riportato sopra in un file denominato
pre-upgrade.sh
e impostalo come eseguibile:chmod +x pre-upgrade.sh
Esegui lo script
Gli argomenti forniti quando esegui lo script dipendono dal fatto che stiai 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 come segue:
./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 dell'utente di cui eseguirai l'upgrade.L'output è simile al seguente:
job.batch/pre-upgrade-2023-0822-213551 created
Esegui il seguente comando sui pod controllati dal job per ottenere un elenco dei risultati di convalida.
kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Sostituisci quanto segue:
JOB_NAME
: questo è il nome del job generato dallo script nel passaggio precedente.JOB_NAMESPACE
: il valore impostato dipende dal fatto che stai eseguendo l'upgrade di un cluster di amministrazione o di un cluster utente. Se stai eseguendo l'upgrade di un cluster di amministrazione, specificakube-system
. Se stai eseguendo l'upgrade di un cluster utente, specificaUSER_CLUSTER_NAME-gke-onprem-mgmt
.
Attendi qualche minuto affinché il job venga completato o raggiunga il limite di backoff e non riesca. Nei risultati, controlla
Reason
per verificare se sono presenti controlli con lo statoWarning
,Unknown
oFailure
per capire se puoi risolvere il problema.Prima di eseguire l'upgrade dei cluster, esegui il seguente comando per eliminare il job:
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG