In diesem Dokument erfahren Sie, wie Sie ein eigenständiges Tool zur Vorbereitung eines Upgrades ausführen. Bevor Sie einen Administrator- oder Nutzercluster aktualisieren, der Version 1.9 oder höher von Google Distributed Cloud hat, empfehlen wir, das Pre-Upgrade-Tool auszuführen.
Verwenden Sie zum Ausführen des Tools das Bash-Script in diesem Dokument, das einen hartcodierten Secure-Hash-Algorithmus (SHA) verwendet. Bei jeder Veröffentlichung des Tools wird dieses Dokument mit dem neuen SHA aktualisiert. Das Script erstellt einen Kubernetes-Job, um je nach Version, auf die Sie ein Upgrade durchführen, eine bestimmte Version der Preflight-Prüfungen auszuführen.
Prüfungen vor dem Upgrade
Das Tool prüft Folgendes, bevor Sie einen Nutzercluster aktualisieren:
Kategorie | Beschreibung |
---|---|
Clusterintegrität |
|
Konfigurationen |
|
Das Tool prüft Folgendes, bevor Sie einen Administratorcluster aktualisieren:
Kategorie | Beschreibung |
---|---|
Clusterintegrität | Validiert die PodDisruptionBudgets (PDBs) in allen Namespaces des Administratorclusters. |
Konfigurationen |
|
Ausführung des Tools vorbereiten
Führen Sie ein Upgrade Ihrer Administrator-Workstation durch, falls Sie dies noch nicht getan haben.
Führen Sie
gkectl prepare
aus, um Betriebssystem-Images in vSphere zu importieren, falls Sie dies noch nicht getan haben:gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Ersetzen Sie Folgendes:
TARGET_VERSION
: Google Distributed Cloud-Patchversion, auf die Sie ein Upgrade ausführen möchten. Das Format der Versionsnummer muss eine vollständige Patchversion sein, z. B.1.13.10-gke.42
.ADMIN_CLUSTER_KUBECONFIG
: Der Pfad zur kubeconfig 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-Script Werte für diese Platzhalter fest:
ADMIN_CLUSTER_KUBECONFIG
: Der Pfad zur kubeconfig des Administratorclusters.REGISTRY_ADDRESS
: Wenn für den Administratorcluster eine private Registry verwendet wird, ist dies die im vorherigen Schritt angegebene Adresse der privaten Registry. 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-Script 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 Script angeben, hängt davon ab, ob Sie einen Nutzer- oder einen Administratorcluster aktualisieren:
- Führen Sie vor dem Upgrade eines Administratorclusters das Script 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 möchten.Die Ausgabe sieht in etwa so aus:
job.batch/pre-upgrade-2023-0822-213551 created
Führen Sie den folgenden Befehl auf den vom Job gesteuerten Pods aus, um eine Liste der Validierungsergebnisse zu erhalten.
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 Script aus dem vorherigen Schritt ausgibt.JOB_NAMESPACE
: Der festgelegte Wert hängt davon ab, ob Sie einen Administrator- oder Nutzercluster aktualisieren. Wenn Sie einen Administratorcluster aktualisieren, geben Siekube-system
an. Wenn Sie einen Nutzercluster aktualisieren, geben SieUSER_CLUSTER_NAME-gke-onprem-mgmt
an.
Warten Sie einige Minuten, bis der Job abgeschlossen ist oder das Backoff-Limit erreicht wird und der Job fehlschlägt. Prüfen Sie in den Ergebnissen, ob es bei
Reason
eine Prüfung mit dem StatusWarning
,Unknown
oderFailure
gibt, um zu sehen, ob Sie das Problem beheben können.Führen Sie vor dem Upgrade von Clustern den folgenden Befehl aus, um den Job zu löschen:
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG