Container in Compute Engine


Softwarecontainer bieten eine bequeme Möglichkeit, Ihre Anwendungen in mehreren isolierten User-Space-Instanzen auszuführen. Sie können Container auf öffentlichen Linux- oder Windows Server-VM-Images oder auf einem Container-Optimized OS-Image ausführen. Mit Containern werden Ihre Anwendungen mit weniger Abhängigkeiten auf der Host-VM ausgeführt und sind unabhängig von anderen Containeranwendungen, die Sie auf der gleichen VM-Instanz bereitstellen. Diese Eigenschaften machen Containeranwendungen in jedem erforderlichen Maßstab portabler, einfacher zu implementieren und wartungsfreundlicher.

Dieses Dokument beschreibt einige gebräuchliche Containertechnologien, die Sie anwenden können, um Container auf Compute Engine-Instanzen auszuführen. Sie können diese Technologien auf den meisten öffentlichen VM-Images verwenden, die Compute Engine bietet.

Führen Sie Container auf Compute Engine aus, wenn Sie die vollständige Kontrolle über Ihre Containerumgebung und Ihre Tools zur Containerorchestrierung benötigen.

Alternativ können Sie Google Kubernetes Engine (GKE) verwenden, um Aufgaben der Clusterverwaltung und Containerorchestrierung zu vereinfachen, sodass Sie die zugrunde liegenden VM-Instanzen nicht verwalten müssen. GKE bietet eine verwaltete Umgebung für das Deployment, die Verwaltung und die Skalierung von containerisierten Anwendungen in der Google-Infrastruktur.

Die GKE-Umgebung besteht aus mehreren Maschinen (Compute Engine-Instanzen), die zusammen einen Cluster bilden. Wenn Sie einen GKE-Cluster ausführen, profitieren Sie von den fortschrittlichen Cluster-Management-Funktionen wie Load-Balancing, Knotenpools, automatische Knotenreparatur, automatische Skalierung und Upgrades sowie Logging und Monitoring, die Google Cloud bietet.

GKE-Cluster mit Knotenpools erstellen, auf denen Microsoft Windows Server ausgeführt wird.

Überzeugen Sie sich selbst

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit von Compute Engine in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.

Compute Engine kostenlos testen

Containertechnologien, die auf Compute Engine laufen

Im Allgemeinen können Compute Engine-Instanzen fast jede Containertechnologie oder fast jedes Containertool ausführen. Unter modernen Linux-Betriebssystemen können Sie verschiedene Containertypen ausführen. Sie können auch Docker unter Windows Server 2016 oder höher ausführen. Die folgende Liste enthält gängige Tools, die Sie zum Ausführen und Verwalten von Containeranwendungen verwenden können:

  • Docker und Podman sind zwei beliebte Containertechnologien, mit denen sich Containeranwendungen ausführen lassen.
  • Kubernetes ist eine Containerorchestrierungsplattform, mit der Sie Ihre ausgeführten Container auf mehreren Instanzen oder in einer Hybrid-Cloudumgebung verwalten und skalieren können.
  • Container in Compute Engine bieten eine einfache Möglichkeit, Container auf VM-Instanzen von Compute Engine oder in verwalteten Instanzgruppen bereitzustellen.
  • Sie können Ihre bestehenden Systeme in LXD-Images konvertieren und sie auf VM-Instanzen von Compute Engine als Lift-and-Shift-Migrationslösung ausführen. LXD läuft auf Ubuntu-Images.

Darüber hinaus können Sie Artifact Registry zum Verwalten der Image-Versionen der Container verwenden. Artifact Registry ermöglicht das zentrale Speichern und Verwalten von Container-Images, bevor Sie diese für Kubernetes in Compute Engine oder für Google Kubernetes Engine-Cluster bereitstellen.

Container-optimierte VM-Images

