Tool vor der Umstellung ausführen

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
  • Validiert die PDBs in allen Namespaces des Administratorclusters.
  • Prüft die PDBs in allen Namespaces des Nutzerclusters.
  • Prüft, ob ein vorheriges Upgrade des Administratorclusters erfolgreich abgeschlossen wurde.
Konfigurationen
  • Empfiehlt die Patchversion für das Upgrade.
  • Prüft, ob der SA-Schlüssel für den Komponentenzugriff gelöscht wurde, wie unter diesem bekannten Problem beschrieben.
  • Wenn Sie ein Upgrade auf 1.10 ausführen, wird eine Warnung angezeigt, wenn Sie die in diesem bekannten Problem beschriebene Problemumgehung anwenden müssen.

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

  1. Führen Sie ein Upgrade Ihrer Administrator-Workstation durch, falls Sie dies noch nicht getan haben.

  2. 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 wie 1.13.10-gke.42 sein.

    • ADMIN_CLUSTER_KUBECONFIG: Der Pfad zur kubeconfig-Datei des Administratorclusters.

  3. 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.

  4. 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
    
  5. 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

  1. 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
    
  2. 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 Sie kube-system an. Wenn Sie ein Upgrade für einen Nutzercluster durchführen, geben Sie USER_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 Status Warning, Unknown oder Failure, um festzustellen, ob Sie das Problem beheben können.

  3. 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