Deterministische Instanzvorlagen

Auf dieser Seite wird beschrieben, wann und warum deterministische Instanzvorlagen erstellt werden sollten. Deterministische Instanzvorlagen verdeutlichen explizit den Typ der Dienste oder Anwendungen von Drittanbietern, die beim Bereitstellen der Instanzvorlage auf Ihren Instanzen installiert werden sollten. Indem Sie deterministische Instanzvorlagen erstellen, minimieren Sie Mehrdeutigkeiten und unerwartetes Verhalten der Instanzvorlagen.

Vorbereitung

Gründe für das Erstellen deterministischer Instanzvorlagen

Im Allgemeinen empfehlen wir, die Eigenschaften Ihrer Instanzvorlage so explizit und deterministisch wie möglich zu halten. Wenn Sie in Ihren Instanzvorlagen Startskripte einsetzen, die Dienste von Drittanbietern installieren oder nutzen, sorgen Sie dafür, dass diese Skripte explizite Informationen angeben, zum Beispiel die Version der Anwendung, die installiert werden soll. Compute Engine kann nur von den Informationen ausgehen, die in der Vorlage definiert sind und hat keine Kontrolle über Dienste von Drittanbietern. Wenn Ihre Vorlage zu vage ausfällt, kann unerwartetes Verhalten Ihrer Instanzvorlage die Folge sein.

Betrachten wir zum Beispiel den folgenden Befehl zur Erstellung einer Instanzvorlage mit einem Startskript, das apache2 installiert und eine Datei verwendet, die auf einem externen Server gehostet wird:

gcloud compute instance-templates create example-template-with-startup \
    --image-family debian-9 \
    --image-project debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt-get install -y apache2
    scp myuser@108.59.87.185:index.php /var/www/'

Es gibt zwei mögliche Probleme mit diesem Startskript:

  • Das Skript legt nicht explizit fest, welche Version von apache2 installiert werden soll, und verlässt sich auf die aktuelle Version aus dem Repository "apt-get".
  • Das Skript verlässt sich auf eine Datei, die bei einem Drittanbieter gehostet wird, nicht versioniert ist und seit der letzten Verwendung der Instanzvorlage geändert worden sein könnte.

Wenn Sie Autoscaling verwenden, kann eine nicht deterministische Instanzvorlage dazu führen, dass einer verwalteten Instanzgruppe neue Instanzen mit einer anderen Konfiguration, etwa mit einer anderen Version von apache2, hinzugefügt werden.

Wenn Sie diese Vorlage auf eine verwaltete Instanzgruppe anwenden, die Gruppe dann mit dem Instanzgruppen-Updater auf eine andere Vorlage umstellen und sich dann entscheiden, zur vorherigen Vorlage zurückzukehren, gibt es ein ähnliches Problem: Sie könnten am Ende Instanzen haben, die eine andere Version von apache2 oder der Datei index.php verwenden als vor der Änderung, denn Ihre Instanzen holen sich beim Start immer die neueste Version.

Mehrdeutiges oder unerwartetes Verwalten von Instanzvorlagen vermeiden

Wenn Sie unerwartetem Verhalten der Vorlage vorbeugen möchten, verwenden Sie eine der folgenden Methoden:

  • Verwenden Sie containeroptimierte Images oder Docker mit Docker-Tags. Zum Beispiel empfehlen wir, für jeden neuen Build Ihres Docker-Images neue Tags zuzuweisen und diese Tags anstelle des standardmäßigen neuesten Tags in Ihren Instanzvorlagen zu verwenden. Bei einem containeroptimierten Image können Sie in der Manifestdatei explizit auf einen bestimmten Build des Images verweisen. Im folgenden Beispiel wird ein Docker-Image "myimage" einer Version verwendet, die mit "version_2_1_3" getaggt ist:

    version: v1beta2
    containers:
      - name: simple-echo
        image: myimage:version_2_1_3
           [ rest of your manifest file ]
    
  • Erstellen Sie ein benutzerdefiniertes Image, das als Image für die Vorlage verwendet wird. Diese Methode ist den Startskripts vorzuziehen, denn sie sorgt dafür, dass jede Instanz gleich ist. Startskripts hingegen könnten nach Updates von Distributionspaketen unterschiedliche Ergebnisse liefern. Verwenden Sie Startskripts in Ihren Instanzvorlagen für Prototypen und schnelle Entwicklung. Verwenden Sie jedoch benutzerdefinierte Images, wenn die Dienste in Produktionsqualität bereitgestellt werden sollen.

  • Wenn Sie mit Startskripts arbeiten möchten, sollten Sie dafür sorgen, dass die Skripts deterministisch sind. Erstellen Sie zum Beispiel eine neue Version der vorigen Vorlage und schreiben Sie ein deterministisches Startskript:

    gcloud compute instance-templates create example-template-with-startup-2-1-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --metadata startup-script='#! /bin/bash
        sudo apt-get install -y apache2=2.2.20-1ubuntu1
        scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
    

    Dabei ist "version_2_1_3" ein Unterverzeichnis, das PHP-Skripts für die Version 2.1.3 des Dienstes enthält.

Nächste Schritte

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation