Mit Migrate for Anthos von Compute Engine zu Kubernetes Engine migrieren

1. Übersicht

Es ist nicht immer möglich, vorhandene Anwendungen für Kubernetes umzuschreiben oder umzugestalten. Mit Migrate for Anthos können Sie Ihre vorhandenen Anwendungen modernisieren und in Kubernetes ausführen. In diesem Codelab migrieren Sie eine in Compute Engine gehostete Web-App mithilfe von Migrate for Anthos zu Kubernetes Engine.

Aufgaben in diesem Lab

  • Migrate for Anthos in einem Kubernetes-Cluster bereitstellen
  • So erstellen Sie einen Container in einem zustandsorientierten Set aus einer vorhandenen Compute Engine-Instanz
  • Container in Kubernetes bereitstellen und mit einem Load-Balancer konfigurieren

Voraussetzungen

  • Ein Google Cloud-Projekt mit eingerichteter Abrechnung. Falls Sie kein Google Ads-Konto haben, müssen Sie eines erstellen.

2. Einrichtung

Dieses Codelab kann vollständig auf der Google Cloud Platform ausgeführt werden, ohne dass eine lokale Installation oder Konfiguration erforderlich ist.

APIs aktivieren

Bevor Sie beginnen, müssen Sie die erforderlichen APIs in Ihrem Google Cloud-Projekt aktivieren:

Webserver für Compute-Instanz erstellen

Lassen Sie uns eine Compute-Instanz erstellen, auf der unser erster NGINX-Webserver gehostet wird, zusammen mit den Firewallregeln, die es uns ermöglichen, die Standard-Landingpage des Webservers anzusehen. Dafür gibt es mehrere Möglichkeiten. Der Einfachheit halber verwenden wir jedoch Cloud Shell.

Führen Sie in Cloud Shell folgenden Befehl aus:

gcloud compute instances create webserver --zone=us-central1-a && \
gcloud compute firewall-rules create default-allow-http --allow=tcp:80 

Mit der ersten Hälfte dieses Befehls wird eine Google Cloud-Instanz in der Zone us-central1-a erstellt. In der zweiten Hälfte wird eine Firewallregel mit dem Namen „default-allow-http“ erstellt. um HTTP-Traffic in unser Netzwerk zuzulassen.

Wenn die Instanz erfolgreich erstellt wurde, wird eine Tabelle mit den Details der Instanz angezeigt. Notieren Sie sich die externe IP-Adresse. Sie benötigen sie, um zu einem späteren Zeitpunkt zu überprüfen, ob unser Webserver ausgeführt wird.

a08aa5bf924b107d.png

Sobald die Instanz läuft, können Sie über Cloud Shell eine SSH-Verbindung zur Instanz herstellen, um nginx zu installieren und den Webserver zu starten:

gcloud compute ssh --zone us-central1-a webserver

Melden Sie sich bei der Compute-Instanz an und installieren Sie nginx:

sudo apt install nginx

Mit dem Befehl logout von der SSH-Sitzung abmelden

Geben Sie die externe IP-Adresse der Instanz von vorhin in den Browser ein, um zu überprüfen, ob unser Webserver ausgeführt wird. Sie sollten den nginx-Standardstartbildschirm sehen:

5c08e3b2bd17e03.png

Dieser Webserver dient als Legacy-Webanwendung, die wir mithilfe von Migrate for Anthos zu Kubernetes migrieren.

3. Kubernetes-Cluster mit Migrate for Anthos

Als Nächstes erstellen wir einen GKE-Cluster, in dem wir schließlich den Compute Engine-Webserver migrieren. Führen Sie in der Cloud Console folgenden Befehl aus:

gcloud container clusters create my-gke-cluster \
  --zone us-central1-a \
  --cluster-version 1.13 \
  --machine-type n1-standard-4 \
  --image-type "UBUNTU" \
  --num-nodes 1 \
  --enable-stackdriver-kubernetes

Warten Sie einige Minuten, bis der Befehl abgeschlossen ist. Nachdem der Cluster erstellt wurde, erhalten Sie eine Ausgabe mit den zugehörigen Details:

c69778b8fb8ac72b.png

Rufen Sie als Nächstes den GCP Marketplace auf, um Migrate for Anthos bereitzustellen:

45f5753cae53ccb5.png

Klicken Sie auf der Marketplace-Seite für Migrate for Anthos auf „Konfigurieren“ und wählen Sie Ihr Projekt aus der Liste aus, wenn Sie dazu aufgefordert werden. Auf der nächsten Seite wird ein Formular mit einigen eingegebenen Standardwerten angezeigt. Wählen Sie den soeben erstellten Cluster aus und klicken Sie auf Bereitstellen:

