Best Practices für die Image-Verwaltung

Diese Lösung bietet einen ausführlichen Leitfaden zur Verwaltung von Google 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 zugleich 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 eine unveränderliche Festplatte 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 Laufwerkgeräts dient. Auf ein beliebiges formatiertes Laufwerk wird eine Partitionstabelle 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 Byte 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. Sie können dann die resultierende *.tar.gz-Datei in Google Cloud Storage hochladen und als Image in Compute Engine registrieren, wie im vorigen Diagramm dargestellt. Ein registriertes Image kann dazu verwendet werden, genaue Replikate der Originalfestplatte in einer beliebigen Region der Google Cloud Platform zu erstellen. Neu registrierte Images werden häufig als Start-Volumes für Compute Engine-Instanzen eingesetzt.

Eine grundlegendere Einführung in diese Compute Engine-Begriffe finden Sie in der Dokumentation 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 der Google Cloud Platform bereitgestellte Images verwenden, die regelmäßig aktualisiert werden. Die Cloud Platform 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 der Cloud Platform zum Starten einer Compute Engine-Instanz verwenden und anschließend 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, wenn Sie Ihre Images vollständig neu manuell konfigurieren können, anstatt die automatisierte Verankerung zu verwenden oder vorhandene Images zu importieren.

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 der Boot-Festplatte dieser Instanz. Dabei müssen Sie die Instanz löschen, aber die Boot-Festplatte beibehalten.

Automatisiertes Verankern

Das manuelle Verankern erleichtert den Einstieg, wenn Sie es mit wenig 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 Image-Erstellung zu einem leichter reproduzierbaren, prüfbaren, konfigurierbaren und zuverlässigeren Vorgang macht. Weitere Informationen zum Erzeugen einer Pipeline für die automatisierte Image-Erstellung finden Sie in der Lösung 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 Alternative zum Importieren von vorhandenen Images ist die Nutzung eines gebührenpflichtigen Migrationsdienstes wie CloudEndure. CloudEndure ist ein Toolchain- und Onlinedienst, der die Migration von Rechnern von einer Plattform zu einer anderen unter Verwendung von kontinuierlicher Replikation auf Block-Ebene erleichtert und für minimale Ausfallzeiten sorgt. Mit CloudEndure können Sie Ihre Rechner nach Compute Engine migrieren und dann durch manuelles Verankern Images erstellen.

Images verschlüsseln

Alle Festplatten 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 Festplatten eigene Verschlüsselungsschlüssel bereitstellen. Nachdem Sie die Festplatte erstellt haben, können Sie ein verschlüsseltes Image erstellen, indem Sie dem Image-Erstellungsbefehl Ihre Verschlüsselungsschlüssel bereitstellen. Weitere Informationen zur Verschlüsselung inaktiver Daten und zu vom Kunden bereitgestellten Verschlüsselungsschlüsseln finden Sie in der Cloud Platform-Dokumentation unter Verschlüsselung inaktiver Daten.

Image-Lebenszyklus

Nachdem Sie eine Pipeline zur Image-Erstellung eingerichtet haben, können Sie Images verwenden, um zuverlässig Instanzen einer Anwendung 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 verwenden

Compute Engine stellt Ihnen Image-Familien zur Verfügung, deren Zweck es ist, dafür zu sorgen, dass Ihre Automatisierungssysteme und Nutzer die neuesten Images ausführen. Als Administrator können Sie Images, die zu derselben Anwendung oder zu demselben Anwendungsfall gehören, in einer Image-Familie zusammenfassen. So müssen die Nutzer der Images nur auf den Namen der Image-Familie anstatt auf einen genauen Image-Namen achten. Da Image-Namen eindeutig sein müssen, ergeben sich aus Image-Erstellungspipelines häufig Image-Namen mit eingebetteten Informationen wie dem Anwendungsnamen, dem Datum und der Version, zum Beispiel: my-application-v3-20161011. Anstatt die Automatisierungstools ändern zu müssen, sodass sie die Verbraucher zum neuesten Image leiten, indem sie den spezifischen Namen an andere Systeme weitergeben, können Sie einfach den Namen der Image-Familie angeben, der immer das neueste Image in der Familie zurückgibt. Zum Beispiel: my-application.

Image-Familien

Wenn Sie einer Image-Familie ein Image hinzufügen oder eine Image-Familie erstellen möchten, falls noch keine existiert, müssen Sie ein zusätzliches Flag --image-family im Image-Erstellungsschritt setzen. Zum Beispiel:

gcloud compute images create my-application-v3-20161011 --source-disk my-application-disk-1 --source-disk-zone us-central1-f --family my-application

Nachdem Sie diesen Befehl ausgeführt haben, verweisen alle Aufrufe zum Ausführen einer Instanz auf Grundlage des Images my-application auf das neu erstellte Image my-application-v3-20161011.

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. Durch Anhängen von Metadaten an Images können Sie diese zum künftigen Löschen markieren. Dazu setzen Sie entweder das Flag --delete-in oder --delete-on. Wenn Sie Metadaten anhängen möchten, um Images zur künftigen Veralterung zu markieren, setzen Sie eines der Flags --obsolete-in oder --obsolete-on. 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. So könnten Sie zum Beispiel am Ende der Image-Erstellungspipeline eine zusätzliche Prüfung auf Images einbauen, die verworfen oder gelöscht werden müssen, und diese Aktionen dann ausdrücklich ausführen.

Standardmäßig werden verworfene und gelöschte Images von der API und der Benutzeroberfläche nicht mehr angezeigt, aber Sie können sie weiterhin sehen, wenn Sie das Flag --show-deprecated setzen. 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

Von Organisationen werden häufig mehrere Cloud Platform-Projekte erstellt, 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 stellen Images gute Kandidaten für eine projektübergreifende Freigabe dar. Durch die Verwendung eines freigegebenen Satzes von Images können Sie einen gemeinsamen Prozess einsetzen, um vorkonfigurierte Images mit Best Practices für Sicherheit, Autorisierung, Paketverwaltung und Operationen für den Rest der Organisation bereitzustellen.

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

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

Feedback geben zu...