Upgrade von Anthos Service Mesh durchführen

Auf dieser Seite wird gezeigt, wie Sie ein Upgrade für Anthos Service Mesh ausführen.

Plattformadministratoren können ein Upgrade auf Anthos Service Mesh ausführen. Das Upgrade von Anthos Service Mesh ist ein auf Überarbeitung basierendes Upgrade (auch Canary-Upgrade genannt), bei dem sowohl die neue als auch die vorherige Version der Steuerungsebene ausgeführt werden, wenn Sie die neue Version mit einem kleinen Prozentsatz Ihrer Arbeitslasten testen. Dieser Ansatz ist sicherer als ein direktes Upgrade, bei dem die neue Version der Steuerungsebene die vorherige Version ersetzt.

Es dauert fünf bis zehn Minuten, um die Komponenten der Anthos Service Mesh-Steuerungsebene noch einmal bereitzustellen. Sie müssen außerdem neue Sidecar-Proxys in alle Ihre Arbeitslasten einfügen, damit sie mit der aktuellen Anthos Service Mesh-Version aktualisiert werden. Es dauert etwa eine Minute pro 100 Pods, um die Sidecar-Proxys zu aktualisieren. Die Dauer ist von vielen Faktoren abhängig, z. B. von der Anzahl der Pods, der Anzahl der Knoten, den Skalierungseinstellungen der Bereitstellung, den Budgets für Pod-Unterbrechungen und anderen Konfigurationseinstellungen.

Vorbereitung

Prüfen Sie vor dem Upgrade, ob die folgenden Bedingungen erfüllt sind:

  • Sie haben einen Zielnutzercluster, der vom Administratorcluster verwaltet wird.
  • Auf Ihrem Zielnutzercluster ist eine Anthos Service Mesh-Installation vorhanden, für die Upgrades verfügbar sind.

Vorhandene Installationen prüfen

Prüfen Sie, ob Anthos Service Mesh in Ihrem Cluster installiert ist.

Console

Öffnen Sie in der Management Center-Konsole das Menü Service Mesh, um die Liste der Cluster mit installiertem Anthos Service Mesh aufzurufen.

API

Sie finden in einem Administratorcluster die folgenden benutzerdefinierten Ressourcen, die Ihre aktuelle Anthos Service Mesh-Installation beschreiben:

  • Ein ServiceMeshBinding-Objekt, das ein ServiceMeshFeatureSpec-Objekt mit der ID Ihres Nutzerclusters bindet. Zum Ermitteln des Objekts führen Sie den im Folgenden aufgeführten Befehl aus. Da dieser Befehl möglicherweise mehrere Objekte zurückgibt, müssen Sie das Objekt mit der ID des Zielclusters in seiner Spezifikation suchen.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center
    

    Im Folgenden ist ein Beispiel für den Inhalt des Objekts aufgeführt:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: PREVIOUS_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         - TARGET_CLUSTER_ID
    
  • Ein ServiceMeshFeatureSpec-Objekt, das die Spezifikation Ihrer Anthos Service Mesh-Installation definiert. Der Namespace und der Name des Objekts werden im Feld config.configRef des Objekts ServiceMeshBinding referenziert, das im vorherigen Beispiel beschrieben wurde. Führen Sie den folgenden Befehl aus, um das Objekt aufzurufen:

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshfeaturespec PREVIOUS_SERVICE_MESH_SPEC -n anthos-management-center -o yaml
    

    Im Folgenden ist ein Beispiel für den Inhalt des Objekts aufgeführt:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name:PREVIOUS_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.7.3-asm.6
    

Neuere Version von Anthos Service Mesh installieren

Sie können mithilfe der Management Center-Konsole oder der API eine Aktualisierung auf eine neuere Version von Anthos Service Mesh ausführen.

Console

  1. Rufen Sie in der Management Center-Konsole das Menü Dashboard auf.
  2. Klicken Sie auf den Tab Upgrades, um alle verfügbaren Upgrades aufzurufen.
  3. Klicken Sie für den Cluster, den Sie aktualisieren möchten, auf Upgrades anzeigen.
  4. Ermitteln Sie in der Liste „Verfügbare Upgrades” die Anthos Service Mesh-Zielversion, auf die Sie ein Upgrade ausführen möchten, und klicken Sie auf Upgrade, um die Anthos Service Mesh-Upgrade-Seite zu öffnen.Seite „Verfügbare Upgrades“
  5. Prüfen Sie die Informationen der Zielversion, z. B. die Versionsnummer, die Beschreibung und einen Link zu den Versionshinweisen, und klicken Sie auf Weiter.
  6. Klicken Sie im Pop-up-Dialogfeld auf Upgrade, um mit der Installation der Zielversion von Anthos Service Mesh im Zielcluster zu beginnen.
  7. Die Seite Service Mesh wird geöffnet. Dort können Sie feststellen, dass die Zielversion installiert wird.

API

Führen Sie die folgenden Schritte aus, um mit kubectl-Befehlen im Administratorcluster eine neuere Version von Anthos Service Mesh zu installieren:

  1. Erstellen Sie ein neues ServiceMeshFeatureSpec-Objekt für die neue Version. Im Folgenden ist ein Beispielobjekt für Version 1.8.3-asm.2 aufgeführt:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name: NEW_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.8.3-asm.2
    
  2. Aktualisieren Sie das vorhandene Objekt ServiceMeshBinding, um einen neuen Eintrag einzufügen und die neue ServiceMeshFeatureSpec an den Cluster zu binden:

     apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
     kind: ServiceMeshBinding
     metadata:
      name: service-mesh-binding-sample
      namespace: anthos-management-center
     spec:
      configs:
      - configRef:
          name: PREVIOUS_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
      - configRef:
          name: NEW_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
    
  3. Die neuere Version von Anthos Service Mesh wird im Administratorcluster installiert. Mit dem folgenden Befehl können Sie prüfen, ob die Installation anwendungsbereit ist:

     KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center -o jsonpath="{range .items[*].status.bindingItemStatuses[*]}{'\n'}{['clusterID', 'configRef', 'conditions']}" | grep NEW_SERVICE_MESH_SPEC | grep TARGET_CLUSTER_ID
    

    Ersetzen Sie dabei TARGET_CLUSTER_ID und NEW_SERVICE_MESH_SPEC durch die im Objekt ServiceMeshBinding konfigurierten Werte.

    Im Folgenden ist ein Beispiel für die Ausgabe aufgeführt:

    target-user-cluster-1 {"name":"new-spec-q64x7","namespace":"anthos-management-center"} [{"lastTransitionTime":"2021-05-27T18:06:27Z","message":"","observedGeneration":1,"reason":"Healthy","status":"True","type":"Ready"}]
    

    Der status: true der Bedingung Ready zeigt an, dass die Installation ausgeführt wurde.

Die vorherige Version von Anthos Service Mesh wird nicht automatisch entfernt. Sie müssen Ihre Arbeitslasten manuell auf die neue Version von Anthos Service Mesh migrieren und die vorherige Version deinstallieren.

Arbeitslasten migrieren

Führen Sie die folgenden Schritte auf Ihrem Nutzercluster aus, um Ihre Arbeitslasten zu migrieren:

  1. Rufen Sie das Überarbeitungslabel Ihrer vorherigen Version und der neuen Version von Anthos Service Mesh ab. So ermitteln Sie diese Werte:

    Console

    1. Rufen Sie in der Management Center-Konsole das Menü Service Mesh auf.
    2. Ermitteln Sie in der Clusterliste das Überarbeitungslabel in der Spalte „Überarbeitung“ für den Cluster.

    API

    Führen Sie dazu diesen Befehl aus:

     KUBECONFIG=USER_KUBECONFIG kubectl get pod -n istio-system -l app=istiod -L istio.io/rev
    

    Im Folgenden ist ein Beispiel für die Ausgabe aufgeführt:

    NAME                                READY   STATUS    RESTARTS   AGE   REV
    istiod-asm-173-6-756d989c58-p84b9   1/1     Running   0          13h   asm-173-6
    istiod-asm-173-6-756d989c58-t6vh8   1/1     Running   0          13h   asm-173-6
    istiod-asm-183-2-76f64c6bc7-2qnxq   1/1     Running   0          17h   asm-183-2
    istiod-asm-183-2-76f64c6bc7-8nrpz   1/1     Running   0          17h   asm-183-2
    

    In der Ausgabe befindet sich das Überarbeitungslabel unter der Spalte „REV”. In diesem Beispiel ist der Wert asm-183-2. Dieses Label wird später verwendet, um die Sidecar-Injektion für die neue Anthos Service Mesh-Version auszulösen.

  2. Fügen Sie das Überarbeitungslabel einem Namespace hinzu: Ändern Sie im folgenden Befehl REVISION in den Wert, der dem Überarbeitungslabel der neuen Anthos Service Mesh-Version entspricht.

    KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
    
  3. Starten Sie die Arbeitslasten neu, um die erneute Injektion auszulösen, z. B. um alle Bereitstellungen in einem Namespace neu zu starten:

    KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
    
  4. Prüfen Sie, ob Ihre Pods so konfiguriert sind, dass sie auf die neue Version von istiod verweisen.

    KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    
  5. Testen Sie die Anwendung, um zu prüfen, ob die Arbeitslasten ordnungsgemäß funktionieren.

  6. Wenn Sie Arbeitslasten in anderen Namespaces haben, wiederholen Sie die Schritte 2 bis 5, um den Namespace mit einem Label zu versehen und die Arbeitslasten neu zu starten.

