Im Cluster zu einem verwalteten Cluster in einem neuen Cluster migrieren

In diesem Tutorial erfahren Sie, wie Sie eine Anwendung von einem GKE-Cluster (Google Kubernetes Engine) mit dem clusterinternen Cloud Service Mesh zu einem neuen Cluster mit dem verwalteten Cloud Service Mesh, dem vollständig verwalteten, Istio-konformen Dienst von Google Mesh-Netzwerk.

In dieser Anleitung erwartet Sie Folgendes:

  1. Neuen Google Kubernetes Engine-Cluster erstellen und Cloud Service Mesh im Cluster installieren und dem Cloud Service Mesh-Ingress-Gateway auf dem Cluster. Dieser Cluster agiert als den vorhandenen Cluster, von dem Sie migrieren möchten.
  2. Stellen Sie den Online-Boutique Beispielanwendung auf dem Cluster mit dem clusterinternen Cloud Service Mesh hinzu.
  3. Sie erstellen im selben Google Cloud-Projekt einen weiteren Google Kubernetes Engine-Cluster.
  4. Stellen Sie das verwaltete Cloud Service Mesh im zweiten Cluster bereit und stellen Sie das Cloud Service Mesh-Ingress-Gateway.
  5. Stellen Sie Online Boutique auf dem Cluster mit verwaltetem Cloud Service Mesh bereit, um Replizieren Sie die Bereitstellung aus dem Cluster mit dem clusterinternen Cloud Service Mesh.
  6. Verlagerung von 50% des Nutzertraffics aus dem Cluster mit dem clusterinternen Cloud Service Mesh zum Cluster mit verwaltetem Cloud Service Mesh, unter Verwendung der Traffic-Aufteilung von Istio Funktionen des Clusters mit dem cloudinternen Cloud Service Mesh nutzen.
  7. Migration vom Cloud Service Mesh im Cluster zum verwalteten Cloud Service Mesh abschließen: den DNS-Eintrag (Domain Name System) des Clusters mit Cloud Service Mesh im Cluster mit dem Cluster mit verwaltetem Cloud Service Mesh zu verknüpfen.

Nutzertraffic wird 50:50 zwischen einem Cluster mit Cloud Service Mesh im Cluster und einem Cluster mit verwaltetem Cloud Service Mesh aufgeteilt. Jeder Cluster enthält seine eigene Bereitstellung von Online Boutique.

Canary-Deployment

„Canary-Deployment“ ist eine Technik, die in der Softwareentwicklung verwendet wird, um eine neue Version einer Software zu testen, bevor diese für alle Nutzer veröffentlicht wird. Dabei wird der Prozentsatz des Traffics, der an die neue Version weitergeleitet wird, schrittweise erhöht. In dieser Anleitung richten Sie einen neuen Cluster mit verwalteten Cloud Service Mesh nutzen und den Nutzertraffic schrittweise dorthin verlagern. Sie beginnen mit Sie leitet 0% des Nutzertraffics an den neuen Cluster, dann 50 % und schließlich 100%. In der Produktion sollten Sie kleinere und mehr Inkremente verwenden. Wenn Sie irgendwann dass der neue Cluster einen Teil des Traffics nicht verarbeiten kann. können Sie ein Rollback durchführen, indem Sie den Prozentsatz auf 0 % reduzieren.

Canary-Steuerungsebene im Vergleich zu Canary-Cluster

Es gibt zwei häufig verwendete Strategien für die Migration von einem clusterinternen Cloud Service Mesh zu verwaltetes Cloud Service Mesh:

  • Migration der Canary-Steuerungsebene: Bei dieser Strategie stellen Sie verwalteten Cloud Service Mesh im selben Cluster, in dem Cloud Service Mesh im Cluster ist installiert.
  • Canary-Clustermigration: Bei dieser Strategie erstellen Sie einen neuen Cluster und und anschließend das verwaltete Cloud Service Mesh bereitstellen.

In dieser Anleitung werden Sie die Migrationsstrategie für den Canary-Cluster durchlaufen.

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Aktivieren Sie die erforderlichen APIs.

    Aktivieren Sie die APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. Aktivieren Sie die erforderlichen APIs.

    Aktivieren Sie die APIs

Cloud Shell starten

In dieser Anleitung verwenden Sie Cloud Shell, eine in Google Cloud gehostete Shell-Umgebung, mit der Sie Ihre Google Cloud-Ressourcen verwalten können.

Cloud Shell wird mit den Befehlszeilentools Google Cloud CLI, kubectl und istioctl vorinstalliert. Die gcloud CLI stellt die primäre Befehlszeile für Google Cloud bereit.