Compute Engine bietet mehrere öffentliche VM-Images, die Sie zum Erstellen von Instanzen und zum Ausführen Ihrer Container-Workloads verwenden können. Einige dieser öffentlichen VM-Images haben ein minimalistisches, containeroptimiertes Betriebssystem, auf dem neuere Versionen von Docker, Podman oder Kubernetes vorinstalliert sind. Die folgenden öffentlichen Image-Familien wurden speziell zum Ausführen von Containern entwickelt:

  • Container-Optimized OS von Google
    • Enthält: Docker, Kubernetes
    • Imageprojekt: cos-cloud
    • Imagefamilie: cos-stable
  • Fedora CoreOS
    • Enthält: Podman, Docker
    • Image-Projekt: fedora-coreos-cloud
    • Imagefamilie: fedora-coreos-stable
  • Ubuntu
    • Enthält: LXD
    • Imageprojekt: ubuntu-os-cloud
    • Imagefamilie: ubuntu-2004-lts

Wenn Sie bestimmte Containertools und -technologien auf Images laufen lassen müssen, die sie nicht standardmäßig enthalten, installieren Sie diese Technologien manuell.

Containertechnologien auf meinen Instanzen installieren

Wenn Sie einen einzelnen Container in einer Instanz starten möchten, geben Sie beim Erstellen einer Instanz ein Container-Image an. Compute Engine stellt automatisch ein aktuelles Image eines Container-Optimized OS mit installiertem Docker bereit und startet den Container zusammen mit der VM. Weitere Informationen dazu finden Sie unter Container auf VMs bereitstellen.

Alternativ können Sie Ihre Container-Workloads mit den gewünschten Containertechnologien und Orchestrierungstools auf Compute Engine ausführen. Sie können ein öffentliches VM-Image zum Erstellen einer Instanz verwenden und dann die gewünschten Containertechnologien installieren. Beispiel:

In einigen Situationen können für eine funktionierende Zusammenarbeit bestimmte Versionen dieser Technologien erforderlich sein. Kubernetes zum Beispiel läuft in der Regel am besten mit bestimmten Versionen von Docker. Normalerweise können Sie die neuesten Versionen dieser Technologien installieren, um ein bestmögliches Ergebnis zu erhalten.

Docker auf Windows Server-Images installieren

Windows Server 2016 und spätere Versionen bieten Containerunterstützung. Wenn Sie Docker-Container auf einer Windows Server-Instanz ausführen möchten, können Sie entweder Docker auf einem Windows Server-Basis-Image installieren oder Marketplace-Images von Mirantis nutzen.

Wenn Sie Docker CE auf dem Windows Server-Basis-Image installieren möchten, führen Sie folgende Schritte aus.

Erstellen Sie zuerst eine Windows Server-Instanz. Dazu können Sie ein öffentliches Image von Windows Server 2019 oder einer höheren Version verwenden. Für eine optimale Containerunterstützung empfehlen wir die Verwendung der neuesten LTSC-Version von Windows Server. Weitere Informationen zu LTSC finden Sie unter Windows Server-Wartungskanäle.

Docker installieren

Installieren Sie Docker unter Windows. Weitere Informationen finden Sie unter Windows für Container vorbereiten. Starten Sie die Instanz nach Abschluss der Installation neu.

Weitere Einrichtungsschritte

Jetzt können Sie Docker verwenden, um Container in der Instanz auszuführen. Mit dem folgenden Befehl laden Sie zum Beispiel das Windows-nanoserver-Container-Image herunter und führen eine Eingabeaufforderung in einem nanoserver-Container aus:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

Die Standard-Netzwerk-MTU von Docker beträgt 1.500 Byte. Wenn Sie für die VPC-Netzwerk-MTU ebenfalls 1.500 Byte konfiguriert haben, können Sie den Rest dieses Abschnitts überspringen. Wenn Sie in Ihrem Netzwerk hingegen die Standard-VPC-MTU von 1.460 Byte verwenden, müssen Sie auf jeder Instanz zusätzliche Konfigurationen vornehmen.