94dc6238b2affd16.png

Migrate for Anthos sollte jetzt in unserem Kubernetes-Cluster bereitgestellt werden. Wenn die Bereitstellung abgeschlossen ist, wird der Status „OK“ angezeigt. auf der Seite "Kubernetes Engine-Anwendungen":

5bf601103a5335cf.png

4. Von der Compute-Instanz zum zustandsorientierten Set

Wir haben einen Kubernetes-Cluster, auf dem Migrate for Anthos ausgeführt wird, und können jetzt mit dem Migrationsprozess beginnen. Zum Bereitstellen der Compute-Instanz in einem Kubernetes-Cluster fahren wir die Compute Engine-Instanz herunter, damit Sie Snapshots der Laufwerke erstellen können. Bevor Sie fortfahren, notieren Sie sich die Instanz-ID, die wir später benötigen:

gcloud compute instances describe webserver --zone us-central1-a | grep ^id

Fahren wir unsere Compute-Instanz herunter:

gcloud compute instances stop webserver --zone us-central1-a

Nachdem die Instanz nun beendet wurde, können wir einen sicheren Snapshot der Laufwerke erstellen, indem wir das folgende Skript ausführen. Achten Sie darauf, Ihre Projekt-ID und Ihre Instanz-ID einzufügen:

python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \
  -p <project-id>   -i <instance-id> \
  -z us-central1-a \
  -T us-central1-a \
  -A webserver-statefulset \
  -o containerized-webserver.yaml

Mit diesen Flags wird clone_vm_disks.py Folgendes tun:

  • Prüfen, ob die GCE-Instanz deaktiviert ist
  • Snapshot von jedem Laufwerk der Instanz erstellen
  • Aus jedem Snapshot ein neues Laufwerk erstellen
  • Erstellte Snapshots löschen
  • Generieren Sie in Ihrem aktuellen Arbeitsverzeichnis eine YAML-Datei, um ein zustandsorientiertes Set bereitzustellen, das Ihren Webserver hostet

Die generierte YAML-Datei stellt ein zustandsorientiertes Set in unserem Kubernetes-Cluster zusammen mit den Anforderungen nichtflüchtiger Volumes bereit, die zum Bereitstellen der kopierten Laufwerke in unserem Webservercontainer erforderlich sind. Wir können diese Änderungen mit kubectl anwenden:

kubectl apply -f containerized-webserver.yaml

Prüfen Sie auf der Seite „Arbeitslasten“ den Status des Webserver-statefulset:

Es ist normal, wenn der Status „Pods stehen aus“ lautet. nach der Ausführung von kubectl apply einige Minuten lang laufen zu lassen. Fahren Sie fort, sobald der Status „OK“ lautet.

5. Cluster dem Load-Balancer freigeben

An diesem Punkt sollte im Kubenetes-Cluster der Webserver als zustandsorientiertes Set ausgeführt werden. Wir müssen seinen Container aber auch einem Load-Balancer zur Verfügung stellen, um über eine externe IP-Adresse auf den Webserver zuzugreifen. Erstellen Sie in Cloud Shell eine neue Datei mit dem Namen loadbalancer.yaml und folgendem Inhalt:

loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: webserver-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: webserver-statefulset
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Wenden Sie es jetzt mit kubectl an:

kubectl apply -f loadbalancer.yaml

Mit kubectl lässt sich die externe IP-Adresse des Webserver-Container-Dienstes abrufen:

kubectl get services

Wenn wir die externe IP-Adresse in den Browser eingeben, erhalten wir denselben NGINX-Begrüßungsbildschirm wie zuvor:

5c08e3b2bd17e03.png

Geschafft! Unser GCE-Webserver wird jetzt auf Kubernetes gehostet. Sehr gut!

6. Stackdriver Monitoring

Messwerte

Als verwalteter Kubernetes-Dienst ist Kubernetes Engine automatisch für Logging und Monitoring mit Stackdriver eingerichtet. Sehen wir uns einige der Messwerte an, die Stackdriver automatisch erfasst.

Klicken Sie im Menü „Produkte“ auf den Link „Monitoring“. Der Zugriff darauf kann bei der Einrichtung des Arbeitsbereichs einige Minuten dauern.

Nach dem Laden bewegen Sie den Mauszeiger im linken Bereich auf „Resources“ und wählen Sie „Kubernetes Engine NEW“ aus. aus.

4e62c8ad3f2b3fe9.png

