Migration zu Google Cloud: Arbeitslasten bereitstellen

Dieses Dokument bietet eine Unterstützung bei der Planung und beim Design der Bereitstellungsphase für die Migration zu Google Cloud. Nachdem Sie Ihre aktuelle Umgebung geprüft, die Migration zu Google Cloud geplant und Ihre Google Cloud-Basis erstellt haben, können Sie Ihre Arbeitslasten bereitstellen.

Dieser Artikel ist Teil einer Reihe:

Die folgende Grafik veranschaulicht den Migrationsprozess:

Migrationspfad mit vier Phasen

Die Bereitstellungsphase ist die dritte Phase der Migration zu Google Cloud, in der Sie einen Bereitstellungsvorgang für die Arbeitslasten definieren.

Dieses Dokument bietet nützliche Informationen, wenn Sie von einer lokalen Umgebung, einer privaten Hosting-Umgebung oder einem anderen Cloud-Anbieter eine Migration zu Google Cloud vornehmen oder die Möglichkeit einer Migration prüfen und untersuchen möchten, wie diese aussehen könnte.

In diesem Dokument lernen Sie die verschiedenen Arten von Bereitstellungsprozessen in der Reihenfolge ihrer Flexibilität, Automatisierung und Komplexität kennen und erfahren, anhand welcher Kriterien Sie einen für Ihren Anwendungsfall geeigneten Ansatz auswählen:

  1. Manuell bereitstellen
  2. Mit Tools zur Konfigurationsverwaltung (Configuration Management, CM) bereitstellen
  3. Mit Tools zur Containerorchestrierung bereitstellen
  4. Automatisch bereitstellen
  5. Zum Bereitstellen das Designmuster "Infrastruktur als Code" anwenden

Planen und entwerfen Sie die Bereitstellungsphase, bevor Sie die Arbeitslasten bereitstellen. Zuerst sollten Sie die verschiedenen Arten von Bereitstellungsprozessen kennenlernen, die Sie für die Arbeitslasten implementieren. Wenn Sie sich die Arten von Bereitstellungsprozessen angesehen haben, können Sie sich überlegen, ob Sie mit einem einfachen Prozess beginnen möchten und später zu einem komplexeren Prozess wechseln möchten. Dieser Ansatz kann schnellere Ergebnisse liefern. Er kann aber auch zu Beeinträchtigungen führen, wenn Sie zu einem erweiterten Prozess übergehen, da Sie sich des technisches Rückstaus annehmen müssen, der aus der Verwendung des einfacheren Prozesses resultiert. Wenn Sie beispielsweise von vollständig manuellen Bereitstellungen zu einer automatisierten Lösung wechseln, müssen Sie möglicherweise für Ihre Bereitstellungspipeline und Anwendungen Upgrades verwalten.

Es ist zwar möglich, entsprechend den Anforderungen der Arbeitslasten verschiedene Arten von Bereitstellungsprozessen zu implementieren, dieser Ansatz kann die Bereitstellungsphase jedoch ebenfalls komplexer machen. Wenn Sie verschiedene Arten von Bereitstellungsprozessen implementieren, können Sie von der zusätzlichen Flexibilität profitieren. Möglicherweise benötigen Sie jedoch auf die einzelnen Prozesse zugeschnittenes Fachwissen bzw. zugeschnittene Tools und Ressourcen, was mehr Aufwand für Sie bedeutet.

Manuell bereitstellen

Eine vollständig manuelle Bereitstellung stützt sich auf einen Bereitstellungs- und Konfigurationsprozess, der in keiner Weise automatisiert ist. Es existieren zwar möglicherweise Spezifikationen und Checklisten für jeden Schritt des Prozesses, aber diese Spezifikationen werden weder automatisch überprüft noch erzwungen. Da ein manueller Prozess von einer Person ausgeführt wird, ist er fehleranfällig, nicht wiederholbar und auch hinsichtlich der Leistung beschränkt.

Vollständig manuelle Bereitstellungsprozesse können beispielsweise dann sinnvoll sein, wenn Sie einen Test schnell in einer Sandbox-Umgebung instrumentieren müssen. Wenn Sie dagegen für einen minutenlangen Test einen strukturierten, automatisierten Prozess einrichten, kann das insbesondere in den frühen Phasen der Migration sehr zeitaufwendig sein, da Sie möglicherweise nicht die erforderlichen Kenntnisse der Tools und Praktiken haben, mit denen Sie einen automatisierten Prozess erstellen können.

Diese Einschränkung gilt nicht für Google Cloud. Bei Bare-Metal-Umgebungen, in denen die erforderlichen Management APIs fehlen, sind vollständig manuelle Bereitstellungen aber die einzige Möglichkeit. In diesem Fall können Sie keinen automatisierten Prozess implementieren, da die erforderlichen Schnittstellen fehlen. Wenn Sie eine virtualisierte Legacy-Infrastruktur haben, die keine Automatisierung unterstützt, müssen Sie möglicherweise ebenfalls einen vollständig manuellen Prozess implementieren.

Wir empfehlen, dass Sie eine vollständig manuelle Bereitstellung nur dann verwenden, wenn Sie keine andere Wahl haben.

Sie können einen vollständig manuellen Bereitstellungs- und Konfigurationsprozess mithilfe von Tools wie der Google Cloud Console, mit Cloud Shell, den Cloud APIs und dem Cloud SDK implementieren.

Mit Tools zur Konfigurationsverwaltung (Configuration Management, CM) bereitstellen

Mit CM-Tools können Sie eine Umgebung wiederholbar und kontrolliert konfigurieren. Diese Tools enthalten eine Reihe von Plug-ins und Modulen, die gängige Konfigurationsvorgänge für Sie implementieren. Mit diesen Tools können Sie sich auf den Endzustand konzentrieren, den Sie für die Umgebung erreichen möchten, anstatt die dafür erforderliche Logik zu implementieren. Für den Fall, dass die enthaltenen Vorgänge nicht ausreichen, haben CM-Tools häufig ein Erweiterungssystem, mit dem Sie eigene Module entwickeln können. Wenn möglich, sollten Sie jedoch versuchen, die vordefinierten Module und Plug-ins zu verwenden, um sich zusätzlichen Entwicklungs- und Wartungsaufwand zu ersparen.

CM-Tools bieten sich an, wenn Umgebungen konfiguriert werden müssen. Sie können sie aber auch zum Bereitstellen von Infrastruktur und zum Implementieren eines Bereitstellungsprozesses für die Arbeitslasten verwenden. Ein Prozess mit CM-Tools ist besser als ein vollständig manueller Konfigurations- und Bereitstellungsprozess, da er wiederholbar, kontrolliert und überprüfbar ist. Es gibt jedoch einige Nachteile, da CM-Tools nicht für Bereitstellungsaufgaben vorgesehen sind. In der Regel bieten sie keine integrierten Features, um eine komplexe Bereitstellungslogik zu implementieren, z. B. zum Erkennen und Verwalten von Unterschieden zwischen dem tatsächlichen und dem gewünschten Zustand der Infrastruktur oder für umfangreiche Bereitstellungsprozesse, z. B. Bereitstellungen ohne Ausfallzeiten oder Blau/Grün-Bereitstellungen. Sie können die fehlenden Features mithilfe der zuvor genannten Erweiterungspunkte implementieren. Diese Erweiterungen können zusätzlichen Aufwand verursachen und die Gesamtkomplexität des Bereitstellungsprozesses erhöhen, da Sie zum Entwerfen, Entwickeln und Warten einer benutzerdefinierten Bereitstellungslösung das erforderliche Fachwissen benötigen.

Sie können diese Art von Bereitstellungs- und Konfigurationsprozess mithilfe von Tools wie Ansible, Chef, Puppet und SaltStack implementieren.

Mit Tools zur Containerorchestrierung bereitstellen

Wenn Sie bereits in die Containerisierung Ihrer Arbeitslasten investiert haben oder dies planen, können Sie die Arbeitslasten mit einem Tool zur Containerorchestrierung bereitstellen.

Ein Tool zur Containerorchestrierung verwaltet die Infrastruktur Ihrer Umgebung und unterstützt viele Bereitstellungsvorgänge und Bausteine zum Implementieren der Bereitstellungslogik, die Sie verwenden können, wenn die integrierten Vorgänge und Bausteine nicht ausreichen. Mit diesen Tools können Sie sich darauf konzentrieren, mithilfe der bereitgestellten Mechanismen die eigentliche Bereitstellungslogik zu erstellen, anstatt sie implementieren zu müssen.