Öffnen Sie in der rechten oberen Ecke dieser Seite eine Cloud Shell-Sitzung, klicken Sie auf und dann auf Bestätigen. In einem Frame im unteren Teil der Seite wird eine Cloud Shell-Sitzung geöffnet. Führen Sie in dieser Cloud Shell-Sitzung die folgenden Befehle aus.

Beispielcode herunterladen

Klonen Sie die Git-Repositories mit den Kubernetes- und Istio-Ressourcen, die Sie verwenden werden:

  git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
  git clone https://github.com/GoogleCloudPlatform/microservices-demo.git

Cluster mit Cloud Service Mesh im Cluster einrichten

Cluster erstellen und Cloud Service Mesh im Cluster installieren

In diesem Abschnitt erstellen Sie den Cluster, der das clusterinterne Cloud Service Mesh verwendet. In wäre dies der Cluster, den Sie bereits verwenden.

  1. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID und erstellen Sie einen neuen Cluster:

    gcloud container clusters create cluster-with-in-cluster-asm \
      --project=PROJECT_ID \
      --zone=us-central1-a \
      --machine-type=e2-standard-4 --num-nodes=2 \
      --workload-pool=PROJECT_ID.svc.id.goog
    
  2. Benennen Sie den Clusterkontext um, damit der Cluster leichter verwendet werden kann:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \
      cluster-with-in-cluster-asm
    
  3. Prüfen Sie, ob der Clusterkontext umbenannt wurde:

    kubectl config get-contexts --output="name"
    
  4. Laden Sie die Version herunter, die Cloud Service Mesh installiert, 1.18.7 um dem aktuellen Arbeitsverzeichnis:

    curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.18 > asmcli
    

    Sie werden aufgefordert, „y“ einzugeben, und dann die Eingabetaste drücken.

    Die Ausgabe sieht etwa so aus:

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
    100  167k  100  167k    0     0   701k      0 --:--:-- --:--:-- --:--:--  701k
    
  5. Machen Sie das Skript asmcli ausführbar:

    chmod +x asmcli
    
  6. Installieren Sie das Cloud Service Mesh im Cluster mit asmcli:

    ./asmcli install \
      --project_id PROJECT_ID \
      --cluster_name cluster-with-in-cluster-asm \
      --cluster_location us-central1-a \
      --output_dir . \
      --enable_all \
      --ca mesh_ca
    

    Es kann einige Minuten dauern, bis die Ausführung des asmcli-Tools abgeschlossen ist. Das Tool gibt aus, informative Nachrichten zu übermitteln, damit Sie den Fortschritt verfolgen können.

    Bei Erfolg sieht die Ausgabe in etwa so aus:

    ...
    asmcli: Successfully installed ASM.
    

Ingress-Gateway von Cloud Service Mesh bereitstellen

  1. Sie stellen das Ingress-Gateway des Cloud Service Mesh in einem separaten Namespace namens asm-ingress. Erstellen Sie den Namespace:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace asm-ingress
    
  2. Verwenden Sie das Label istio.io/rev=asm-1187-26, um den Namespace asm-ingress dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.

    kubectl \
      --context cluster-with-in-cluster-asm \
      label --overwrite namespace asm-ingress istio.io/rev=asm-1187-26
    

    Die Ausgabe sieht etwa so aus:

    namespace/asm-ingress labeled
    
  3. Cloud Service Mesh bereitstellen Ingress-Gateway:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    Die Ausgabe sieht etwa so aus:

    serviceaccount/asm-ingressgateway created
    service/asm-ingressgateway created
    deployment.apps/asm-ingressgateway created
    gateway.networking.istio.io/asm-ingressgateway created
    

Online Boutique bereitstellen

  1. Sie stellen Online Boutique in einem separaten Namespace namens onlineboutique bereit. Erstellen Sie den Namespace:

    kubectl \
      --context cluster-with-in-cluster-asm \
      create namespace onlineboutique
    
  2. Verwenden Sie das Label istio.io/rev=asm-1187-26, um den Namespace onlineboutique dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.

    kubectl \
      --context cluster-with-in-cluster-asm \
      label --overwrite namespace onlineboutique istio.io/rev=asm-1187-26
    

    Die Ausgabe sieht etwa so aus:

    namespace/onlineboutique labeled
    
  3. Stellen Sie die 12 Dienste von Online Boutique bereit, einschließlich des Load-Generators, der den Nutzertraffic weiterleitet:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Rufen Sie die externe IP-Adresse des Cloud Service Mesh-Ingress-Gateways ab:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Kopieren Sie die externe IP-Adresse des Ingress-Gateways und greifen Sie über Ihrem Webbrowser. Sie sehen die Beispiel-App Online Boutique.

Neuen Cluster mit verwaltetem Cloud Service Mesh einrichten