Jede Zeile im hier dargestellten Dashboard steht für eine Kubernetes-Ressource. Mit den Links über dem Dashboard können Sie zwischen der Infrastruktur-, Arbeitslasten- und Dienstansicht wechseln.

62066a9251d19843.png

Maximieren Sie in der Ansicht „Arbeitslasten“ „my-gke-cluster“. und zur Standardeinstellung aufschlüsseln > Webserver-statefulset > Webserver-statefulset-0 > Webserver-statefulset. Klicken Sie auf den Container des Webserver-Stateful-Sets. Hier finden Sie einige vorkonfigurierte Messwerte, die von Stackdriver erfasst werden, darunter Arbeitsspeicher- und CPU-Auslastung.

d054778de301429e.png

Mit den in diesem Dashboard angezeigten Diagrammen können wir ein benutzerdefiniertes Dashboard erstellen.

Benutzerdefinierte Dashboards

Mit Stackdriver können wir benutzerdefinierte Dashboards erstellen, mit denen wir Diagramme und Grafiken für alle uns zur Verfügung stehenden Messwertdaten organisieren können. Lassen Sie uns ein benutzerdefiniertes Dashboard erstellen, um einen Überblick über einige Messwerte unseres Webservers zu erhalten.

Bewegen Sie den Mauszeiger im linken Bereich auf „Dashboards“ und klicken Sie dann auf „Dashboard erstellen“.

56a0513efe60de3e.png

Da unser leeres Dashboard nun verfügbar ist, können Sie Messwerte hinzufügen, die Sie im Auge behalten möchten. Geben wir dem unbenannten Dashboard einen aussagekräftigen Namen, z. B. „Meine Webserver-Container“. und klicken Sie auf „Diagramm hinzufügen“, oben rechts:

bd66ba91f3125028.png

Erinnern Sie sich noch an die sofort einsatzbereiten Messwerte? Lassen Sie uns ein Diagramm für die Container-CPU-Auslastung hinzufügen. Geben Sie im Feld für Diagrammtitel „CPU Utilization“ (CPU-Auslastung) ein. Geben Sie im Feld für „Ressourcentyp und Messwert finden“ request_utilization ein und wählen Sie in der gefilterten Liste „CPU-Anfrageauslastung“ aus. Durch diese Auswahl werden die Felder „Ressourcentyp“ und „Messwert“ ausgefüllt.

Als Nächstes filtern wir nach Projekt-ID (wenn mehrere Projekte vorhanden sind) und container_name. Geben Sie im Feld „Filter“ den Wert project_id ein, wählen Sie ihn in der gefilterten Liste aus und wählen Sie dann im Feld „Wert“ Ihr Projekt aus. Außerdem müssen wir nach container_name filtern. Geben Sie im Feld „Filter“ den Namen container_name ein, wählen Sie ihn in der gefilterten Liste aus und klicken Sie dann im Feld „Wert“ auf „Webserver-statefulset“. Klicken Sie auf „Speichern“.

Wir haben jetzt ein Dashboard mit unserem ersten Diagramm.

3d3d45e4357454e0.png

7. Verfügbarkeitsdiagnose und Benachrichtigungsrichtlinie

Mit Stackdriver können wir Benachrichtigungen einrichten, damit wir informiert werden, wenn Messwerte einen von uns festgelegten Grenzwert erreichen. Stackdriver kann uns beispielsweise eine E-Mail senden, wenn die CPU-Auslastung im letzten Schritt eine bestimmte Zeit lang über einem bestimmten Schwellenwert liegt. Dies kann auf ein Problem mit unserer App hindeuten. Um zu zeigen, wie diese Benachrichtigungen aussehen, richten wir eine Verfügbarkeitsdiagnose ein und simulieren dann einen Ausfall.

Wählen Sie im linken Bereich „Verfügbarkeitsdiagnosen“ und dann „Verfügbarkeitsdiagnosen-Übersicht“ aus:

49368e5700274cf2.png

Wie auf der Seite „Verfügbarkeitsdiagnosen“ vorgeschlagen, richten wir unsere erste Verfügbarkeitsdiagnose ein. Klicken Sie rechts oben auf der Seite auf die Schaltfläche Verfügbarkeitsdiagnose hinzufügen.

d884560f91011009.png

Geben Sie im nächsten Formular "Endpoint Uptime" (Endpunktverfügbarkeit) ein. als Titel und die externe IP-Adresse des Load-Balancers als Hostnamen.

568a8f1e27ae8417.png