Tools zur Containerorchestrierung stellen auch Abstraktionen bereit, mit denen Sie Ihre Bereitstellungsprozesse so verallgemeinern können, dass sie für verschiedene zugrunde liegende Umgebungen verwendet werden können und Sie nicht für jede Umgebung mehrere Prozesse entwerfen und implementieren müssen. Zum Beispiel enthalten diese Tools normalerweise die Logik zum Skalieren und Upgraden von Bereitstellungen, sodass Sie diese nicht selbst implementieren müssen. Sie können diese Tools sogar verwenden, um die Bereitstellungsprozesse in Ihrer aktuellen Umgebung zu implementieren, und Sie können diese Prozesse dann in die Zielumgebung übertragen, da die Implementierung von Grund auf weitgehend gleich ist. Wenn Sie diese Tools frühzeitig einsetzen, gewinnen Sie Erfahrung im Verwalten von containerisierten Umgebungen. Das erleichtert Ihnen die Migration zur Google Cloud.

Sie setzen ein Tool zur Containerorchestrierung dann ein, wenn Ihre Arbeitslasten bereits containerisiert sind oder Sie diese in Zukunft containerisieren können und planen, in solche Initiativen zu investieren. Im letzteren Fall sollten Sie eine gründliche Analyse der einzelnen Arbeitslasten durchführen, um über Folgendes Klarheit zu gewinnen:

  • Prüfen Sie, ob eine Containerisierung der Arbeitslast möglich ist.
  • Schätzen Sie den potenziellen Nutzen ab, den Sie aus der Containerisierung der Arbeitslast ziehen können.

Wenn die möglichen Schwierigkeiten gegenüber den Vorteilen der Containerisierung überwiegen, sollten Sie nur dann ein Tool zur Containerorchestrierung verwenden, wenn sich Ihre Teams bereits auf dessen Einsatz festgelegt haben und Sie keine heterogenen Umgebungen verwalten möchten.

Beispielsweise werden Data Warehouse-Lösungen normalerweise nicht mithilfe von Tools zur Containerorchestrierung bereitgestellt, da sie nicht auf die Ausführung in flüchtigen Containern ausgelegt sind.

Sie können diesen Bereitstellungsprozess mit Tools wie Kubernetes und verwalteten Diensten wie Google Kubernetes Engine (GKE) in Google Cloud implementieren. Wenn Sie in einer serverlosen Umgebung arbeiten möchten, können Sie Tools wie die flexible App Engine-Umgebung, Cloud Functions und Cloud Run verwenden.

Automatisch bereitstellen

Unabhängig davon, welche Tools Sie in Ihrer Umgebung für die Bereitstellung, Konfiguration und Orchestrierung verwenden, können Sie vollständig automatisierte Bereitstellungsprozesse implementieren, um menschliche Fehler zu minimieren und die Prozesse in Ihrer Organisation zusammenzuführen, zu rationalisieren und zu standardisieren. Sie können bei Bedarf auch manuelle Genehmigungsschritte in den Bereitstellungsprozess einfügen. Jeder Prozessschritt ist jedoch automatisiert.

Die Schritte einer typischen End-to-End-Bereitstellungspipeline sind folgende:

  1. Codeüberprüfung
  2. Kontinuierliche Integration (Continuous Integration, CI)
  3. Artefakterstellung
  4. Kontinuierliche Bereitstellung (Continuous Deployment, CD) mit manuellen Genehmigungen am Ende

Sie können jeden dieser Schritte unabhängig von den anderen automatisieren. Somit können Sie Ihre aktuellen Bereitstellungsprozesse schrittweise auf eine automatisierte Lösung umstellen oder direkt in der Zielumgebung einen neuen Prozess implementieren. Damit dieser Prozess effektiv ist, sind in jedem Schritt der Pipeline Test- und Validierungsverfahren erforderlich, nicht nur während des Codeüberprüfungs- oder des CI-Schritts.

Für jede Änderung an Ihrer Codebasis sollten Sie eine gründliche Überprüfung vornehmen, um die Qualität der Änderung zu beurteilen. Die meisten Tools zur Quellcodeverwaltung bieten für Codeüberprüfungen erstklassigen Support. Sie unterstützen häufig auch das automatische Erstellen und Initialisieren von Überprüfungen, indem der Quellcodebereich gesichtet wird, der geändert wurde. Dies setzt allerdings voraus, dass Sie für jeden Bereich der Codebasis die zuständigen Teams konfiguriert haben. Bei jeder Überprüfung können Sie auch automatisierte Prüfungen am Quellcode ausführen lassen, z. B. mit Lint-Tools und statischen Analysen, um für die gesamte Codebasis Konsistenz- und Qualitätsstandards zu erzwingen.

