In diesem Dokument wird beschrieben, wie Sie zur Vorbereitung auf ein Upgrade ein eigenständiges Tool ausführen. Bevor Sie ein Upgrade für einen Administrator- oder Nutzercluster durchführen, der Google Distributed Cloud Version 1.9 und höher verwendet, empfehlen wir, das Tool vor dem Upgrade auszuführen.
Verwenden Sie zum Ausführen des Tools das Bash-Skript in diesem Dokument, das einen hartcodierten sicheren Hash-Algorithmus (SHA) verwendet. Dieses Dokument wird für jede Version des Tools mit dem neuen SHA aktualisiert. Das Skript erstellt einen Kubernetes-Job zum Ausführen einer bestimmten Version von Preflight-Prüfungen, abhängig von der Version, auf die Sie ein Upgrade ausführen.
Prüfungen vor dem Upgrade
Das Tool prüft vor dem Upgrade eines Nutzerclusters Folgendes:
Kategorie | Beschreibung |
---|---|
Clusterzustand |
|
Konfigurationen |
|
Das Tool prüft vor dem Upgrade eines Administratorclusters Folgendes:
Kategorie | Beschreibung |
---|---|
Clusterzustand | Prüft 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
: Die Google Distributed Cloud-Patchversion, auf die Sie ein Upgrade ausführen möchten. Das Format der 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 anschließend 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 private Registry-Adresse.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 aktualisieren:
- Führen Sie vor dem Upgrade eines Administratorclusters das Skript so aus:
./pre-upgrade.sh TARGET_VERSION
- Führen Sie vor dem Upgrade eines Nutzerclusters Folgendes aus:
./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 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 aus dem vorherigen Schritt ausgibt.JOB_NAMESPACE
: Der von Ihnen festgelegte Wert hängt davon ab, ob Sie ein Upgrade für einen Administrator- oder Nutzercluster ausführen. Wenn Sie ein Upgrade für einen Administratorcluster ausführen, geben Siekube-system
an. Wenn Sie ein Upgrade für einen Nutzercluster durchführen, geben SieUSER_CLUSTER_NAME-gke-onprem-mgmt
an.
Warten Sie einige Minuten, bis der Job abgeschlossen ist oder das Backoff-Limit erreicht ist und ein Fehler auftritt. Prüfen Sie in den Ergebnissen die
Reason
auf Prüfung des StatusWarning
,Unknown
oderFailure
, um festzustellen, 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