Best Practices für die Imageverwaltung

Diese Lösung bietet einen ausführlichen Leitfaden zur Verwaltung von Compute Engine-Images. Images stellen die grundlegende Betriebsumgebung für Anwendungen bereit, die in Compute Engine ausgeführt werden. Sie sind von entscheidender Bedeutung für eine schnelle und zuverlässige Bereitstellung und Skalierung Ihrer Anwendung. Sie können Images auch zum Archivieren von Anwendungsversionen für Notfallwiederherstellungs- oder Rollback-Szenarien verwenden.

Images verstehen

Ein Image in Compute Engine ist eine Cloudressource, die einen Verweis auf ein unveränderliches Laufwerk bietet. Diese Laufwerkdarstellung wird dann mit verschiedenen Datenformaten gekapselt.

Images verstehen

Ein Image besteht aus einer Gruppe von RAW-Byte, die zum Erzeugen eines vorbespielten Laufwerks dient. Auf ein beliebiges formatiertes Laufwerk wird eine partitionierte Tabelle geschrieben, die auf mindestens eine Daten enthaltende Partition verweist. Ein Image ist nur dann bootfähig, wenn es einen Master Boot Record und eine bootfähige Partition enthält. Damit eine Festplatte als Compute Engine-Image importiert werden kann, müssen die darauf enthaltenen Bytes in eine Datei mit dem Namen disk.raw geschrieben werden.

Nachdem die vollständige Byte-Sequenz von der Festplatte in die Datei geschrieben wurde, wird die Datei im tar-Format archiviert und dann im GZIP-Format komprimiert. Anschließend können Sie die resultierende *.tar.gz-Datei in Cloud Storage hochladen und als Image in Compute Engine registrieren, wie im vorherigen Diagramm dargestellt. Ein registriertes Image kann dazu verwendet werden, genaue Replikate der Originalfestplatte in einer beliebigen Region von Google Cloud zu erstellen. Neu registrierte Images werden häufig als Start-Volumes für Compute Engine-Instanzen eingesetzt.

Eine grundlegende Einführung in diese Compute Engine-Begriffe finden Sie unter VM-Instanzen und Images.

Boot-Image auswählen

Der erste Schritt bei der Verwendung von Compute Engine besteht darin, ein Image auszuwählen, das Sie als Betriebssystem für Ihre VM-Instanzen verwenden möchten. Sie können öffentliche, von Google Cloud bereitgestellte Images verwenden, die regelmäßig aktualisiert werden. Google Cloud bietet eine Vielzahl von Betriebssystemen einschließlich Debian, Ubuntu und CentOS, die Sie ohne zusätzliche Gebühr verwenden können. Einige Betriebssysteme, wie etwa Red Hat Enterprise Linux und Microsoft Windows, sind Premium-Images, für die pro Betriebsstunde der Instanzen zusätzliche Gebühren anfallen.

Weitere Informationen zu einem bestimmten Image, zum Beispiel in Bezug auf Richtlinien für automatische Aktualisierungen, Sicherheits-Patching sowie Support-Kanäle, finden Sie im Abschnitt Details zu Betriebssystemen der Produktdokumentation.

Boot-Image

Sie können die öffentlichen Images von Google Cloud zum Starten einer Compute Engine-Instanz verwenden. Anschließend können Sie die Instanz für die Ausführung Ihrer Anwendung anpassen.

Ein Ansatz für die Konfiguration einer Instanz besteht darin, mithilfe eines Startskripts die Befehle auszuführen, die Ihre Anwendung beim Starten bereitstellen. Denken Sie daran, dass dieses Skript bei jedem Starten der Instanz ausgeführt wird. Deshalb müssen Sie das Skript idempotent gestalten, um einen inkonsistenten oder nur teilweise konfigurierten Zustand zu vermeiden. Wenn Ihre Instanzen zu einer Gruppe von verwalteten Instanzen gehören, können Sie Instance Group Updater verwenden, um die Instanzen neu zu starten oder neu zu erstellen, wodurch das Startskript noch einmal ausgeführt wird. Ein übliches Vorgehen ist es, das Startskript zu verwenden, um ein Konfigurationsmanagement-Tool wie etwa Chef oder Ansible auszuführen.

Benutzerdefinierte Images erstellen

Die Konfiguration eines Instanz-Startskripts ist zwar eine durchaus akzeptable Methode zur Bereitstellung Ihrer Infrastruktur, wenn Sie aber eine effizientere Vorgehensweise wünschen, dann erstellen Sie ein neues benutzerdefiniertes Image, bei dem Ihre Konfiguration im öffentlichen Image integriert ist. Sie können Images auf verschiedene Weise anpassen:

  • Manuell
  • Automatisiert
  • Import

Das Erstellen eines benutzerdefinierten Images wird als Verankern bezeichnet.

