In diesem Dokument erfahren Sie, wie Sie ein eigenständiges Tool als Vorbereitung auf ein Upgrade ausführen. Bevor Sie einen Administrator- oder Nutzercluster in GKE on VMware Version 1.9 und höher upgraden, empfehlen wir, das Tool für das Upgrade auszuführen.
Verwenden Sie zum Ausführen des Tools das Bash-Skript in diesem Dokument, das einen hartcodierten Secure Hash Algorithms (SHA) verwendet. Dieses Dokument wird bei jedem Release des Tools mit dem neuen SHA aktualisiert. Das Skript erstellt einen Kubernetes-Job, um je nach Version, auf die Sie ein Upgrade ausführen, eine bestimmte Version von Preflight-Prüfungen auszuführen.
Prüfungen vor dem Upgrade
Das Tool prüft Folgendes, bevor Sie einen Nutzercluster upgraden:
Kategorie | Beschreibung |
---|---|
Clusterzustand |
|
Konfigurationen |
|
Das Tool prüft Folgendes, bevor Sie einen Administratorcluster upgraden:
Kategorie | Beschreibung |
---|---|
Clusterzustand | Validiert die PodDisruptionBudgets (PDBs) in allen Namespaces des Administratorclusters. |
Konfigurationen |
|
Ausführung des Tools vorbereiten
Führen Sie ein Upgrade Ihrer Administratorworkstation durch, wenn Sie dies noch nicht getan haben.
Falls noch nicht geschehen, führen Sie
gkectl prepare
aus, um Betriebssystem-Images in vSphere zu importieren:gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Ersetzen Sie Folgendes:
TARGET_VERSION
: Die GDCV for VMware-Patchversion, auf die Sie ein Upgrade durchführen möchten. Das Format für die Versionsnummer muss eine vollständige Patchversion wie1.13.10-gke.42
sein.ADMIN_CLUSTER_KUBECONFIG
: Der Pfad zur kubeconfig-Datei des Administratorclusters.
Wenn Sie eine private Registry verwenden, laden Sie das Preflight-Container-Image mit dem bereitgestellten Docker-Digest herunter und laden Sie das Image in die private Registry hoch. Wenn Sie keine private Registry verwenden, fahren Sie mit dem nächsten Schritt fort.
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
Ersetzen Sie
REGISTRY_ADDRESS
durch die Adresse der privaten Registry.Legen Sie im folgenden Bash-Skript Werte für diese Platzhalter fest:
ADMIN_CLUSTER_KUBECONFIG
: Der Pfad zur kubeconfig-Datei des Administratorclusters.REGISTRY_ADDRESS
: Wenn der Administratorcluster eine private Registry verwendet, ist dies die private Registry-Adresse, die Sie im vorherigen Schritt angegeben haben. Wenn Sie keine private Registry verwenden, geben Sie die öffentliche Registry an: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
Speichern Sie das obige Bash-Skript in einer Datei mit dem Namen
pre-upgrade.sh
und machen Sie es ausführbar:chmod +x pre-upgrade.sh
Skript ausführen
Welche Argumente Sie beim Ausführen des Skripts angeben, hängt davon ab, ob Sie einen Nutzercluster oder einen Administratorcluster upgraden:
- Führen Sie vor dem Upgrade eines Administratorclusters das Skript so aus:
./pre-upgrade.sh TARGET_VERSION
- Vor dem Upgrade eines Nutzerclusters:
./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
Ersetzen Sie
USER_CLUSTER_NAME
durch den Namen des Nutzerclusters, den Sie aktualisieren.Die Ausgabe sieht in etwa so aus:
job.batch/pre-upgrade-2023-0822-213551 created
Führen Sie den folgenden Befehl für die vom Job gesteuerten Pods aus, um eine Liste der Validierungsergebnisse abzurufen.
kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Ersetzen Sie Folgendes:
JOB_NAME
: Dies ist der Name des Jobs, den das Skript im vorherigen Schritt ausgibt.JOB_NAMESPACE
: Der festgelegte Wert hängt davon ab, ob Sie ein Upgrade für einen Administrator- oder Nutzercluster durchführen. Wenn Sie einen Administratorcluster upgraden, geben Siekube-system
an. Wenn Sie einen Nutzercluster upgraden, geben SieUSER_CLUSTER_NAME-gke-onprem-mgmt
an.
Warten Sie einige Minuten, bis der Job abgeschlossen ist oder das Backoff-Limit erreicht hat und fehlschlägt. Prüfen Sie in den Ergebnissen, ob unter
Reason
eine Prüfung mit dem StatusWarning
,Unknown
oderFailure
vorliegt, um herauszufinden, ob Sie das Problem beheben können.Führen Sie vor dem Upgrade der Cluster den folgenden Befehl aus, um den Job zu löschen:
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG