Container auf VMs und MIGs bereitstellen

Sie können eine VM-Instanz oder eine Instanzvorlage konfigurieren, um einen Docker-Container bereitzustellen und zu starten. Compute Engine stellt ein aktuelles Image eines Container-Optimized OS (COS) mit installiertem Docker bereit und startet den Container zusammen mit der VM. Weitere Informationen zu den Vorteilen der Bereitstellung von Containern auf VMs finden Sie unter Container auf VMs und in Instanzgruppen bereitstellen weiter unten in diesem Thema.

Hinweise

Container auf VMs und in Instanzgruppen bereitstellen

Durch die Bereitstellung von Containern in Compute Engine können Sie die Anwendungsbereitstellung vereinfachen und gleichzeitig Ihre VM-Infrastruktur steuern.

  • VMs, auf denen Container ausgeführt werden, können Sie genauso verwalten wie alle anderen VMs, die Sie im Rahmen Ihrer Compute Engine-Infrastruktur konfigurieren und verwalten.
  • Erstellen Sie skalierbare Dienste mithilfe von verwalteten Instanzgruppen, in denen Container ausgeführt werden. Diese bieten Funktionen wie Autoscaling, automatische Reparatur, Rolling Updates, Mehrzonenbereitstellungen und Load-Balancing.
  • Für das Verwalten Ihrer VMs mit Containern verwenden Sie vertraute Prozesse und Tools wie das gcloud-Befehlszeilentool oder die Compute Engine API.

Alternativ können Sie die Bereitstellung in Google Kubernetes Engine in Erwägung ziehen, um die folgenden Möglichkeiten zu erhalten:

  • Ausführung einer großen Anzahl von Mikrodiensten
  • Schnellerer Start von Containern
  • Nutzung der Vorteile der automatischen Orchestrierung von Kubernetes, einschließlich automatischer Upgrades, automatischer Knotenreparatur und Autoscaling

Wenn Sie jeden Mikrodienst auf einer separaten virtuellen Maschine in Compute Engine ausführen, kann der Aufwand des Betriebssystems einen erheblichen Teil Ihrer Kosten ausmachen. Mit Google Kubernetes Engine können Sie mehrere Container und Gruppen von Containern für jede VM-Instanz bereitstellen, wodurch Host-VM-Ressourcen effizienter zu Mikrodiensten mit kleinerem Volumen zugewiesen werden können.

Container in Compute Engine bereitstellen

Die gängigen Methoden zur Bereitstellung von Software in einer Compute Engine-VM-Instanz sind:

  • Software beim VM-Start mit einem Startskript oder mit cloud-init bereitstellen.
  • Erstellen eines benutzerdefinierten Bootlaufwerk-Images mit vorinstallierter Software

Die beiden genannten Methoden kombinieren die Aufgaben der Anwendungskonfiguration und der Einrichtung der Host-Betriebssystemumgebung. Als Entwickler müssen Sie alle Laufzeitabhängigkeiten sorgfältig verfolgen und auflösen. Wenn z. B. zwei Anwendungen, die auf einer VM ausgeführt werden, unterschiedliche Versionen derselben Bibliothek verwenden, müssen Sie beide Versionen installieren und über Systemvariablen auf sie verweisen.

Anwendungen, die in verschiedenen Versionen derselben Bibliothek ausgeführt werden.
Eine VM-Instanz mit Anwendungen, die direkt auf dem Hostbetriebssystem bereitgestellt werden

Sie können Software in einem Container auch direkt auf einer VM-Instanz oder in einer verwalteten Instanzgruppe bereitstellen. Jeder Container enthält sowohl Anwendungssoftware als auch die erforderlichen Bibliotheken und ist von den Anwendungen und Bibliotheken des Host-Betriebssystems isoliert. Container können problemlos zwischen Bereitstellungsumgebungen verschoben werden, ohne Konflikte zwischen den Bibliotheksversionen in einem Container und denen im Hostbetriebssystem lösen zu müssen.

Anwendungen in Containern.
Eine VM-Instanz mit in einem Container bereitgestellten Anwendungen

Im Folgenden wird beschrieben, wie Sie einen Container in Compute Engine bereitstellen:

  1. Sie bündeln Ihre Anwendung und die erforderlichen Bibliotheken in einem Docker-Image und veröffentlichen das Image in der Container Registry (oder öffentlich in Docker Hub oder einer anderen Registry).
  2. Sie geben einen Namen für das Docker-Image und die docker run-Konfiguration beim Erstellen einer VM-Instanz oder einer Instanzvorlage für eine verwaltete Instanzgruppe an.

Compute Engine führt die folgenden Aufgaben aus, nachdem Sie die Anfrage zum Erstellen einer VM-Instanz oder einer Instanzvorlage gestellt haben:

  1. Compute Engine erstellt mithilfe eines von Google bereitgestellten Container-Optimized OS-Image eine VM-Instanz oder eine Instanzvorlage. Dieses Image enthält eine Docker-Laufzeit und zusätzliche Software, die für das Starten des Containers zuständig ist.
  2. Compute Engine speichert Ihre Containereinstellungen in den Instanzmetadaten unter dem gce-container-declaration-Metadatenschlüssel.
  3. Das Container-Optimized OS-Image ruft das Container-Image aus dem Repository ab und startet den Container beim Start der VM unter Verwendung der in den Metadaten der Instanz gespeicherten docker run-Befehlskonfiguration.
Container-Image und den Befehl />
Schritte zum Erstellen einer VM-Instanz oder einer verwalteten Instanzgruppe, die einen Container ausführt

Einschränkungen

  • Pro VM-Instanz können Sie jeweils nur einen Container bereitstellen. Google Kubernetes Engine kann hilfreich sein, wenn Sie mehrere Container pro VM-Instanz bereitstellen müssen.
  • Sie können Container nur aus einem öffentlichen Repository oder aus einem privaten Repository in Container Registry bereitstellen. Andere private Repositories werden derzeit nicht unterstützt.
  • Sie können die Ports einer VM-Instanz nicht den Ports des Containers zuordnen (Docker-Option -p).
  • Mit dieser Bereitstellungsmethode können Sie nur Container-Optimized OS-Images verwenden.
  • Sie können diese Funktion nur über die Google Cloud Console oder das gcloud-Befehlszeilentool verwenden, nicht über die API.

Container für die Bereitstellung vorbereiten

Wählen Sie die Methode zur Bereitstellung Ihres Container-Images in Compute Engine:

  • Hochladen Ihres Docker-Image in Container Registry.
  • Sie können beliebige öffentlich verfügbare Container-Images von Docker Hub oder aus anderen Registrys verwenden.

Container auf einer neuen VM-Instanz bereitstellen

Sie können einen Container auf einer neuen VM-Instanz mithilfe der Google Cloud Console oder des gcloud-Befehlszeilentools bereitstellen.

Console