Legen Sie die MTU für alle Netzwerkschnittstellen (sowohl Ethernet als auch vEthernet) auf 1460 fest. Führen Sie dazu auf jeder Instanz in einem PowerShell-Terminal folgende Befehle aus:

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1     306804     668688  Ethernet
  1460                1          0       1282  vEthernet (nat)

Auch nach dem Ändern der MTU einer Instanz kann die Verbindung von Containern zum Internet instabil sein, da die Netzwerkschnittstelle des Containers standardmäßig auch eine MTU von 1500 verwendet. Weitere Informationen zum richtigen Einstellen der MTU für jeden Container finden Sie im Abschnitt Container-MTU.

Unter Umständen müssen Sie bei der Docker-Netzwerkkonfiguration diese MTU-Befehle in regelmäßigen Abständen wieder ausführen. Ausführliche Informationen finden Sie im Abschnitt Bekannte Probleme.

Windows-Container ausführen

Es gibt viele Ressourcen, die den Einstieg in Windows-Container erleichtern:

  • Microsoft stellt eine umfangreiche Dokumentation zu Windows-Containern zur Verfügung.
  • Docker Hub kann als Repository zum Speichern und Abrufen von Windows-Containern verwendet werden.

Bekannte Probleme mit Windows-Containern

Einstellung von Windows Server 2019 für Container-Images

Google hat eine Windows Server-Imagefamilie mit der vorinstallierten Mirantis Container Runtime (früher Docker EE) angeboten:

  • Windows
    • Enthält: Docker
    • Imageprojekt: windows-cloud
    • Imagefamilie: windows-2019-core-for-containers

Anfang 2023 hat Microsoft die Verteilung und Unterstützung der Mirantis Container Runtime für Windows Server eingestellt. Obwohl Google diese Image-Familie bis zum 30. Oktober 2023 weiterhin veröffentlichen konnte, wurde die Image-Familie nun verworfen; alle Images innerhalb der Familie wurden als veraltet gekennzeichnet.

Virtuelle Maschinen, die auf solchen, vor dem 30. Oktober 2023 erstellten Images basieren, werden weiterhin ohne Unterbrechung ausgeführt. Die Erstellung von neuen Instanzen basierend auf diesen Images schlägt jedoch nach diesem Datum fehl.

Benutzerdefinierte Images, die vor dem 30. Oktober 2023 aus diesen Images abgeleitet wurden, funktionieren weiterhin. Benutzerdefinierte Images erhalten jedoch keine automatischen Patch Tuesday Windows-Updates und keine aktualisierte Versionen der Mirantis-Containerlaufzeit mehr.

Falls Sie weiterhin Images mit vorinstallierter Mirantis Container Runtime verwenden möchten, bietet Misuris Inc Images auf dem Google Cloud Marketplace an. Die Kosten für diese VM-Images beinhalten Support und Lizenzierung für die Mirantis Container Runtime – direkt von Mirantis. Kunden, die sich für die Verwendung der eigenständigen Mirantis Container Runtime interessieren, können diese auch direkt von der Mirantis-Website herunterladen.

Wenn Sie zu einer alternativen Containerlaufzeit wie Docker CE migrieren möchten, folgen Sie der Anleitung oben.

Container können nicht in beliebigen Windows-Versionen verwendet werden

Container, die auf früheren Windows-Versionen basieren, funktionieren nicht in Compute Engine-Instanzen, auf denen neuere Versionen von Windows ausgeführt werden. Die Windows Server 2019-Version eines Containers wird von Docker standardmäßig abgerufen. Deshalb tritt ein Fehler auf, wenn Sie in einer Instanz mit Windows Server 1709 den folgenden Befehl ausführen:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe
docker: Error response from daemon: container
9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an
error during CreateContainer: failure in a Windows system call: The operating
system of the container does not match the operating system of the host.
(0xc0370101)