Das Verankern Ihrer Images bietet die folgenden Vorteile:

  • Kürzere Anlaufzeit vom Booten bis zur Bereitschaft der Anwendung.
  • Verbesserte Zuverlässigkeit für Anwendungsbereitstellungen.
  • Einfacheres Rollback zu vorherigen Versionen.
  • Weniger Abhängigkeiten von externen Diensten beim Anwendungs-Bootstrap.
  • Beim Hochskalieren werden Instanzen erzeugt, die identische Softwareversionen enthalten.

Manuelles Verankern

Sie können ein einfaches benutzerdefiniertes Image erstellen, indem Sie aus einem öffentlichen Image eine neue VM-Instanz erzeugen, die gewünschten Anwendungen und Einstellungen auf der Instanz konfigurieren und dann ein benutzerdefiniertes Image aus dieser Instanz erstellen. Verwenden Sie diese Methode und nicht die automatisierte Verankerung oder den Import vorhandener Images, wenn Sie Ihre Images vollständig neu manuell konfigurieren können.

Mit den folgenden Schritten können Sie ein einfaches benutzerdefiniertes Image erstellen:

  1. Erstellen Sie eine Instanz aus einem öffentlichen Image.
  2. Stellen Sie eine Verbindung zur Instanz her.
  3. Passen Sie die Instanz an Ihre Bedürfnisse an.
  4. Beenden Sie die Instanz.
  5. Erstellen Sie ein benutzerdefiniertes Image aus dem Bootlaufwerk dieser Instanz. Dazu müssen Sie die Instanz löschen, aber das Bootlaufwerk beibehalten.

Automatisiertes Verankern

Das manuelle Verankern erleichtert den Einstieg, wenn Sie es mit wenigen Images zu tun haben. Bei einer größeren Anzahl von Images gestalten sich die Prüfung und Verwaltung aber schwieriger. Packer ist ein Open-Source-Tool, das die Imageerstellung zu einem leichter reproduzierbaren, prüfbaren, konfigurierbaren und zuverlässigeren Vorgang macht. Weitere Informationen zum Erzeugen einer Pipeline für die automatisierte Imageerstellung finden Sie unter Automatisierte Image-Builds mit Jenkins, Packer und Kubernetes. Außerdem können Sie Packer als Teil einer Spinnaker-Pipeline einsetzen, um Images zu erzeugen, die in Instanz-Clustern bereitgestellt werden.

Vorhandene Images importieren

Sie können Images migrieren, indem Sie sie aus ihrer vorhandenen Infrastruktur in Compute Engine exportieren. Für Linux-Rechner finden Sie hier einen ausführlichen Leitfaden zur Migration von RAW-Laufwerk-Images, Amazon Machine Images (AMI) und VirtualBox-Images.

Eine weitere Möglichkeit zum Importieren vorhandener Images ist die Verwendung von Google Cloud Migrate for Compute Engine.

Migrate for Compute Engine ist eine Toolkette und ein Dienst, der die Migration von Maschinen von einer Plattform zu einer anderen mit minimalen Ausfallzeiten durch kontinuierliche Replikation auf Blockebene erleichtert. Sie können Ihre Maschinen zu Compute Engine migrieren und dann Images manuell erstellen.

Images verschlüsseln

Alle Laufwerke in Compute Engine werden standardmäßig mit den Verschlüsselungsschlüsseln von Google verschlüsselt. Auch aus Festplatten erstellte Images werden verschlüsselt. Alternativ können Sie bei der Erstellung Ihrer Laufwerke eigene Verschlüsselungsschlüssel bereitstellen. Nachdem Sie das Laufwerk erstellt haben, können Sie ein verschlüsseltes Image erstellen, indem Sie dem Befehl zur Imageerstellung Ihre Verschlüsselungsschlüssel bereitstellen. Weitere Informationen zur Verschlüsselung inaktiver Daten und zu vom Kunden bereitgestellten Verschlüsselungsschlüsseln finden Sie in der Google Cloud-Dokumentation unter Verschlüsselung inaktiver Daten.

Image-Lebenszyklus

Wenn Sie eine Image-Build-Pipeline eingerichtet haben, können Sie Images verwenden, um Instanzen einer Anwendung zuverlässig zu starten. Während die Pipeline die Erstellung von Images erledigen kann, müssen Sie außerdem dafür sorgen, dass Ihre Bereitstellungsmechanismen die neuesten Versionen der Images verwenden. Außerdem benötigen Sie einen Prozess, der Images auswählt, sodass nicht versehentlich alte und veraltete Images verwendet werden.

Image-Familien

Mithilfe von Image-Familien können Sie Images in Ihrem Projekt so verwalten, dass ähnliche Images zusammengefasst werden und Rollforwards und Rollbacks zwischen bestimmten Image-Versionen möglich sind. Weitere Informationen finden Sie unter Best Practices für Image-Familien.

