Google Compute Engine

1. Einführung

Hallo zusammen, vielen Dank, dass Sie heute dabei sind! Sind Sie bereit, Google Compute Engine kennenzulernen?

In diesem Codelab sehen wir uns die Compute Engine im Rahmen einer beispielhaften Gästebuchanwendung an.

Sie erstellen Compute Engine-Instanzen, stellen Nginx bereit und setzen schließlich einen Netzwerk-Load-Balancer in den Vordergrund. Sie können eine Compute Engine-Instanz über die grafische Konsole oder die Befehlszeile erstellen. In diesem Lab erfahren Sie, wie Sie die Befehlszeile verwenden.

ComputeEngine_128px.png

Google Compute Engine bietet virtuelle Maschinen, die in Rechenzentren von Google ausgeführt werden, die mit dem Glasfasernetzwerk von Google verbunden sind. Die angebotenen Tools und Workflows ermöglichen die Skalierung von einzelnen Instanzen bis hin zu globalem Cloud-Computing mit Load-Balancing.

Diese VMs starten schnell, bieten nichtflüchtigen Speicher und sorgen für konsistente Leistung. Die Maschinen sind in vielen Konfigurationen verfügbar, einschließlich vordefinierter Größen, und können auch mit benutzerdefinierten Maschinentypen erstellt werden, die für Ihre spezifischen Anforderungen optimiert sind.

Virtuelle Compute Engine-Maschinen werden auch in anderen Google Cloud-Produkten eingesetzt (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow usw.).

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als PROJECT_ID identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.

Google Cloud Shell

Sie können Google Cloud und die Compute Engine per Fernzugriff von Ihrem Laptop aus bedienen. In diesem Codelab verwenden wir jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Diese Debian-basierte virtuelle Maschine verfügt über alle erforderlichen Entwicklungstools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser – ja, er funktioniert auf Chromebooks.

  1. Klicken Sie einfach auf Cloud Shell aktivieren b125d9eb26a46cc5.png, um Cloud Shell über die Cloud Console zu aktivieren. Die Bereitstellung und Verbindung mit der Umgebung dauert einen Moment.

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und dass das Projekt bereits auf Ihre PROJECT_ID eingestellt ist.

gcloud auth list

Befehlsausgabe

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Sollte das Projekt aus irgendeinem Grund nicht eingerichtet sein, geben Sie einfach den folgenden Befehl ein:

gcloud config set project <PROJECT_ID>

Du suchst dein Gerät (PROJECT_ID)? Sehen Sie nach, welche ID Sie bei den Einrichtungsschritten verwendet haben, oder rufen Sie sie im Dashboard der Cloud Console auf:

cc3895eeac80db2c.png

Cloud Shell legt außerdem standardmäßig einige Umgebungsvariablen fest, die bei der Ausführung zukünftiger Befehle nützlich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  1. Legen Sie schließlich die Standardzone und die Projektkonfiguration fest.
gcloud config set compute/zone us-central1-f

Sie können verschiedene Zonen auswählen. Weitere Informationen finden Sie unter Regionen und Zonen.

3. Compute Engine-Instanz erstellen

Wie bereits erwähnt, verwenden wir in diesem Codelab die gcloud-Befehlszeile. Alle Aufgaben können über die Konsole ausgeführt werden, die unter console.cloud.google.com verfügbar ist.

Lassen Sie uns zunächst eine Instanz mit den Standardeinstellungen erstellen :

$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Notieren Sie sich das EXTERNAL_IP – das ist später wichtig.

Die Instanz wird mit einer Reihe von Standardeinstellungen erstellt :

  • Der von Ihnen ausgewählte Bereich. Alle Instanzen befinden sich in einer Zone. Sie können bei der Instanzerstellung eine Zone mit dem Flag --zone auswählen oder wie bei der Ersteinrichtung eine Standardzone festlegen und das Flag --zone weglassen.
  • Das aktuelle Debian GNU/Linux 9 (Stretch)-Image. Wenn Sie ein eigenes benutzerdefiniertes Image verwenden, geben Sie hier den Image-Namen an. Beispiel: --image my-own-image
  • Der Maschinentyp n1-standard-1. Sie können einen anderen Maschinentyp wie n1-highmem-4 oder n1-highcpu-6 auswählen. Wenn keiner der vordefinierten Maschinentypen Ihren Anforderungen entspricht, verwenden Sie einen benutzerdefinierten Maschinentyp.
  • Einen nichtflüchtigen Root-Speicher mit dem gleichen Namen wie die Instanz. Der Speicher wird automatisch an die Instanz angehängt.

Führen Sie gcloud compute instances create --help aus, um alle verfügbaren Optionen zu sehen.

4. Firewall für Port 80 aktivieren

Standardmäßig lässt die Google Cloud Platform nur wenige Portzugriffe zu. Da wir Nginx bald installieren werden, aktivieren Sie zuerst Port 80 in der Firewallkonfiguration.

$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False

Dadurch wird eine Firewallregel mit dem Namen allow-80 erstellt. Diese enthält eine Standardliste von IP-Adressblöcken, die eingehende Verbindungen herstellen dürfen (--source-ranges), auf 0.0.0.0/0 (überall) gesetzt ist.

Führen Sie gcloud compute firewall-rules create --help aus, um alle Standardeinstellungen und verfügbaren Optionen zu sehen, einschließlich der Möglichkeit, Firewallregeln basierend auf Tags anzuwenden.

5. SSH-Verbindung zur Instanz herstellen