Cluster erstellen und verwaltetes Cloud Service Mesh bereitstellen

In diesem Abschnitt erstellen Sie den Cluster, zu dem Sie migrieren. Sie werden verwalteten Cloud Service Mesh bereitstellen und Online Boutique bereitstellen, um Sie replizieren die Bereitstellungen aus dem Cluster, der das clusterinterne Cloud Service Mesh verwendet.

  1. Erstellen Sie einen neuen Cluster:

    gcloud container clusters create cluster-with-csm \
      --project=PROJECT_ID --zone=us-central1-a \
      --machine-type=e2-standard-4 --num-nodes=2 \
      --workload-pool PROJECT_ID.svc.id.goog
    
  2. Benennen Sie den Clusterkontext um, damit der Cluster leichter verwendet werden kann:

    kubectl config rename-context \
      gke_PROJECT_ID_us-central1-a_cluster-with-csm \
      cluster-with-csm
    
  3. Prüfen Sie, ob der Clusterkontext umbenannt wurde:

    kubectl config get-contexts --output="name"
    
  4. Aktivieren Sie Cloud Service Mesh in der Flotte Ihres Projekts. A fleet ist ein logischer Gruppierung von Kubernetes-Clustern und anderen Ressourcen, die verwaltet werden können miteinander verbinden.

    gcloud container fleet mesh enable --project PROJECT_ID
    

    Die Ausgabe sieht etwa so aus:

    Waiting for Feature Service Mesh to be created...done.
    
  5. Registrieren Sie den Cluster bei der Flotte des Projekts:

    gcloud container fleet memberships register cluster-with-csm-membership \
      --gke-cluster=us-central1-a/cluster-with-csm \
      --enable-workload-identity \
      --project PROJECT_ID
    

    Die Ausgabe sieht etwa so aus:

    Waiting for membership to be created...done.
    Finished registering to the Fleet.
    
  6. Aktivieren Sie das verwaltete Cloud Service Mesh auf dem Cluster:

    gcloud container fleet mesh update \
      --management automatic \
      --memberships cluster-with-csm-membership \
      --project PROJECT_ID
    

    Die Ausgabe sieht etwa so aus:

    Waiting for Feature Service Mesh to be updated...done.
    
  7. Prüfen, ob das verwaltete Cloud Service Mesh für den Cluster bereitgestellt wurde und kann verwendet werden:

    gcloud container fleet mesh describe --project PROJECT_ID
    

    Es kann etwa 10 Minuten dauern, bis Cloud Service Mesh bereitgestellt ist und die sofort im Cluster verwendet werden können. Wenn controlPlaneManagement.state: DISABLED oder controlPlaneManagement.state: PROVISIONING angezeigt wird, müssen Sie den vorherigen Befehl alle paar Minuten noch einmal ausführen, bis controlPlaneManagement.state: ACTIVE angezeigt wird.

    Die Ausgabe sieht etwa so aus:

    createTime: '2022-07-06T01:05:39.110120474Z'
    membershipSpecs:
      projects/123456789123/locations/global/memberships/cluster-with-csm-membership:
        mesh:
          management: MANAGEMENT_AUTOMATIC
    membershipStates:
      projects/123456789123/locations/global/memberships/cluster-with-csm-membership:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
          dataPlaneManagement:
            details:
            - code: OK
              details: Service is running.
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
          updateTime: '2022-07-06T01:19:24.243993678Z'
    name: projects/your-project-id/locations/global/features/servicemesh
    resourceState:
      state: ACTIVE
    spec: {}
    state:
      state: {}
    updateTime: '2022-07-06T01:19:27.475885687Z'
    

Ingress-Gateway von Cloud Service Mesh bereitstellen

  1. Sie stellen das Ingress-Gateway des Cloud Service Mesh in einem separaten Namespace namens asm-ingress. Erstellen Sie den Namespace:

    kubectl \
      --context cluster-with-csm \
      create namespace asm-ingress
    
  2. Verwenden Sie das Label istio.io/rev=asm-managed, um den Namespace asm-ingress dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.

    kubectl \
      --context cluster-with-csm \
      label namespace asm-ingress 'istio.io/rev=asm-managed'
    
  3. Cloud Service Mesh bereitstellen Ingress-Gateway:

    kubectl \
      --context cluster-with-csm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml
    kubectl \
      --context cluster-with-csm \
      --namespace=asm-ingress \
      apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
    

    Die Ausgabe sieht etwa so aus:

    namespace/asm-ingress configured
    serviceaccount/asm-ingressgateway configured
    service/asm-ingressgateway configured
    deployment.apps/asm-ingressgateway configured
    gateway.networking.istio.io/asm-ingressgateway configured
    