Im folgenden Beispiel wird ein Container aus einem von Google bereitgestellten Nginx-Docker-Image (https://gcr.io/cloud-marketplace/google/nginx1:latest) in einer VM-Instanz bereitgestellt. Wenn Sie ein anderes Docker-Image verwenden möchten, geben Sie in den nachstehenden Beispielen stattdessen das gewünschte Image an.

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Geben Sie unter Container-Image einen Namen für das Container-Image an und konfigurieren Sie bei Bedarf die Optionen zum Ausführen des Containers. Sie können beispielsweise gcr.io/cloud-marketplace/google/nginx1:latest für das Container-Image angeben.
  5. Klicken Sie auf Erstellen.

gcloud

Führen Sie folgenden gcloud compute instances create-with-container-Befehl aus:

 gcloud compute instances create-with-container [INSTANCE_NAME] \
     --container-image [DOCKER_IMAGE]

Mit dem folgenden Befehl wird beispielsweise eine neue VM-Instanz namens "nginx-vm" erstellt, die das Docker-Image gcr.io/cloud-marketplace/google/nginx1:latest startet und ausführt.

 gcloud compute instances create-with-container nginx-vm \
     --container-image gcr.io/cloud-marketplace/google/nginx1:latest

Weitere Informationen zum gcloud compute instances create-with-container-Befehl.

Wenn Sie ein öffentliches Image von Docker Hub verwenden, müssen Sie immer den vollständigen Namen des Docker-Images angeben. Geben Sie zum Beispiel den folgenden Image-Namen an, um ein Apache-Container-Image bereitzustellen:

docker.io/httpd:2.4

Container auf einer VM-Instanz aktualisieren

Sie können ein Docker-Image und Konfigurationsoptionen aktualisieren, um den Container auf einer VM-Instanz mit der Google Cloud Console oder dem gcloud-Befehlszeilentool auszuführen.

Bei der Aktualisierung einer VM, auf der ein Container ausgeführt wird, führt Compute Engine die folgenden zwei Schritte durch:

  • Die Containerdeklaration auf der Instanz wird aktualisiert. Compute Engine speichert die aktualisierte Containerdeklaration in den Instanzmetadaten unter dem gce-container-declaration-Metadatenschlüssel.
  • Wird die Instanz ausgeführt, wird sie beendet und neu gestartet, um die aktualisierte Konfiguration zu übernehmen. Wenn die Instanz beendet ist, wird die Containerdeklaration aktualisiert, ohne die Instanz zu starten. Die VM-Instanz lädt das neue Image herunter und startet den Container beim Start der VM.

Console

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf den Namen der Instanz, die Sie aktualisieren müssen.
  3. Klicken Sie auf der Seite der Instanzdetails auf Bearbeiten.
  4. Geben Sie das neue Container-Image an und aktualisieren Sie ggf. die Optionen zum Ausführen des Containers.
  5. Klicken Sie auf Speichern und neu starten, um die Änderungen zu speichern. Compute Engine speichert die Änderungen und startet die Instanz automatisch neu, um die Aktualisierung zu übernehmen. Nach dem Neustart der VM wird das neue Image heruntergeladen und der Container mit der aktualisierten Konfiguration gestartet.

gcloud

Aktualisieren Sie die Containerdeklaration mit dem Befehl gcloud compute instances update-container. Beispiel:

gcloud compute instances update-container nginx-vm \
    --container-image gcr.io/cloud-marketplace/google/nginx1:latest

Mit diesem Befehl wird das Container-Image auf gcr.io/cloud-marketplace/google/nginx1:latest gesetzt und die Instanz neu gestartet, um die Änderungen zu übernehmen. Außerdem können Sie die in Optionen zum Ausführen von Containern konfigurieren beschriebenen Attribute aktualisieren, indem Sie die entsprechenden Flags hinzufügen.

Nachdem die Instanz neu gestartet wurde, lädt sie das neue Container-Image herunter und startet den Container mit der neuen Konfiguration.

Container in einer verwalteten Instanzgruppe bereitstellen

Sie können einen Container für eine neue verwaltete Instanzgruppe bereitstellen, indem Sie die Google Cloud Console oder das gcloud-Befehlszeilentool verwenden. Befolgen Sie dazu diese Schritte:

  1. Erstellen Sie eine Instanzvorlage auf der Grundlage eines Docker-Image.

  2. Erstellen Sie eine verwaltete Instanzgruppe aus der neuen Instanzvorlage.

Console

Im folgenden Beispiel wird eine Instanzvorlage erstellt, die einen Container aus einem von Google bereitgestellten Nginx- (gcr.io/cloud-marketplace/google/nginx1:15) Docker-Image in einer verwalteten Instanzgruppe bereitstellt. Wenn Sie andere Docker-Images verwenden möchten, geben Sie im folgenden Beispiel anstelle von gcr.io/cloud-marketplace/google/nginx1:15 das gewünschte Image an.

  1. Rufen Sie die Seite Instanzvorlagen auf.

    Zur Seite "Instanzvorlagen"

  2. Klicken Sie auf die Schaltfläche Instanzvorlage erstellen, um eine neue Instanzvorlage zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Geben Sie unter Container-Image einen Namen für das Docker-Image an und konfigurieren Sie bei Bedarf die Optionen zum Ausführen des Containers. Sie können beispielsweise gcr.io/cloud-marketplace/google/nginx1:15 für das Container-Image angeben.
  5. Klicken Sie auf Erstellen.

Erstellen Sie anschließend eine verwaltete Instanzgruppe aus der neuen Instanzvorlage.

gcloud

Erstellen Sie eine Instanzvorlage zum Ausführen von Docker-Images mit dem gcloud compute instance-templates create-with-container-Befehl:

 gcloud compute instance-templates create-with-container [TEMPLATE_NAME] \
 --container-image [DOCKER_IMAGE]

Bei Bedarf können Sie auch Optionen zum Ausführen des Containers konfigurieren.

Mit dem folgenden Befehl wird beispielsweise eine neue Instanzvorlage mit dem Namen nginx-template erstellt, die Informationen über das Docker-Image enthält. Eine aus dieser Vorlage erstellte VM-Instanz startet das Docker-Image gcr.io/cloud-marketplace/google/nginx1:15 und führt es aus, wenn die VM gestartet wird.

 gcloud compute instance-templates create-with-container nginx-template \
     --container-image gcr.io/cloud-marketplace/google/nginx1:15

Erstellen Sie anschließend eine verwaltete Instanzgruppe aus der neuen Instanzvorlage.

Nun verfügen Sie über eine Instanzvorlage und können eine verwaltete Instanzgruppe erstellen, die die Instanzvorlage verwendet. Beispiel: Zum Erstellen einer verwalteten Instanzgruppe mit dem gcloud-Tool und dem gerade erstellten nginx-template führen Sie den folgenden Befehl aus:

gcloud compute instance-groups managed create example-group \
    --base-instance-name nginx-vm \
    --size 3 \
    --template nginx-template

Verwaltete Instanzgruppe aktualisieren, auf der ein Container ausgeführt wird

Sie können eine verwaltete Instanzgruppe aktualisieren und eine neue Version eines Docker-Images oder eines Container-Optimized OS-Images bereitstellen.

Verwaltete Instanzgruppe auf die neue Version eines Container-Images aktualisieren

Sie können eine neue Version eines Docker-Image für eine verwaltete Instanzgruppe bereitstellen, indem Sie den Managed Instance Group Updater verwenden. Gehen Sie dazu in drei Schritten vor:

  1. Das neue Docker-Image für die Bereitstellung vorbereiten.
  2. Erstellen Sie eine Instanzvorlage basierend auf dem neuen Docker-Image auf die gleiche Weise, wie Sie eine containerbasierte Vorlage erstellen.
  3. Aktualisieren Sie eine verwaltete Instanzgruppe mithilfe des Managed Instance Group Updaters auf die neue Instanzvorlage.

Verwaltete Instanzgruppe auf die neue Version eines Container-Optimized OS-Images aktualisieren

Google aktualisiert Container-Optimized OS-Images regelmäßig. Möglicherweise möchten Sie diese Aktualisierungen auf Ihre verwalteten Instanzgruppen mit Containern anwenden, ohne Ihr Docker-Image zu ändern. Sie können eine verwaltete Instanzgruppe mithilfe der Google Cloud Console oder des gcloud-Befehlszeilentools auf eine neue Version eines Container-Optimized OS-Image aktualisieren. Gehen Sie dazu in zwei Schritten vor:

  1. Erstellen Sie eine Instanzvorlage basierend auf der aktuellen Version Ihres Docker-Image in der gleichen Weise, wie Sie für eine neue verwaltete Instanzgruppe eine containerbasierte Vorlage erstellen. Standardmäßig wird die neueste unterstützte Version eines Container-Optimized OS-Image verwendet.
  2. Aktualisieren Sie eine verwaltete Instanzgruppe mit der neuen Instanzvorlage unter Verwendung des Managed Instance Group Updaters.

Über SSH mit einem Container verbinden

Sie können eine Verbindung zu einem Container auf einer VM unter Verwendung von SSH herstellen. Verwenden Sie das gcloud-Tool, um gcloud compute ssh mit dem Flag --container auszuführen:

gcloud compute ssh [INSTANCE_NAME] --container [CONTAINER_NAME]

Dabei gilt:

  • [INSTANCE_NAME] ist der Name der VM-Instanz.
  • [CONTAINER_NAME] ist der Name des Containers.

Weitere Informationen zum gcloud compute ssh-Befehl und zu seinen Argumenten.

Logs ansehen

Sie können drei Arten von Logs für Container aufrufen.

  1. Logs des Start-Agents, auch als konlet-Logs bekannt. Der Start-Agent parst die Konfiguration des Containers und führt Aufgaben für den Start des Containers auf einer Compute Engine-VM-Instanz aus.

  2. Docker-Ereignislogs dokumentieren Containerereignisse, einschließlich Containerstart- und -stoppereignisse. Diese Logs stehen zur Verfügung, wenn Sie COS 69 oder höher verwenden.

  3. Zu den Logs Ihres Containers gehört auch der STDOUT von Anwendungen, die in Ihrem Container ausgeführt werden.

Logs des Start-Agents ansehen

Logs des Start-Agents sind in der seriellen Konsole, über den journald-Systemdienst, der im Betriebssystem-Image enthalten ist, und über Stackdriver Logging verfügbar.

Logs des Start-Agents in der seriellen Konsole ansehen

Console

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Wählen Sie die VM-Instanz aus, deren Start-Agent-Logs Sie anzeigen möchten.
  3. Klicken Sie unter Logs auf Serieller Port 1 (Konsole), um die Logs der seriellen Konsole aufzurufen.

gcloud

Verwenden Sie get-serial-port-output, um Logs am seriellen Port der Instanz anzuzeigen.

gcloud compute instances get-serial-port-output [INSTANCE_NAME]

Hierbei ist [INSTANCE_NAME] der Name der VM-Instanz.

Verwenden Sie zum Beispiel den folgenden Befehl, um die Ausgabe des seriellen Ports einer VM-Instanz mit dem Namen nginx-vm anzuzeigen:

gcloud compute instances get-serial-port-output nginx-vm

Logs des Start-Agents in journald anzeigen

  1. Stellen Sie eine Verbindung von Ihrer Instanz zu einem Container über SSH her.
  2. Führen Sie den Befehl sudo journalctl aus, um die Logs für den Start von VMs und Containern anzuzeigen. Verwenden Sie den folgenden Befehl, um nach Start-Agent-Logs für den Container zu filtern (konlet).

    sudo journalctl -u konlet*
    

Logs des Start-Agents in Logging ansehen

Console

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Zur Seite "VM-Instanzen"

  2. Wählen Sie die VM-Instanz aus, deren Start-Agent-Logs Sie anzeigen möchten.
  3. Unter Logs klicken Sie auf Stackdriver Logging, um Logs für Stackdriver Logging anzuzeigen.

  4. Geben Sie einen Suchfilter ein, um die Logs des Start-Agents abzurufen.

    Wenn Sie COS 68 oder niedriger nutzen, verwenden Sie folgenden Filter.

    resource.type="global"
    logName="projects/[PROJECT_ID]/logs/gcplogs-docker-driver"
    jsonPayload.container.imageName:"gcr.io/gce-containers/konlet"
    jsonPayload.instance.name="[INSTANCE_NAME]"
    

    Wenn Sie COS 69 oder höher nutzen, verwenden Sie folgenden Filter.

    resource.type="gce_instance"
    logName="projects/[PROJECT_ID]/logs/cos_system"
    jsonPayload.SYSLOG_IDENTIFIER="konlet-startup"
    jsonPayload._HOSTNAME="[INSTANCE_NAME]"
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
    • [INSTANCE_NAME] ist der Name der Instanz, deren Logs Sie aufrufen möchten.

gcloud

Verwenden Sie den Befehl gcloud logging read mit einem entsprechenden Filter, um die Logs des Start-Agents für einen Container anzuzeigen.

Wenn Sie COS 68 oder niedriger nutzen, verwenden Sie den folgenden Befehl und Filter.

gcloud logging read "resource.type=global AND \
    logName=projects/[PROJECT_ID]/logs/gcplogs-docker-driver AND \
    jsonPayload.instance.name=[INSTANCE_NAME]"

Wenn Sie COS 69 oder höher nutzen, verwenden Sie den folgenden Befehl und Filter.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/[PROJECT_ID]/logs/cos_system AND \
    jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \
    jsonPayload._HOSTNAME=[INSTANCE_NAME]"

Dabei gilt:

  • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
  • [INSTANCE_NAME] ist der Name der Instanz, deren Logs Sie aufrufen möchten.

Verwenden Sie zum Beispiel den folgenden Befehl, um in Logging die letzten 10 Logs des Start-Agents für eine VM-Instanz mit dem Namen nginx-vm anzusehen, die COS 70 ausführt und in my-project vorhanden ist.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/my-project/logs/cos_system AND \
    jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \
    jsonPayload._HOSTNAME=nginx-vm" \
    --limit 10

Docker-Ereignislogs ansehen

Ab COS 69 können Sie Docker-Ereignisprotokolle in journald und in Stackdriver Logging anzeigen.

Docker-Ereignisprotokolle in journald ansehen

  1. Stellen Sie eine Verbindung von Ihrer Instanz zu einem Container über SSH her.
  2. Führen Sie den Befehl sudo journalctl mit dem folgenden Filter aus, um Docker-Ereignisprotokolle anzuzeigen.

    sudo journalctl -u docker-events-collector
    

Docker-Ereignisprotokolle in Logging anzeigen

Console

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Wählen Sie die VM-Instanz aus, deren Start-Agent-Logs Sie anzeigen möchten.
  3. Unter Logs klicken Sie auf Stackdriver Logging, um Logs für Stackdriver Logging anzuzeigen.

  4. Geben Sie den folgenden Suchfilter ein, um Docker-Ereignislogs abzurufen:

    resource.type="gce_instance"
    logName="projects/[PROJECT_ID]/logs/cos_system"
    jsonPayload._HOSTNAME="[INSTANCE_NAME]"
    jsonPayload.SYSLOG_IDENTIFIER="docker"
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
    • [INSTANCE_NAME] ist der Name der Instanz, deren Logs Sie aufrufen möchten.

gcloud

Verwenden Sie den Befehl gcloud logging read mit einem geeigneten Filter, um Docker-Ereignisprotokolle anzuzeigen.

gcloud logging read "resource.type=gce_instance AND \
      logName=projects/[PROJECT_ID]/logs/cos_system AND \
      jsonPayload._HOSTNAME=[INSTANCE_NAME] AND \
      jsonPayload.SYSLOG_IDENTIFIER=docker"

Dabei gilt:

  • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
  • [INSTANCE_NAME] ist der Name der Instanz, deren Logs Sie aufrufen möchten.

Verwenden Sie zum Beispiel den folgenden Befehl, um in Logging die letzten 10 Docker-Ereignisprotokolle für eine VM-Instanz mit dem Namen nginx-vm anzuzeigen, die COS 70 ausführt und in my-project vorhanden ist.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/my-project/logs/cos_system AND \
    jsonPayload._HOSTNAME=nginx-vm AND \
    jsonPayload.SYSLOG_IDENTIFIER=docker" \
    --limit 10

Containerlogs ansehen

Console

  1. Rufen Sie die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Wählen Sie die VM-Instanz aus, deren Start-Agent-Logs Sie anzeigen möchten.
  3. Unter Logs klicken Sie auf Stackdriver Logging, um Logs für Stackdriver Logging anzuzeigen.

  4. Die Stackdriver Logging-Seite wird mit einem Standardsuchfilter geladen. Wenn Sie COS 69 oder höher verwenden, untersuchen Sie den Filter und kopieren Sie den Wert für resource.labels.instance_id. Sie werden ihn später benötigen.

  5. Aktualisieren Sie den Suchfilter, um die Logs des Containers abzurufen.

    Wenn Sie COS 68 oder niedriger nutzen, verwenden Sie folgenden Filter.

    logName="projects/[PROJECT_ID]/logs/gcplogs-docker-driver"
    jsonPayload.container.name="/[INSTANCE_NAME]"
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
    • [INSTANCE_NAME] ist der Name der Instanz, deren Logs Sie aufrufen möchten.

    Wenn Sie COS 69 oder höher nutzen, verwenden Sie folgenden Filter:

    resource.type="gce_instance"
    logName="projects/[PROJECT_ID]/logs/cos_containers"
    resource.labels.instance_id="[INSTANCE_ID]"
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
    • [INSTANCE_ID] ist die ID der Instanz, deren Logs Sie aufrufen möchten.

gcloud

Verwenden Sie den Befehl gcloud logging read mit einem entsprechenden Filter, um Container-Logs anzuzeigen.

Wenn Sie COS 68 oder niedriger nutzen, verwenden Sie den folgenden Befehl und Filter.

gcloud logging read "logName=projects/[PROJECT_ID]/logs/gcplogs-docker-driver AND \
    jsonPayload.container.name=/[INSTANCE_NAME]"

Wenn Sie COS 69 oder höher nutzen:

  1. Ermitteln Sie die ID der Instanz, für die Sie Logs abrufen möchten.

    gcloud compute instances describe [INSTANCE_NAME] \
        --zone [ZONE] \
        --format="value(id)"
    

    Dabei gilt:

    • [ZONE] ist die Zone, in der sich die Instanz befindet.
    • [INSTANCE_NAME] ist der Name der Instanz, deren Logs Sie aufrufen möchten.
  2. Rufen Sie mit dem folgenden Befehl und einem Filter die Containerlogs der Instanz auf:

    gcloud logging read "resource.type=gce_instance AND \
        logName=projects/[PROJECT_ID]/logs/cos_containers AND \
        resource.labels.instance_id=[INSTANCE_ID]"
    

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID, die die Instanz enthält.
    • [INSTANCE_ID] ist die ID der Instanz.

    Verwenden Sie zum Beispiel den folgenden Befehl, um in Stackdriver Logging die letzten 10 Container-Logs für eine VM-Instanz anzuzeigen, die COS 70 ausführt, in my-project vorhanden ist und die Instanz-ID 555123456789012345 hat.

    gcloud logging read "resource.type=gce_instance AND \
        logName=projects/my-project/logs/cos_containers AND \
        resource.labels.instance_id=555123456789012345" \
        --limit 10
    

Containeroptimierte Images oder Image-Familien festlegen

Containerisierte VM-Instanzen oder Instanzvorlagen werden so erstellt, dass sie standardmäßig das neueste unterstützte Container-optimierte Image verwenden. Das Image gehört zum cos-cloud-Projekt.

Sie können diese Standardeinstellung durch ein anderes Image der Version 62 oder höher, über die Image-Familie cos-stable, cos-beta oder cos-dev oder mit einer der folgenden Image-Familien (alle im cos-cloud-Projekt enthalten) außer Kraft setzen.

Diese Image-Familien enthalten containeroptimierte Images aus drei Releasekanälen:

  • Der dev-Kanal enthält alle aktuellen Änderungen und wird regelmäßig aktualisiert.
  • Der beta-Kanal ist ein qualifiziertes Image in der Betaphase, das seltener aktualisiert wird.
  • Der stable-Kanal bietet eine länger getestete und unterstützte Version mit nur seltenen und kritischen Updates (falls erforderlich).

Geben Sie beispielsweise mit dem gcloud-Tool das Flag --image an, um das standardmäßige containeroptimierte Image zu überschreiben, oder das Flag --image-family, um zum Zeitpunkt der VM-Erstellung das neueste Image aus der angegebenen Familie auszuwählen.

Im folgenden Beispiel wird eine containerisierte VM-Instanz erstellt, die das neueste Image aus der cos-dev-Image-Familie verwendet:

 gcloud compute instances create-with-container nginx-vm \
   --image-family cos-dev \
   --image-project cos-cloud \
   --container-image gcr.io/cloud-marketplace/google/nginx1:1.15

Firewallregeln konfigurieren

Containerisierte VMs starten Container, deren Netzwerk auf den Hostmodus eingestellt ist. Ein Container gehört zum Host-Netzwerk-Stack, d. h., alle Schnittstellen des Hosts sind für den Container zugänglich.

Standardmäßig blockieren Google Cloud-Firewallregeln alle eingehenden Verbindungen zu einer VM-Instanz und lassen alle von einer VM-Instanz ausgehenden Verbindungen zu.

Erstellen Sie Firewallregeln, um eingehende Verbindungen zu Ihrer Instanz und somit zum Container zuzulassen.

Optionen zum Ausführen eines Containers konfigurieren

Für die Ausführung Ihres Containers können Sie folgende Optionen konfigurieren:

  • Richtlinie für den Containerneustart festlegen
  • ENTRYPOINT des Containers überschreiben (Standardbefehl, der beim Containerstart ausgeführt wird)
  • Argumente an den Befehl ENTRYPOINT des Containers übergeben
  • Den Container im privilegierten Modus ausführen
  • Stellen Sie ein Hostverzeichnis oder tmpfs als Datenvolumen im Container bereit.
  • Umgebungsvariablen festlegen
  • Einen Zwischenspeicher für STDIN in der Containerlaufzeit zuweisen
  • Ein Pseudoterminal zuordnen

Weitere Informationen: Optionen zum Ausführen von Containern konfigurieren

Weitere Informationen