Nachdem Sie eine Änderung an der Codebasis überprüft und diese eingebunden haben, kann das CI-Tool automatisch Tests ausführen, die Ergebnisse auswerten und Sie über sämtliche Probleme mit dem aktuellen Build informieren. Sie können diesen Schritt aufwerten, indem Sie sich an einen testbasierten Entwicklungsprozess halten, um eine vollständige Testabdeckung der Features der einzelnen Arbeitslasten zu erreichen.

Sie können für jeden erfolgreichen Build das Erstellen von Bereitstellungsartefakten automatisieren. Solche Artefakte stellen eine zum Bereitstellen geeignete Version der Arbeitslasten mit den neuesten Änderungen dar. Sie können den Schritt zum Erstellen von Artefakten auch um eine automatisierte Validierung der Artefakte an sich erweitern. Beispielsweise könnten Sie für bekannte Probleme einen Scan auf Sicherheitslücken durchführen und das Artefakt nur für die Bereitstellung freigeben, wenn keine Sicherheitslücken gefunden werden.

Schließlich können Sie dann das Bereitstellen jedes freigegebenen Artefakts in der Zielumgebung automatisieren. Wenn Sie mehrere Laufzeitumgebungen haben, können Sie auch für jede eine einzigartige Bereitstellungslogik implementieren und bei Bedarf sogar manuelle Genehmigungsschritte einfügen. Sie können beispielsweise automatisch neue Versionen der Arbeitslasten in der Entwicklungs-, Qualitätssicherungs- und Vorproduktionsumgebung bereitstellen lassen und dennoch eine manuelle Überprüfung und Genehmigung durch das Produktionsteam erforderlich machen, damit sie in der Produktionsumgebung bereitgestellt werden können.

Ein vollständig automatisierter End-to-End-Prozess ist dann eine der besten Optionen, wenn Sie einen automatisierten, strukturierten, rationalisierten und überprüfbaren Prozess benötigen. Die Implementierung dieses Prozesses ist jedoch keine leichte Aufgabe. Bevor Sie sich für einen solchen Prozess entscheiden, sollten Sie einen guten Überblick über die erwarteten Vorteile, die mit der Implementierung verbundenen Kosten und darüber haben, ob das Wissen und das Fachwissen Ihres Teams ausreichen, um einen vollständig automatisierten Bereitstellungsprozess zu implementieren.

Sie können einen vollständig automatisierten Prozess mit Tools wie SonarQube, Jenkins, Cloud Build, Container Registry und Spinnaker implementieren.

Zum Bereitstellen Infrastruktur als Codemuster anwenden

Infrastruktur als Code ist ein Prozess, bei dem Sie mit dem Bereitstellen der Ressourcen in einer Laufzeitumgebung genauso umgehen, wie mit dem Quellcode der Arbeitslasten. Beispielsweise können Sie den gesamten Lebenszyklus von Google Cloud-Ressourcen vollständig mit Cloud APIs verwalten und den endgültigen Status im Quellcode codieren. Anschließend implementieren Sie einen vollständig automatisierten Bereitstellungsprozess für Ihre Infrastruktur, ähnlich wie der Prozess, den Sie für Ihre Arbeitslasten implementieren, einschließlich einer umfassenden Testsuite.

Der Zweck eines Bereitstellungstools ist es, für die Infrastruktur Bootstrapping einzusetzen und diese auf das Konfigurieren vorzubereiten. Es eignet sich nicht zum Ausführen von Konfigurationsaufgaben. Aus diesem Grund sollten Sie nach dem Bereitstellen aller Ressourcen in der Infrastruktur ein CM-Tool verwenden, um diese Ressourcen gemäß Ihren Anforderungen zu konfigurieren. Sie können zwar mit Bereitstellungstools auch Konfigurationsaufgaben und mit CM-Tools auch Bereitstellungsaufgaben implementieren, jedoch sind beide auf je einen Zweck ausgelegt und ergänzen sich daher gegenseitig. Sie sollten für jeden Zweck das richtige Tool verwenden. Verwenden Sie also Bereitstellungstools, um die Infrastruktur bereitzustellen, und CM-Tools, um sie zu konfigurieren.

Wenn Sie die Ressourcen in der Zielumgebung wie in Google Cloud vollständig mit APIs verwalten können, sollten Sie Ihre Infrastruktur als Code implementieren. Damit profitieren Sie sofort von vollständiger Überprüfbarkeit und einer Versionsverwaltung für die gesamte Cloud-Infrastruktur. Sie können sogar einen Prozess zur Continuous Integration und kontinuierlichen Bereitstellung (CI/CD) implementieren, damit Änderungen an der Infrastruktur automatisch angewendet werden.

