Containerlaufzeitvertrag

Auf dieser Seite werden die wichtigsten Anforderungen und Verhaltensweisen von Containern in Cloud Run aufgeführt.

Unterstützte Sprachen und Images

Ihr Container-Image kann Code in der Programmiersprache Ihrer Wahl ausführen und jedes Basis-Image verwenden, sofern die auf dieser Seite aufgeführten Einschränkungen berücksichtigt werden.

Ausführbare Dateien im Container-Image müssen für Linux 64-Bit kompiliert sein. Cloud Run unterstützt speziell das Linux x86_64-ABI-Format.

Cloud Run akzeptiert Container-Images in den Image-Formaten „Docker Image Manifest V2”, Schema 1 und Schema 2. Das OCI-Image-Format wird derzeit nicht unterstützt.

Anfragen auf dem richtigen Port überwachen

Der Container muss eine Überwachung von Anfragen an 0.0.0.0 an dem Port ausführen, an den die Anfragen gesendet werden. Standardmäßig werden Anfragen an 8080 gesendet, aber Sie können Cloud Run so konfigurieren, dass Anfragen an den Port Ihrer Wahl gesendet werden. Cloud Run fügt die PORT-Umgebungsvariable in den Container ein. In Cloud Run-Containerinstanzen entspricht der Wert der Umgebungsvariablen PORT immer dem Port, an den Anfragen gesendet werden. Die Standardeinstellung ist 8080.

Verschlüsselung auf Transportebene (TLS)

Der Container sollte die Sicherheit der Transportebene nicht direkt implementieren. TLS wird von Cloud Run für HTTPS und gRPC beendet und Anfragen werden dann als HTTP/1 oder gRPC ohne TLS an den Container weitergeleitet.

Wenn Sie einen Cloud Run-Dienst für die End-to-End-Verwendung von HTTP/2 konfigurieren, muss Ihr Container Anfragen im HTTP/2-Klartextformat (h2c) verarbeiten, da TLS weiterhin von Cloud Run automatisch beendet wird.

Antworten

Ihre Containerinstanz muss innerhalb des in der Einstellung für die Zeitüberschreitung bei Anfragen angegebenen Zeitraums eine Antwort senden, einschließlich der Startzeit der Containerinstanz. Andernfalls wird die Anfrage beendet und der Fehler 504 wird ausgegeben.

Eine Containerinstanz wird beendet, wenn sie mehr als 20 aufeinanderfolgende 5xx-Antworten zurückgibt.

Umgebungsvariablen

Die folgenden Umgebungsvariablen werden den ausgeführten Containern automatisch hinzugefügt:

Name Beschreibung Beispiel
PORT Der Port, den Ihr HTTP-Server beobachten soll. 8080
K_SERVICE Der Name des ausgeführten Cloud Run-Dienstes. hello-world
K_REVISION Der Name der ausgeführten Cloud Run-Überarbeitung. hello-world.1
K_CONFIGURATION Der Name der Cloud Run-Konfiguration, mit der die Überarbeitung erstellt wurde. hello-world

Anforderungen an Anfrage- und Antwortheader

Headernamen sind auf druckbare ASCII-Zeichen ohne Leerzeichen beschränkt und dürfen keine Doppelpunkte enthalten. Headerwerte sind gemäß IETF RFC 7230 auf sichtbare ASCII-Zeichen plus Leerzeichen und horizontaler Tabulator beschränkt.

Dateisystemzugriff

Das Dateisystem Ihres Containers ist beschreibbar und unterliegt dem folgenden Verhalten:

  • Da es sich um ein speicherinternes Dateisystem handelt, wird beim Schreiben der Arbeitsspeicher der Containerinstanz verwendet.
  • In das Dateisystem geschriebene Daten gehen verloren, wenn die Containerinstanz beendet wird.

Lebenszyklus einer Containerinstanz

Als Reaktion auf eingehende Anfragen wird ein Dienst automatisch auf eine bestimmte Anzahl von Containerinstanzen hochskaliert, von denen jede das bereitgestellte Container-Image ausführt.

Wenn eine Überarbeitung keinen Traffic empfängt, wird sie auf die konfigurierte Mindestanzahl von Containerinstanzen herunterskaliert (standardmäßig null).

Starten

Die Containerinstanzen müssen vier Minuten lang nach dem Start eine Überwachung auf Anfragen ausführen. Während dieser Startzeit wird den Containerinstanzen CPU zugewiesen.

Anfragen werden an die Containerinstanz gesendet, sobald sie den konfigurierten Port überwacht.

Eine Anfrage, die auf den Start einer Containerinstanz wartet, wird maximal zehn Sekunden in einer Warteschlange aufbewahrt.

Anfrage verarbeiten

Die CPU wird immer zugewiesen, wenn die Containerinstanz mindestens eine Anfrage verarbeitet.

Inaktiv

Eine inaktive Containerinstanz ist eine, die keine Anfragen verarbeitet.

Die CPU, die einer inaktiven Containerinstanz zugewiesen wird, hängt von der konfigurierten CPU-Zuweisung ab.

Eine Containerinstanz ist nicht länger als 15 Minuten inaktiv, es sei denn, sie muss aufgrund der Konfigurationseinstellung für die Mindestzahl von Containerinstanzen inaktiv sein.

Erzwungene Beendigung

Eine Cloud Run-Containerinstanz, die das zulässige Arbeitsspeicherlimit überschreitet, wird beendet. Alle Anfragen, die noch auf der Containerinstanz verarbeitet werden, enden mit dem Fehler HTTP 500.

Herunterfahren