Image verwerfen

Als Administrator können Sie auch ein Rollback des Images durchführen, auf das die Image-Familie verweist. Dazu verwerfen Sie das Image mit folgendem Befehl:

gcloud compute images deprecate my-application-v3-20161011 --state DEPRECATED

Beim Verwerfen von Versionen können Sie aus verschiedenen Status wählen:

Status Beschreibung
VERWORFEN Images, die zwar nicht mehr aktuell sind, aber noch von Nutzern gestartet werden können. Nutzer sehen beim Start eine Warnung, die besagt, dass sie nicht mehr das neueste Image verwenden.
VERALTET Images, die von Nutzern oder Automatisierungstools nicht mehr gestartet werden sollten. Ein Versuch, eine Instanz aus diesen Images zu erstellen, schlägt fehl. Sie können diesen Image-Status verwenden, um Images zu archivieren, damit ihre Daten beim Bereitstellen als Nicht-Boot-Festplatte weiterhin verfügbar sind.
GELÖSCHT Images, die bereits gelöscht wurden oder zum baldigen Löschen markiert sind. Diese können nicht gestartet werden und Sie sollten sie so schnell wie möglich löschen.

Lebenszyklusrichtlinien durchsetzen

Mit dem Befehl gcloud compute images deprecate können Sie Images zum Löschen oder zur Veralterung markieren. Sie können Metadaten an Images anhängen, um sie zum späteren Löschen zu markieren, indem Sie eines der Flags --delete-in oder --delete-on angeben. Geben Sie das Flag --obsolete-in oder --obsolete-on an, um Metadaten anzuhängen und Images zur künftigen Veralterung vorzumerken. Sie können diesen Befehl in einen Image-Build-Prozess einbinden, um eine Image-Lebenszyklusrichtlinie durchzusetzen, die eine Verbreitung von älteren und abgelaufenen Images in Ihrem Projekt beschränkt. Beispielsweise können Sie am Ende Ihrer Image-Build-Pipeline eine zusätzliche Prüfung von Images durchführen, die verworfen oder gelöscht werden müssen, und diese Aktionen dann explizit ausführen.

Veraltete und gelöschte Images werden zwar nicht mehr standardmäßig über die API und die Benutzeroberfläche angezeigt, Sie können sie jedoch weiterhin sehen, indem Sie das Flag --show-deprecated angeben. Wenn Sie das Image und seine Daten vollständig löschen möchten, müssen Sie einen ausdrücklichen Löschbefehl für dieses Image senden.

Images projektübergreifend freigeben

Organisationen erstellen häufig mehrere Google Cloud-Projekte, um ihre Ressourcen, Umgebungen und den Nutzerzugriff zu partitionieren. Durch die Isolierung von Ressourcen in Projekte werden eine detaillierte Abrechnung, Sicherheitsdurchsetzung und eine Unterteilung der Netzwerke möglich. Die meisten Cloudressourcen müssen zwar nicht für mehrere Projekte bereitstehen, doch sind Images gute Kandidaten für eine projektübergreifende Freigabe. Durch die Verwendung eines freigegebenen Satzes von Images können Sie einen gemeinsamen Prozess einsetzen, mit dem Sie vorkonfigurierte Images mit Best Practices für Sicherheit, Autorisierung, Paketverwaltung und operativen Vorgängen für den Rest der Organisation bereitstellen.

Images freigeben

Sie geben Images frei, indem Sie den Projekten der Organisation IAM-Rollen zuweisen. Auf das Projekt, das die an andere Projekte freizugebenden Images enthält (im obigen Schaubild als "Image Creation Project" bezeichnet), müssen die folgenden IAM-Rollen und Richtlinien angewendet werden:

  1. Erlauben Sie Nutzern aus "Image User Group", Instanzen aus diesen Images zu erstellen, indem Sie ihnen die Rolle compute.imageUser zuweisen.
  2. Erlauben Sie Nutzern aus "Image Creation User", Instanzen in diesem Projekt zu erzeugen, indem Sie ihnen die Rolle compute.instanceAdmin zuweisen.
  3. Erlauben Sie Nutzern aus "Image Creation User", in diesem Projekt Images und Laufwerke zu erstellen, indem Sie ihnen die Rolle compute.storageAdmin zuweisen.

Projekte, die die freigegebenen Images verwenden sollen, müssen Nutzern mit der Rolle compute.imageUser erlauben, Instanzen zu erstellen, indem ihnen die Rolle compute.instanceAdmin zugewiesen wird.

Ausführliche Anweisungen zur projektübergreifenden Freigabe von Images finden Sie in der Compute Engine-Dokumentation unter "Images projektübergreifend freigeben".

Nächste Schritte