So stellen Sie über die Befehlszeile und von Cloud Shell aus eine SSH-Verbindung zur Instanz her:

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

Das war's! ziemlich einfach. Stellen Sie in der Produktionsumgebung sicher, dass Sie eine Passphrase eingeben.

Alternativ können Sie auch direkt über die Console ( console.cloud.google.com) eine SSH-Verbindung zur Instanz herstellen. Gehen Sie dazu zu Compute Engine > VM-Instanzen und klicken Sie auf SSH.

bfbc03997a41946e.png

6. Nginx installieren

Melden Sie sich in der neu erstellten Instanz myinstance an und installieren Sie nginx:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

Testen Sie mit curl von myinstance, ob der Server ausgeführt wird:

$ curl -s localhost | grep nginx
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>

Ermitteln Sie die externe IP-Adresse für Ihre Instanz, indem Sie Ihre Instanzen über die Web-UI auflisten:

dcc4e56e82ba2603.png

Beenden Sie SSH und führen Sie den folgenden Befehl über Cloud Shell aus:

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Gehen Sie dann zu http://EXTERNAL_IP/, wobei EXTERNAL_IP die öffentliche IP-Adresse von myinstance ist und Sie die Nginx-Seite sehen können:

49b52b9354041f3b.png

7. Startskript

Anstatt die Instanz jedes Mal neu einzurichten, können Sie ein Startskript verwenden, um die Instanz beim Start zu initialisieren.

Erstellen Sie eine Datei mit dem Namen startup.sh und folgendem Inhalt. Sie können dazu Ihren bevorzugten Texteditor verwenden: vim, nano oder emacs:

#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html

Geben Sie einfach Folgendes ein, um eine neue VM-Instanz mit diesem Startskript zu erstellen :

$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh 
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Rufe http://EXTERNAL_IP/ auf. Du solltest die aktualisierte Startseite sehen. Wenn die Seite nicht sofort nach einigen Sekunden angezeigt wird, startet der Host möglicherweise noch Nginx.

8. Servercluster erstellen

Um einen Cluster von Servern zu erstellen, müssen Sie zuerst eine Instanzvorlage erstellen. Sobald eine Instanzvorlage erstellt ist, können Sie eine Instanzgruppe erstellen, um die Anzahl der zu erstellenden Instanzen zu verwalten.

Erstellen Sie zunächst eine Instanzvorlage mithilfe des Startskripts :

$ gcloud compute instance-templates create nginx-template \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00

Erstellen wir nun einen Zielpool. Ein Zielpool ermöglicht es, einen einzigen Zugriffspunkt für alle Instanzen einer Gruppe zu verwenden. Außerdem ist dieser für den Lastenausgleich an späterer Stelle in diesem Lab erforderlich.

$ gcloud compute target-pools create nginx-pool
Created [...].
NAME: nginx-pool
REGION: us-central1
SESSION_AFFINITY: NONE
BACKUP:
HEALTH_CHECKS:

Erstellen Sie abschließend mit der Vorlage eine Instanzgruppe:

$ gcloud compute instance-groups managed create nginx-group \
         --base-instance-name nginx \
         --size 2 \
         --template nginx-template \
         --target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no

Dadurch werden zwei zusätzliche VM-Instanzen erstellt, deren Namen das Präfix nginx- haben.

Sie sollten jetzt alle erstellten Instanzen sehen können.

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-frpl
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-ztg4
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

9. Netzwerk-Load-Balancer erstellen

Es gibt mehrere Arten von Load-Balancern in der Google Cloud Platform, darunter :

So erstellen Sie einen regionalen Netzwerk-Load-Balancer, der auf die Instanzgruppe ausgerichtet ist:

$ gcloud compute forwarding-rules create nginx-lb \
         --ports 80 \
         --target-pool nginx-pool
Created [...].

$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool

Sie können den Load-Balancer dann über den Browser http://IP_ADDRESS/ aufrufen, wobei IP_ADDRESS die Adresse ist, die der vorherige Befehl ausgegeben hat.

Aus diesem Grund können wir heute keinen HTTP-Load-Balancer erstellen.

10. Cluster bereinigen

Vergessen Sie nicht, den Cluster herunterzufahren, da er sonst weiter ausgeführt wird und Kosten anfallen. Mit den folgenden Befehlen werden die Google Compute Engine-Instanzen, die Instanzgruppe, die Targeting-Gruppe und der Load-Balancer gelöscht.

$ gcloud compute forwarding-rules delete nginx-lb

$ gcloud compute instance-groups managed delete nginx-group

$ gcloud compute target-pools delete nginx-pool

$ gcloud compute instance-templates delete nginx-template

$ gcloud compute instances delete nginx

$ gcloud compute instances delete myinstance

$ gcloud compute firewall-rules delete allow-80

Bei jedem der oben genannten Befehle sollten Sie aufgefordert werden, das Löschen der Ressource zu bestätigen.

11. Nächste Schritte

Herzlichen Glückwunsch! Sie haben dieses Compute Engine-Codelab abgeschlossen.

Weitere Compute Engine-Funktionen

Google Compute Engine bietet eine Vielzahl von Funktionen. Weitere Informationen :

Google Kubernetes Engine

Google Kubernetes Engine (GKE) ist ein gehostetes und vollständig verwaltetes Kubernetes-Angebot von Google Cloud. Es gibt verschiedene Codelabs, die Ihnen den Einstieg in die GKE erleichtern. Hier ist ein guter Ausgangspunkt :

Feedback geben

  • Bitte nehmen Sie sich einen Moment Zeit, um an unserer kurzen Umfrage teilzunehmen.