Wenn die Zielumgebung dagegen keinen programmatischen Zugriff zum Verwalten und Konfigurieren von Ressourcen bietet, ist das Implementieren einer Infrastruktur als Codebereitstellung nicht möglich. Sie sollten auch Ihre Einkaufsabteilung konsultieren, da das Bereitstellen von Ressourcen in einer Cloud-Umgebung und dessen Aufhebung zu Unterschieden zwischen der Abrechnung und der Kostenerfassung führen kann.

Sie können Infrastruktur als Code mit Tools wie Terraform und verwalteten Diensten wie Deployment Manager implementieren. Außerdem können Sie Tools wie RSpec, Serverspec und InSpec verwenden, um für eine Infrastruktur Testsuites zu implementieren.

Fazit

Da Sie jetzt die verschiedenen Optionen kennengelernt sowie erfahren haben, wann Sie welche Option verwenden bzw. vermeiden sollten und diesbezüglich einige Beispieltools kennenlernen konnten, können Sie nun mit der folgenden Tabelle leicht einzelne Optionen im Hinblick auf Ihre Arbeitslasten und Anwendungsfälle vergleichen.

Art des Bereitstellungsprozesses Verwendung Nicht empfohlene Verwendung Tools und Dienste
Vollständig manuelle Bereitstellung Wenn Sie einen Test schnell in einer Sandbox-Umgebung instrumentieren müssen oder mit Bare-Metal-Umgebungen oder einer virtualisierten Legacy-Infrastruktur arbeiten, denen die erforderlichen Verwaltungs-APIs fehlen Immer wenn eine überschaubarere Alternative existiert
Bereitstellung mit CM-Tools Wenn Sie nach einer Methode zum Automatisieren manueller Bereitstellungen suchen und bereits umfangreich in CM-Tools zum Konfigurieren Ihrer Umgebungen investiert haben Wenn der Aufwand, die Einschränkungen der CM-Tools in Bezug auf die Bereitstellung zu überwinden, zu groß ist Ansible, Chef, Puppet, SaltStack
Containerorchestrierung Wenn Ihre Arbeitslasten bereits containerisiert sind oder diese in Zukunft containerisiert werden können und Sie planen, in diese Anstrengungen zu investieren Wenn die möglichen Schwierigkeiten gegenüber den Vorteilen der Containerisierung überwiegen Kubernetes, GKE, flexible App Engine-Umgebung, Cloud Functions, Cloud Run
Bereitstellungsautomatisierung Wenn Sie einen automatisierten, strukturierten, rationalisierten und überprüfbaren Prozess benötigen Wenn Ihre Teams nicht die erforderlichen Fähigkeiten haben und keine Möglichkeit der Schulung besteht oder wenn Sie es sich nicht leisten können, einen vollständig automatisierten Prozess zu implementieren SonarQube, Jenkins, Cloud Build, Container Registry, Spinnaker
Infrastruktur als Code Wenn die Ressourcen in der Zielumgebung vollständig mit APIs sowie programmatisch verwaltet werden können Wenn die Zielumgebung keinen programmatischen Zugriff zum Verwalten und Konfigurieren von Ressourcen bietet Terraform, Cloud Deployment Manager

Es existiert kein optimaler Bereitstellungsprozess, da dieser vollständig von Ihrer aktuellen Situation, Ihrem Kenntnisstand und Ihren Erwartungen an den Prozess abhängt.

Hilfe

Google Cloud bietet verschiedene Optionen und Ressourcen, mit denen Sie Google Cloud-Dienste optimal nutzen können.

  • Ressourcen zur Selbsthilfe: Wenn Sie keinen persönlichen Support benötigen, stehen Ihnen verschiedene Optionen zur Verfügung, die Sie in Ihrem eigenen Tempo verwenden können.
  • Technologiepartner. Google Cloud arbeitet mit mehreren Unternehmen zusammen, um Ihnen bei der Nutzung unserer Produkte und Dienste Unterstützung bieten zu können.
  • Google Cloud-Dienstleistungen. Mit unseren Dienstleistungen können Sie Ihre Investitionen in Google Cloud optimal nutzen.

Weitere Informationen zur Migration von Arbeitslasten zu Google Cloud erhalten Sie im Google Cloud-Migrationscenter.

Weitere Informationen zu diesen Ressourcen finden Sie im Abschnitt "Hilfe" von Migration zu Google Cloud: Einstieg.

Weitere Informationen