Google Compute Engine

1. Einführung

Hallo zusammen, vielen Dank, dass ihr heute hier seid. Sie möchten mehr über Google Compute Engine erfahren?

In diesem Codelab sehen wir uns Compute Engine anhand einer Beispielanwendung für ein Gästebuch an.

Sie erstellen Compute Engine-Instanzen, stellen nginx bereit und platzieren schließlich einen Network Load Balancer im Frontend. Sie können eine Compute Engine-Instanz entweder über die grafische Konsole oder über die Befehlszeile erstellen. In diesem Lab wird die Verwendung der Befehlszeile beschrieben.

ComputeEngine_128px.png

Google Compute Engine bietet virtuelle Maschinen, die in den Rechenzentren von Google ausgeführt werden, die mit dem globalen 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 und bieten nichtflüchtigen Speicher sowie konsistente Leistung. Die Maschinen sind in vielen Konfigurationen verfügbar, etwa in vordefinierten Größen oder mit der Option zur Erstellung benutzerdefinierter Maschinentypen, die für Ihre spezifischen Anforderungen optimiert sind.

Schließlich sind Compute Engine-VMs auch die Technologie, die von mehreren anderen Google Cloud-Produkten verwendet wird (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow usw.).

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten 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 Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird und den Sie jederzeit aktualisieren können.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach der Festlegung nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als PROJECT_ID angegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Nachdem das Projekt erstellt wurde, wird es „eingefroren“.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit nach Abschluss dieses Codelabs keine Gebühren anfallen, folgen Sie den Bereinigungsanweisungen am Ende des Codelabs. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Google Cloud Shell

Während Sie Google Cloud und Compute Engine von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Diese Debian-basierte virtuelle Maschine verfügt über alle Entwicklungstools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für dieses Codelab benötigen Sie also nur einen Browser (es funktioniert auch auf einem Chromebook).

  1. Klicken Sie zum Aktivieren von Cloud Shell in der Cloud Console einfach auf Cloud Shell aktivieren b125d9eb26a46cc5.png. Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern.

1067942a9a93f70.png

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

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre PROJECT_ID eingestellt ist.

gcloud auth list

Befehlsausgabe

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

Befehlsausgabe

[core]
project = <PROJECT_ID>

Wenn das Projekt aus irgendeinem Grund nicht festgelegt ist, führen Sie einfach den folgenden Befehl aus:

gcloud config set project <PROJECT_ID>

Suchst du nach deinem PROJECT_ID? Sehen Sie nach, welche ID Sie in den Einrichtungsschritten verwendet haben, oder suchen Sie sie im Cloud Console-Dashboard:

cc3895eeac80db2c.png

In Cloud Shell werden auch einige Umgebungsvariablen standardmäßig festgelegt, die für zukünftige Befehle nützlich sein können.

echo $GOOGLE_CLOUD_PROJECT

Befehlsausgabe

<PROJECT_ID>
  1. Legen Sie zum Schluss 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 besprochen, verwenden wir in diesem Codelab die gcloud-Befehlszeile. Alles, was hier beschrieben wird, kann auch über die Console (verfügbar unter console.cloud.google.com) erledigt werden.

Erstellen wir zuerst eine Instanz mit Standardeinstellungen :

$ 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 die EXTERNAL_IP. Das ist später wichtig.

Die Instanz wird mit einer Reihe von Standardeinstellungen erstellt :

  • Die von Ihnen ausgewählte Zone. Alle Instanzen befinden sich in einer Zone. Sie können beim Erstellen der Instanz eine Zone mit dem Flag --zone auswählen oder eine Standardzone festlegen (wie bei der Ersteinrichtung) und das Flag --zone weglassen.
  • Das aktuelle Debian GNU/Linux 9 (Stretch)-Image. Wenn Sie ein eigenes benutzerdefiniertes Image verwenden, geben Sie stattdessen den Namen des Images 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 sind in der Google Cloud Platform nur wenige Portzugriffe zulässig. Da wir Nginx bald installieren, aktivieren wir 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, für die eine Standardliste von IP-Adressblöcken festgelegt ist, die eingehende Verbindungen herstellen dürfen (--source-ranges). Diese Liste ist auf 0.0.0.0/0 (Überall) festgelegt.

Führen Sie gcloud compute firewall-rules create --help aus, um alle Standardwerte und alle 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 (weiterhin über Cloud Shell) 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 schon. Ganz einfach. (In der Produktion sollten Sie eine Passphrase eingeben.)

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

bfbc03997a41946e.png

6. Nginx installieren

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

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

Prüfen Sie, ob der Server mit curl von myinstance aus 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>

So finden Sie die externe IP-Adresse Ihrer Instanz:

dcc4e56e82ba2603.png

Beenden Sie die SSH-Verbindung und führen Sie diesen Befehl in 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

Rufen Sie dann http://EXTERNAL_IP/ auf. Dabei ist EXTERNAL_IP die öffentliche IP-Adresse von myinstance. Sie sollten die Nginx-Seite sehen:

49b52b9354041f3b.png

7. Startskript

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

Erstellen Sie eine Datei mit dem Namen startup.sh mit dem folgenden Inhalt. Sie können dazu einen beliebigen Texteditor verwenden, z. B. 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 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

Rufen Sie http://EXTERNAL_IP/ auf. Dort sollte die aktualisierte Startseite angezeigt werden. Wenn die Seite nicht sofort angezeigt wird, versuchen Sie es nach einigen Sekunden noch einmal. Möglicherweise wird nginx noch gestartet.

8. Servercluster erstellen

Wenn Sie einen Servercluster erstellen möchten, müssen Sie zuerst eine Instanzvorlage erstellen. Nachdem Sie eine Instanzvorlage erstellt haben, können Sie eine Instanzgruppe erstellen, um die Anzahl der zu erstellenden Instanzen zu verwalten.

Erstellen Sie zuerst eine Instanzvorlage mit dem Startskript :

$ 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

Als Nächstes erstellen wir 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 schließlich eine Instanzgruppe mit der Vorlage:

$ 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- vorangestellt ist.

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 verschiedene Load-Balancer-Typen in der Google Cloud Platform, darunter :

Als Nächstes erstellen wir 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 im Browser unter http://IP_ADDRESS/ aufrufen. IP_ADDRESS steht dabei für die IP-Adresse, die der vorherige Befehl ausgegeben hat.

Aus Zeitgründen erstellen wir heute keinen HTTP-Load-Balancer.

10. Cluster bereinigen

Vergessen Sie nicht, Ihren Cluster herunterzufahren, da er sonst weiter ausgeführt wird und Kosten verursacht. 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. Hier einige Beispiele :

Google Kubernetes Engine

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

Feedback geben

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