Auf Microsofts Seite zur Versionskompatibilität von Windows-Containern finden Sie weitere Informationen. Geben Sie beim Abrufen und Ausführen von Containern das Tag für die verwendete Windows-Version an, um Versionsinkompatibilitäten mit Windows-Containern zu umgehen. Verwenden Sie in einer Instanz mit Windows Server Version 20H2 zum Beispiel den folgenden Befehl, um eine Eingabeaufforderung im nanoserver-Container der Version 20H2 auszuführen statt im standardmäßigen 2019 LTSC (1809) Container:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

MTU-Inkompatibilitäten wirken sich auf die Instanz- und Containerkonnektivität aus

Wenn Sie mit den Befehlen docker network create oder New-VMSwitch ein Containernetzwerk auf einer Windows-Instanz erstellen, wird die MTU der Instanznetzwerkschnittstelle normalerweise auf 1500 gesetzt. Die Standardnetzwerkschnittstelle innerhalb eines neuen Docker-Containers verwendet in der Regel auch eine MTU von 1500. Wenn Ihr VPC-Netzwerk eine MTU von 1460 hat, können die folgenden Probleme auftreten:

  • Die RDP-Sitzung kann beendet werden und Sie können möglicherweise die Verbindung nicht wiederherstellen. Dies geschieht, wenn ein transparentes Containernetzwerk erstellt wird.

  • Die DNS-Auflösung im Container kann fehlschlagen.

  • Die DNS-Auflösung ist zwar erfolgreich, aber es lässt sich keine HTTP-Verbindung vom Container zum Internet herstellen.

Die empfohlene Problemumgehung für diese Einschränkungen erfordert zwei Schritte: das Festlegen der MTU für die Netzwerkschnittstellen der Instanz auf 1460 und das Festlegen der MTU für die Containernetzwerkschnittstellen auf 1460. Alternativ können Sie die MTU für die VPC auf 1500 festlegen. Dazu müssen Sie jedoch alle VMs beenden oder migrieren.

1. MTU für die Netzwerkschnittstellen der Windows-Instanz festlegen

Führen Sie den folgenden Befehl in einem PowerShell-Terminal auf der Windows-Instanz aus, um die MTU für alle Netzwerkschnittstellen (sowohl Ethernet als auch vEthernet) festzulegen:

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Überprüfen Sie mit dem folgenden Befehl, ob die MTUs der Ethernet- und vEthernet-Schnittstelle der Instanz auf 1460 eingestellt sind:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1  628295912    2613170  Ethernet
  1460                1      37793     223909  vEthernet (nat)

Wenn Sie diese Befehle nicht ausführen können, weil Sie über RDP keine Verbindung mehr zu einer Instanz herstellen können, können Sie über die serielle Konsole eine Verbindung zur Instanz herstellen, eine cmd-Eingabeaufforderung starten und dort die netsh-Befehle ausführen, um die MTU zu reparieren. Um dies zu vermeiden, empfehlen wir, docker network ...- oder New-VMSwitch-Befehle als Teil eines Skripts auszuführen, das auch den MTU-Reparaturbefehl ausführt.

2. MTU für die Windows-Container-Netzwerkschnittstellen festlegen

Die MTU für einen Windows-Container muss festgelegt werden, während der Container ausgeführt wird, entweder innerhalb des Containers oder auf der Instanz, die den Container hostet. Wenn PowerShell in Ihrem Container verfügbar ist, können Sie diesen Befehl interaktiv oder über ein Skript im Container ausführen, um die MTU korrekt festzulegen:

PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Sie können diesen Befehl auch auf der Windows-Instanz ausführen, um die MTU für alle ausgeführten Container festzulegen:

PS C:\> Get-NetIPInterface -IncludeAllCompartments |
  Where-Object InterfaceAlias -like "vEthernet*" |
  Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460

Hyper-V-Container starten nicht

Hyper-V-Container werden derzeit nicht von Compute Engine unterstützt.

Nächste Schritte