Online Boutique bereitstellen

  1. Sie stellen Online Boutique in einem separaten Namespace namens onlineboutique bereit. Erstellen Sie den Namespace:

    kubectl \
      --context cluster-with-csm \
      create namespace onlineboutique
    
  2. Verwenden Sie das Label istio.io/rev=asm-managed, um den Namespace onlineboutique dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.

    kubectl \
      --context cluster-with-csm \
      label namespace onlineboutique 'istio.io/rev=asm-managed'
    
  3. Stellen Sie die 12 Dienste von Online Boutique bereit, einschließlich des Load-Generators, der den Nutzertraffic weiterleitet:

    kubectl \
      --context cluster-with-csm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml
    kubectl \
      --context cluster-with-csm \
      --namespace=onlineboutique \
      apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
    
  4. Rufen Sie die externe IP-Adresse des Cloud Service Mesh-Ingress-Gateways ab:

    kubectl \
      --context cluster-with-csm \
      --namespace asm-ingress \
      get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
    
  5. Kopieren Sie die externe IP-Adresse des asm-ingressgateway-Dienstes und greifen Sie auf über Ihren Webbrowser. Sie sehen die Beispiel-App Online Boutique. Da Sie die externe IP-Adresse im nächsten Abschnitt benötigen, kopieren Sie sie in eine Umgebungsvariable:

    export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \
      kubectl \
        --context cluster-with-csm \
        --namespace asm-ingress \
        get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \
      )
    

Cluster mit Cloud Service Mesh mithilfe eines Canary-Deployments testen

In diesem Abschnitt konfigurieren Sie den Cluster mit dem clusterinternen Cloud Service Mesh so, dass 50% des Nutzer-Traffics bei Online Boutique wird auf die Instanz Online verlagert. Boutique im Cluster mit verwaltetem Cloud Service Mesh. Um dies zu erreichen, stellen Sie Zwei Istio-Ressourcen für den Cluster mit dem clusterinternen Cloud Service Mesh:

  • Einen ServiceEntry, um das Cloud Service Mesh im Cluster über das verwaltete Cloud Service Mesh zu informieren Online Boutique-Endpunkt des Clusters
  • einen VirtualService, der das Cloud Service Mesh-Ingress-Gateway im Cluster anweist, die zwischen 50 und 50 liegen.
  1. IP-Adresse des Ingress-Gateways des verwalteten Cloud Service Mesh-Clusters festlegen in der Ressource ServiceEntry:

    sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
    
  2. Stellen Sie die ServiceEntry im Cluster mit dem clusterinternen Cloud Service Mesh bereit:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
    
  3. Stellen Sie die VirtualService im Cluster mit dem clusterinternen Cloud Service Mesh bereit:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace onlineboutique \
      apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
    
  4. Rufen Sie die IP-Adresse des Ingress-Gateways des Clusters mit im Cluster in Ihrem Webbrowser:

    kubectl \
      --context cluster-with-in-cluster-asm \
      --namespace asm-ingress \
      get service
    

    Aktualisieren Sie die Online Boutique-Startseite mehrmals und prüfen Sie jedes Mal die Fußzeile der Seite. Beachten Sie, dass 50% der Anfragen von einem Pod dem Cluster mit verwaltetem Cloud Service Mesh.

Mit verwaltetem Cloud Service Mesh zum Cluster migrieren

In diesem Abschnitt wird davon ausgegangen, dass Sie Inhaber eines Domainnamens sind und Zugriff auf die DNS-Einstellungen (Domainnamenserver) haben.

  1. Fügen Sie den DNS-Einstellungen einen A-Eintrag hinzu, der auf den Domainnamen verweist (z. B. beispiel.de) an die IP-Adresse des Ingress-Gateways, das auf dem Cluster ausgeführt wird mit dem Cloud Service Mesh im Cluster.

  2. Greifen Sie über den Domainnamen in Ihrem Webbrowser auf Online Boutique zu.

  3. Minimieren Sie die Gültigkeitsdauer (TTL) für DNS-Einträge, damit Sie den DNS-Eintrag, wenn ein Rollback erforderlich ist.

  4. Setzen Sie den A-Eintrag Ihres Domainnamens auf die externe IP-Adresse des Ingress-Gateway des Clusters mit verwaltetem Cloud Service Mesh.

  5. Löschen Sie nach erfolgreicher Migration den Cluster mit Cloud Service Mesh im Cluster:

    gcloud container clusters delete cluster-with-in-cluster-asm \
      --zone=us-central1-a \
      --project=PROJECT_ID
    

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Ressourcen löschen

Löschen Sie den Cluster mit dem verwalteten Cloud Service Mesh:

  gcloud container clusters delete cluster-with-managed-asm \
    --zone=us-central1-a \
    --project=PROJECT_ID

Nächste Schritte