Vorherige Version von Anthos Service Mesh löschen

Wenn Ihre Anwendung wie erwartet funktioniert, können Sie die vorherige Version von Anthos Service Mesh mithilfe des Management Centers oder der API deinstallieren.

Console

  1. Rufen Sie in der Management Center-Konsole das Menü Service Mesh auf.
  2. Klicken Sie in der Spalte Versionen auf den Link der vorherigen Anthos Service Mesh-Version.
  3. Klicken Sie auf der Seite Service Mesh bearbeiten auf Service Mesh entfernen.
  4. In einem Pop-up-Dialogfeld wird vor dem Löschen das Ergebnis einer Konfidenzprüfung angezeigt. In diesem Dialogfeld sind alle Namespaces und Pods enthalten, die weiter von der vorherigen Version von Anthos Service Mesh abhängig sind. Dazu prüfen Sie das Label istio.io/rev auf Namespaces und Pods. Wenn die Prüfung eine solche Abhängigkeit ermittelt, können Sie erst fortfahren, wenn diese Pods oder Namespaces migriert wurden.
  5. Wenn die Konfidenzprüfung keine weiteren Abhängigkeiten feststellt, klicken Sie auf Entfernen, um Anthos Service Mesh auf dem Zielcluster zu deinstallieren.

Nachdem Sie die Löschanfrage gesendet haben, wird die Seite „Service Mesh” geöffnet und die vorherige Version von Anthos Service Mesh ist nicht mehr enthalten. Die Deinstallation der vorherigen Anthos Service Mesh-Ressourcen kann einige Minuten dauern.

API

  1. Prüfen Sie vor dem Löschen der vorherigen Version von Anthos Service Mesh, dass es keine Pods oder Namespaces gibt, die von dieser Version von Anthos Service Mesh abhängig sind.

    1. Führen Sie den folgenden Befehl aus, um mögliche Namespace-Abhängigkeiten zu prüfen:

      KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION  
      

      Ersetzen Sie dabei PREVIOUS_REVISION durch das Überarbeitungslabel der vorherigen Anthos Service Mesh-Version.

    2. Führen Sie den folgenden Befehl aus, um mögliche Pod-Abhängigkeiten zu prüfen:

      KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
      

    Wenn die Abfragen leere Ergebnisse zurückgeben, fahren Sie mit dem nächsten Schritt fort. Andernfalls migrieren Sie die Arbeitslast, bevor Sie fortfahren.

  2. Aktualisieren Sie das Objekt ServiceMeshBinding im Administratorcluster, um die Bindung der vorherigen Feature-Spezifikation an den Zielcluster aufzuheben. Im Folgenden ist ein Beispiel für das Objekt ServiceMeshBinding nach Entfernen des Eintrags PREVIOUS_SERVICE_MESH_SPEC aufgeführt:

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: NEW_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         -  TARGET_CLUSTER_ID
    
  3. Nachdem ServiceMeshBinding aktualisiert wurde, wird die vorherige Anthos Service Mesh-Version entfernt. Die Deinstallation kann mehrere Minuten dauern. Prüfen Sie mit dem folgenden Befehl, ob die vorherige Version entfernt wurde:

    KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
    

    Dieser Befehl gibt ein leeres Ergebnis zurück, wenn die Deinstallation abgeschlossen ist.