Informationen zu Ausführungsumgebungen

Cloud Run-Dienste arbeiten standardmäßig in der Ausführungsumgebung der ersten Generation, die schnelle Kaltstartzeiten und die meisten Emulationen der meisten Betriebssystem-Aufrufe aufweist, aber nicht alle Betriebssystemaufrufe. Ursprünglich war dies die einzige Ausführungsumgebung, die für Dienste in Cloud Run verfügbar ist.

Die Ausführungsumgebung der zweiten Generation bietet vollständige Linux-Kompatibilität anstelle einer Systememulation. Diese Ausführungsumgebung bietet folgende Vorteile:

  • Höhere CPU-Leistung
  • Höhere Netzwerkleistung, insbesondere bei Paketverlust
  • Vollständige Linux-Kompatibilität, einschließlich Unterstützung für alle Systemaufrufe, Namespaces und cgroups
  • Unterstützung von Netzwerkdateisystemen

Obwohl die Ausführungsumgebung der zweiten Generation in der Regel unter dauerhafter Last schneller ausgeführt wird, hat sie für die meisten Dienste auch längere Kaltstartzeiten als die erste Generation.

Sie können die Ausführungsumgebung für Ihren Cloud Run-Dienst wählen, wenn Sie einen neuen Dienst oder eine neue Überarbeitung bereitstellen. Wenn Sie keine Ausführungsumgebung angeben, wird standardmäßig die erste Generation verwendet.

Ausführungsumgebung auswählen

Sie sollten die erste Generation verwenden, wenn eine der folgenden Bedingungen zutrifft:

  • Ihr Cloud Run-Dienst hat stoßweisen Traffic und muss schnell auf viele Instanzen heraufskaliert werden oder Ihr Dienst ist empfindlich gegenüber Kaltstartzeiten.
  • Ihr Cloud Run-Dienst hat seltenen Traffic, der häufig zu einer horizontalen Skalierung von null führt.
  • Sie möchten weniger als 512 MiB Arbeitsspeicher verwenden. Die Ausführungsumgebung der zweiten Generation erfordert mindestens 512 MiB Arbeitsspeicher.

Sie sollten die zweite Generation verwenden, wenn einer der folgenden Bedingungen auf Ihren Cloud Run-Dienst zutrifft:

  • Ihr Dienst muss ein Netzwerkdateisystem verwenden, das nur von der zweiten Generation unterstützt wird.
  • Ihr Dienst hat relativ gleichmäßigen Traffic und ist eher tolerant gegenüber den etwas langsameren Kaltstarts.
  • Ihr Dienst hat CPU-intensive Arbeitslasten.
  • Ihr Dienst könnte von einer höheren Netzwerkleistung profitieren.
  • Ihr Dienst muss Software verwenden, bei der aufgrund von nicht implementierten Systemaufrufen Probleme bei der Ausführung in der ersten Generation auftreten.
  • Ihr Dienst benötigt Linux cgroup-Funktionalität.
  • Ihr Dienst nutzt die Infrastruktur von Drittanbietern zum Sichern von Containern.

Best Practices bei Verwendung der Ausführungsumgebung der zweiten Generation

Wir empfehlen, dass Ihr Container einen SIGTERM-Handler installiert, insbesondere wenn Sie das CPU-On-Demand-Abrechnungsmodell verwenden.

Die Verarbeitung von SIGTERM bietet dem Container die Möglichkeit, sämtliche notwendige Bereinigungsaufgaben wie das Leeren von Logs vor dem Beenden durchzuführen. Wenn Ihr Container SIGTERM nicht abfängt, hat er noch 10 Sekunden zur Ausführung dieser Aufgaben. diese 10 Sekunden werden abgerechnet.

So prüfen Sie, ob Ihr Container SIGTERM verarbeitet

So ermitteln Sie, ob in Ihrem Container ein SIGTERM-Handler installiert ist:

  1. Starten Sie Cloud Shell. Den Schaltfläche Schaltfläche „Cloud Run aktivieren“ Cloud Shell aktivieren finden Sie in der Kopfzeile der Dokumentationsseite, auf der Sie sich befinden. Möglicherweise müssen Sie es autorisieren und auf die Bereitstellung warten. Alternativ können Sie eine eigenständige Sitzung starten.

  2. Führen Sie den Container lokal in Cloud Shell aus:

    docker run IMAGE_URL

    Ersetzen Sie IMAGE_URL durch einen Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat die Form REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

  3. Öffnen Sie einen weiteren Tab in Cloud Shell und rufen Sie eine Liste der Container ab, die in der aktuellen Cloud Shell-Sitzung ausgeführt werden:

    docker container ls

    Sie müssen die Container-ID finden, die vom Befehl zurückgegeben wurde.

  4. Senden Sie dem Container mithilfe der Container-ID ein SIGTERM-Signal

    docker kill -s SIGTERM CONTAINER_ID
  5. Kehren Sie zu dem Tab zurück, in dem Sie docker run aufgerufen haben, um zu sehen, ob der Container beendet wurde. Wenn das SIGTERM-Signal dazu geführt hat, dass der Container beendet wurde, verarbeitet der Container SIGTERM.

Verarbeiten von SIGTERM

Wenn Ihr Container SIGTERM nicht verarbeiten kann, ist die einfachste Möglichkeit, einen SIGTERM-Handler hinzuzufügen, darin, den Dienst mit tini zu verpacken. Auf diese Weise wird der Dienst als Unterprozess von tini ausgeführt, was die Rolle des Container-init-Prozesses übernimmt. Eine Anleitung finden Sie in der Docker-Anleitung.

Alternativ können Sie die Anwendung so ändern, dass SIGTERM direkt verarbeitet wird.

Nächste Schritte