In dieser Anleitung werden Sie durch einen häufigen Anwendungsfall für das Roll-out einer Canary-Bereitstellung mit Cloud Service Mesh geführt.
Was ist ein Canary-Deployment?
Bei einem Canary-Deployment wird ein kleiner Prozentsatz des Traffics an eine neue Version eines Mikrodienstes weitergeleitet. So können Sie das Deployment nach und nach für die gesamte Nutzerbasis einführen, während die alte Version eingestellt und ausgemustert wird. Wenn während dieses Vorgangs ein Fehler auftritt, kann der Traffic wieder auf die alte Version umgestellt werden. Mit Cloud Service Mesh können Sie Traffic weiterleiten, um dafür zu sorgen, dass neue Dienste sicher eingeführt werden.
Weitere Informationen zu Canary-Tests finden Sie unter Strategien für Bereitstellung und Tests von Anwendungen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.
Installieren verwaltetes Cloud Service Mesh* in einem GKE-Cluster.
Klonen Sie das Repository:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples cd anthos-service-mesh-samples/docs/canary-service
Online Boutique bereitstellen
Legen Sie den aktuellen Kontext für
kubectl
auf dem Cluster fest, in dem Sie Online Boutique bereitgestellt haben:gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Erstellen Sie den Namespace für die Beispielanwendung und das Ingress-Gateway:
kubectl create namespace onlineboutique
Fügen Sie dem Namespace
onlineboutique
ein Label hinzu, um Envoy-Proxys automatisch einzufügen. Folgen Sie den Schritten zum Aktivieren der automatischen Sidecar-Einfügung.Stellen Sie die Beispielanwendung bereit. Im Rahmen dieser Anleitung stellen Sie die Mikrodienst-Demo-Anwendung "Online Boutique" bereit.
kubectl apply \ -n onlineboutique \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/shared/online-boutique/kubernetes-manifests.yaml
Fügen Sie dem Deployment
productcatalog
das Labelversion=v1
hinzu. Dazu führen Sie diesen Befehl aus:kubectl patch deployments/productcatalogservice -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}' \ -n onlineboutique
Rufen Sie die von Ihnen bereitgestellten Dienste auf:
kubectl get pods -n onlineboutique
Erwartete Ausgabe:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-m84m6 2/2 Running 0 2m7s cartservice-c77f6b866-m67vd 2/2 Running 0 2m8s checkoutservice-654c47f4b6-hqtqr 2/2 Running 0 2m10s currencyservice-59bc889674-jhk8z 2/2 Running 0 2m8s emailservice-5b9fff7cb8-8nqwz 2/2 Running 0 2m10s frontend-77b88cc7cb-mr4rp 2/2 Running 0 2m9s loadgenerator-6958f5bc8b-55q7w 2/2 Running 0 2m8s paymentservice-68dd9755bb-2jmb7 2/2 Running 0 2m9s productcatalogservice-84f95c95ff-c5kl6 2/2 Running 0 114s recommendationservice-64dc9dfbc8-xfs2t 2/2 Running 0 2m9s redis-cart-5b569cd47-cc2qd 2/2 Running 0 2m7s shippingservice-5488d5b6cb-lfhtt 2/2 Running 0 2m7s
Alle Pods für Ihre Anwendung sollten mit dem Wert
2/2
in der SpalteREADY
ausgeführt werden. Dieser Wert weist darauf hin, dass die Pods einen Envoy-Sidecar-Proxy erfolgreich eingefügt haben.Stellen Sie
VirtualService
undDestinationRule
für v1 vonproductcatalog
bereit:kubectl apply -f destination-vs-v1.yaml -n onlineboutique
Beachten Sie, dass in den Ressourcen nur
v1
vorhanden ist.Rufen Sie die Anwendung in Ihrem Browser mithilfe der externen IP-Adresse Ihres Ingress auf:
kubectl get services -n GATEWAY_NAMESPACE
Im nächsten Abschnitt lernen Sie die Cloud Service Mesh-UI kennen und erfahren, wie Sie Ihre Messwerte aufrufen können.
Dienste in der Google Cloud Console bereitstellen und aufrufen
Rufen Sie in der Google Cloud Console die Seite GKE Enterprise-Dienste auf.
Standardmäßig werden die Dienste in der Ansicht Tabelle angezeigt.
In der Tabellenübersicht können Sie alle Dienste und wichtigen Messwerte auf einen Blick sehen.
Klicken Sie oben rechts auf Topologie. Hier können Sie Ihre Dienste und deren Interaktion miteinander ansehen.
Sie können Dienste erweitern und die Anfragen pro Sekunde für jeden Ihrer Dienste anzeigen, indem Sie den Mauszeige darauf bewegen.
Kehren Sie zur Tabellenansicht zurück.
Wählen Sie in der Tabelle der Dienste die Option
productcatalogservice
aus. Daraufhin wird eine Übersicht über den Dienst angezeigt.Klicken Sie auf der linken Seite des Bildschirms auf Traffic.
100 % des eingehenden Traffics zu
productcatalogservice
werden an den Arbeitslastdienst weitergeleitet.
Im nächsten Abschnitt wird die Erstellung einer v2 des Dienstes productcatalog
beschrieben.
v2 eines Dienstes bereitstellen
In dieser Anleitung führt
productcatalogservice-v2
mit dem FeldEXTRA_LATENCY
eine Latenz von 3 Sekunden in Anfragen ein.Wenden Sie diese Ressource auf den Namespace
onlineboutique
an.kubectl apply -f productcatalog-v2.yaml -n onlineboutique
Prüfen Sie die Anwendungs-Pods.
kubectl get pods -n onlineboutique
Erwartete Ausgabe:
NAME READY STATUS RESTARTS AGE adservice-85598d856b-8wqfd 2/2 Running 0 25h cartservice-c77f6b866-7jwcr 2/2 Running 0 25h checkoutservice-654c47f4b6-n8c6x 2/2 Running 0 25h currencyservice-59bc889674-l5xw2 2/2 Running 0 25h emailservice-5b9fff7cb8-jjr89 2/2 Running 0 25h frontend-77b88cc7cb-bwtk4 2/2 Running 0 25h loadgenerator-6958f5bc8b-lqmnw 2/2 Running 0 25h paymentservice-68dd9755bb-dckrj 2/2 Running 0 25h productcatalogservice-84f95c95ff-ddhjv 2/2 Running 0 25h productcatalogservice-v2-6df4cf5475-9lwjb 2/2 Running 0 8s recommendationservice-64dc9dfbc8-7s7cx 2/2 Running 0 25h redis-cart-5b569cd47-vw7lw 2/2 Running 0 25h shippingservice-5488d5b6cb-dj5gd 2/2 Running 0 25h
Beachten Sie, dass jetzt zwei
productcatalogservices
aufgeführt sind.Mit
DestinationRule
werden die Teilmengen eines Dienstes angegeben. In diesem Szenario gibt es eine Teilmenge für v1 und v2 vonproductcatalogservice
.Beachten Sie das Feld
labels
. Die Versionen vonproductcatalogservice
werden unterschieden, nachdem der Traffic vonVirtualService
weitergeleitet wurde.Wenden Sie die
DestinationRule
an:kubectl apply -f destination-v1-v2.yaml -n onlineboutique
Traffic zwischen v1 und v2 aufteilen
Durch
VirtualService
wird ein kleiner Prozentsatz des Traffics eingeführt, der an v2 vonproductcatalogservice
weitergeleitet wird.Das Feld "Teilmenge" enthält die Version und das Feld "Gewichtung" die prozentuale Aufteilung des Traffics. 75 % des Traffics werden an v1 von productcatalog und 25 % an v2 gesendet.
Wenden Sie den
VirtualService
an:kubectl apply -f vs-split-traffic.yaml -n onlineboutique
Wenn Sie die EXTERNAL_IP
des Cluster-Ingress aufrufen, sehen Sie, dass das Frontend periodisch langsamer geladen wird.
Im nächsten Abschnitt sehen Sie sich die Traffic-Aufteilung in der Google Cloud Console von GKE Enterprise an.
Trafficaufteilung in der Google Cloud Console beobachten
Kehren Sie zur Google Cloud Console zurück und rufen Sie die Seite mit den GKE Enterprise-Diensten auf. Zu den GKE Enterprise-Diensten
Klicken Sie oben rechts auf Topologie.
Maximieren Sie die Arbeitslast
productcatalogservice
. Sie sehen die Bereitstellungenproductcatalogservice
undproductcatalogservice-v2
.Kehren Sie zur Tabellenansicht zurück. Klicken Sie in der Tabelle "Dienste" auf
productcatalogservice
. Kehren Sie in der linken Navigationsleiste zu Traffic zurück.Beachten Sie, dass der eingehende Traffic zwischen v1 und v2 anhand des in der Datei
VirtualService
angegebenen Prozentsatzes aufgeteilt wird und zwei Arbeitslasten des Dienstes "productcatalog" vorhanden sind.Auf der rechten Seite des Bildschirms sehen Sie Messwerte für Anfragen, Fehlerrate und Latenz. Bei Cloud Service Mesh werden diese Messwerte für jeden Dienst beschrieben, um Ihnen die Beobachtbarkeit zu ermöglichen.
Roll-out oder Rollback zu einer Version
Nachdem Sie die Messwerte während eines Canary-Deployments beobachtet haben, können Sie mithilfe der Ressource VirtualService
ein Roll-out zum neuen Dienst oder ein Rollback zum alten Dienst ausführen.
Roll-out
Wenn Sie mit dem Verhalten eines v2-Dienstes zufrieden sind, erhöhen Sie schrittweise das Verhalten des Traffics zum v2-Dienst. Schließlich kann der Traffic zu 100 % an den neuen Dienst weitergeleitet werden.
So leiten Sie den gesamten Traffic an v2 von productcatalogservice
weiter:
kubectl apply -f vs-v2.yaml -n onlineboutique
Rollback
Wenn Sie ein Rollback zum v1-Dienst durchführen müssen, wenden Sie einfach destination-vs-v1.yaml
von zuvor an. Dadurch wird der Traffic nur an v1 von productcatalogservice
weitergeleitet.
So leiten Sie den gesamten Traffic an v1 von productcatalogservice
weiter:
kubectl apply -f vs-v1.yaml -n onlineboutique
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.
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen oder die einzelnen Ressourcen entfernen.
Projekt löschen
Löschen Sie das Projekt in Cloud Shell:
gcloud projects delete PROJECT_ID
Ressourcen löschen
Wenn Sie zusätzliche Gebühren vermeiden möchten, löschen Sie den Cluster:
gcloud container clusters delete CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
Wenn Sie den Cluster behalten und das Online Boutique-Beispiel entfernen möchten:
Löschen Sie die Anwendungs-Namespaces:
kubectl delete -f namespace onlineboutique
Erwartete Ausgabe:
namespace "onlineboutique" deleted
Löschen Sie die Diensteinträge:
kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/istio-manifests/frontend.yaml -n onlineboutique kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/istio-manifests/frontend-gateway.yaml -n onlineboutique
Erwartete Ausgabe:
serviceentry.networking.istio.io "allow-egress-googleapis" deleted serviceentry.networking.istio.io "allow-egress-google-metadata" deleted
Nächste Schritte
- Eine allgemeine Anleitung zum Konfigurieren von
PeerAuthentication
-Richtlinien finden Sie unter Transportsicherheit konfigurieren.