Klicken Sie auf Speichern. Sie werden dann aufgefordert, eine zugehörige Benachrichtigungsrichtlinie zu erstellen:

f89d53a106a709f4.png

Klicken Sie auf Benachrichtigungsrichtlinie erstellen.

Nennen Sie sie „Richtlinie zur Verfügbarkeit des Endpunkts“. Legen Sie im Bereich Konfiguration die Option „Bedingung erfüllt, wenn“ fest. auf und klicken Sie auf Speichern.

74609849348bd03e.png

Wir sind noch nicht ganz fertig. Als Nächstes legen wir einen Benachrichtigungskanal fest, über den wir bei Verstößen gegen unsere Benachrichtigungsrichtlinie benachrichtigt werden. Wählen Sie im Dropdown-Menü Benachrichtigungskanaltyp E-Mail gefolgt von einer gültigen E-Mail-Adresse aus.

44c474e28a497659.png

Klicke auf Benachrichtigungskanal hinzufügen. Schließlich benennen Sie die Richtlinie unten im Formular „Verfügbarkeit der Web-App“. und klicken Sie auf „Speichern“.

Wenn Sie wissen möchten, wie eine Benachrichtigung aussieht, öffnen Sie Cloud Shell in der Cloud Console noch einmal. Der folgende Befehl stoppt den in unserem Webserver-Pod ausgeführten Nginx-Dienst:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

Nach einigen Minuten sollten Sie eine E-Mail-Benachrichtigung über den Ausfall erhalten:

808ac1d75ce3681f.png

Machen wir das rückgängig. In Cloud Shell starten wir nginx neu:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"

Nach ein paar Minuten erhalten Sie eine weitere Stackdriver-E-Mail, diesmal mit einer besseren Nachricht als zuvor:

5b8262fbbc4877c.png

8. Bereinigen

Nachdem wir nun mit Migrate for Anthos von GCE zu GKE migriert sind, bereinigen wir unser Projekt von allen Ressourcen, die wir erstellt haben.

Projekt löschen

Wenn Sie möchten, können Sie das gesamte Projekt löschen. Rufen Sie in der GCP Console die Seite Cloud Resource Manager auf:

Wählen Sie in der Projektliste das Projekt aus, an dem Sie gearbeitet haben, und klicken Sie auf Löschen. Sie werden aufgefordert, die Projekt-ID einzugeben. Geben Sie den Code ein und klicken Sie auf Herunterfahren.

Wenn Sie die verschiedenen Komponenten einzeln löschen möchten, fahren Sie mit dem nächsten Abschnitt fort.

Stackdriver

Dashboard

Klicken Sie auf der Dashboard-Seite oben auf das Symbol „Einstellungen“ dc259295eb33cb42.png und wählen Sie Dashboard löschen aus.

Benachrichtigungsrichtlinie

Wähle auf der Seite Richtlinien für jede von dir erstellte Richtlinie im Menü „Aktionen“ 2ef75d82e76accaa.png die Option Löschen aus.

Verfügbarkeitsdiagnose

Wählen Sie auf der Seite „Verfügbarkeitsdiagnosen“ im Menü „Aktionen“ rechts neben jeder erstellten Prüfung die Option Löschen aus.

GCE und Kubernetes

Google Compute Engine-Instanz

gcloud compute instances delete webserver --zone=us-central1-a

Kubernetes-Cluster (einschließlich Migrate for Anthos, zustandsorientiertem Set und Load-Balancer-Dienst)

gcloud container clusters delete my-gke-cluster --zone=us-central1-a

Laufwerke

Unser zustandsorientiertes Set hat ein von uns erstelltes Laufwerk verwendet. So rufen Sie den Namen ab:

gcloud compute disks list --filter=webserver

Wenn Sie anstelle meines Namens den Namen Ihres Laufwerks verwenden, löschen Sie es so:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

Alles aufgeräumt!

9. Glückwunsch!

Weiter so! Sie haben Ihren Webserver mithilfe von Migrate for Anthos von einer GCE-Instanz zu einem Kubernetes-Cluster migriert.

Behandelte Themen

  • Wir haben einen Webserver mit Migrate for Anthos von GCE zu einem Kubernetes-Cluster migriert
  • Wir haben unseren zustandsorientierten Set-Webserver über einen Load-Balancer-Dienst von Kubernetes verfügbar gemacht.
  • Wir haben Stackdriver aktiviert und ein benutzerdefiniertes Dashboard
  • Wir haben eine Verfügbarkeitsdiagnose und eine Benachrichtigungsrichtlinie konfiguriert, um uns zu informieren, wenn unser Webserver ausfällt.