Bevor Sie eine Containerinstanz herunterfahren, sendet Cloud Run ein SIGTERM-Signal, das den Beginn eines Zeitraums von 10 Sekunden vor dem tatsächlichen Herunterfahren angibt. An diesem Punkt sendet Cloud Run ein SIGKILL-Signal. In diesem Zeitraum wird der Containerinstanz CPU zugewiesen und in Rechnung gestellt. Wenn die Containerinstanz das SIGTERM-Signal nicht einfängt, wird sie sofort heruntergefahren. (In den Codebeispielen erfahren Sie, wie Sie das SIGTERM-Signal einfangen.)

Containerinstanzressourcen

CPU

Jeder Cloud Run-Containerinstanz wird standardmäßig die vCPU zugewiesen, die konfiguriert wurde (Standard: 1)

Eine vCPU ist als Abstraktion einer zugrunde liegenden Hardware implementiert, um deren ungefähre CPU-Zeit für einen einzelnen Hardware-Hyper-Thread auf variablen CPU-Plattformen bereitzustellen. Die Containerinstanz kann auf mehreren Kernen gleichzeitig ausgeführt werden.

Sie können festlegen, dass CPUs immer während der Lebensdauer der Instanz oder nur während des Starts der Containerinstanz und der Anfrageverarbeitung zugewiesen werden. Weitere Informationen finden Sie unter CPU-Zuweisung.

Wenn Sie eine Reihe von Mindestinstanzen konfiguriert haben, unterliegen diese Instanzen auch der Konfiguration der CPU-Zuweisung.

Speicher

Jeder Cloud Run-Containerinstanz wird standardmäßig der konfigurierte Speicher zugewiesen (standardmäßig 512 MiB).

Typische Einsatzmöglichkeiten des Speichers:

  • Code in Speicher laden, um den Dienst auszuführen
  • In das Dateisystem schreiben
  • Zusätzliche Containerprozesse ausführen, z. B. einen Nginx-Server
  • Speicherinterne Caching-Systeme wie OpCache von PHP
  • Speichernutzung pro Anfrage

Gleichzeitigkeit

Jede Cloud Run-Containerinstanz ist standardmäßig auf Gleichzeitigkeit eingestellt, wobei jede Containerinstanz mehr als eine Anfrage gleichzeitig erhalten kann. Sie können dies ändern, indem Sie die Nebenläufigkeit festlegen.

Sandbox für Containerinstanzen

Wenn Sie die Ausführungsumgebung der ersten Generation verwenden, werden die Cloud Run-Containerinstanzen in der gVisor-Containerlaufzeit-Sandbox ausgeführt. Wie in der Referenz zur gVisor-syscall-Kompatibilität dokumentiert, werden einige Systemaufrufe möglicherweise von dieser Container-Sandbox nicht unterstützt.

Wenn Sie die Ausführungsumgebung der zweiten Generation verwenden, haben Sie eine vollständige Linux-Kompatibilität anstelle der von gVisor bereitgestellten Systemaufrufemulation.

Metadatenserver der Containerinstanz

Cloud Run-Containerinstanzen stellen einen Metadatenserver bereit, mit dem Sie Details zu Ihrer Containerinstanz abrufen können, z. B. Projekt-ID, Region, Instanz-ID oder Dienstkonten. Er kann auch verwendet werden, um Tokens für das Laufzeitdienstkonto zu generieren.

Sie können auf diese Daten vom Metadatenserver mit einfachen HTTP-Anfragen an den Endpunkt http://metadata.google.internal/ mit dem Header Metadata-Flavor: Google zugreifen. Es sind keine Clientbibliotheken erforderlich. Weitere Informationen finden Sie unter Metadaten abrufen.

In der folgenden Tabelle sind einige der verfügbaren Metadatenserver-Informationen aufgeführt:

Pfad Beschreibung
/computeMetadata/v1/project/project-id Projekt-ID des Projekts, zu dem der Cloud Run-Dienst gehört
/computeMetadata/v1/project/numeric-project-id Projektnummer des Projekts, zu dem der Cloud Run-Dienst gehört
/computeMetadata/v1/instance/region Region dieses Cloud Run-Dienstes; gibt projects/PROJECT-NUMBER/regions/REGION zurück
/computeMetadata/v1/instance/id Eindeutige Kennung der Containerinstanz (auch in Logs verfügbar).
/computeMetadata/v1/instance/service-accounts/default/token Generiert ein Token für das Laufzeitdienstkonto dieses Cloud Run-Dienstes. Der Cloud Run-Dienst-Agent wird zum Abrufen eines Tokens verwendet.

Cloud Run gibt keine Informationen darüber, in welcher Google Cloud-Zone die Containerinstanzen ausgeführt werden. Daher gibt das Metadatenattribut /computeMetadata/v1/instance/zone immer projects/PROJECT-NUMBER/zones/REGION-1 zurück.

Dateinamen

Im Container verwendete Dateinamen müssen UTF-8-kompatibel sein: entweder UTF-8 oder etwas, das sicher automatisch in UTF-8 konvertiert werden kann. Andernfalls wird das Container-Image möglicherweise nicht bereitgestellt. Diese Einschränkung gilt nur für Dateinamen: Die Zeichencodierung im Dateiinhalt ist nicht eingeschränkt.

Wenn Sie Dateinamen mit anderen Codierungen verwenden, müssen Sie diese Dateinamen vor der Bereitstellung in UTF-8 konvertieren.

Zeitlimits für ausgehende Anfragen

Bei Anfragen von Ihrem Container an die VPC kommt es nach zwei Minuten Inaktivität zu einer Zeitüberschreitung. Bei Anfragen von Ihrem Container an das Internet kommt es nach 20 Minuten Inaktivität zu einer Zeitüberschreitung.