Containerlaufzeitvertrag

Auf dieser Seite werden die wichtigsten Anforderungen und Verhaltensweisen von Containern in Knative-Bereitstellung 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. Knative Serving unterstützt speziell das Linux x86_64-ABI-Format.

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 Knative Serving so konfigurieren, dass Anfragen an den Port Ihrer Wahl gesendet werden.

In Knative Serving-Containerinstanzen entspricht der Wert der Umgebungsvariablen PORT immer dem Port, an den Anfragen gesendet werden. Der Standardwert ist 8080.

Verschlüsselung auf Transportebene (TLS)

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

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.

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 Knative Serving-Dienstes. hello-world
K_REVISION Der Name der ausgeführten Knative Serving-Überarbeitung. hello-world.1
K_CONFIGURATION Der Name der Knative Serving-Konfiguration, mit der die Überarbeitung erstellt wurde. hello-world

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 skaliert, 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.

Berechnung ist auf eine Anfrage beschränkt

Nach dem Start können Rechenvorgänge nur im Bereich einer Anfrage ausgeführt werden: Einer Containerinstanz ist keine CPU zugewiesen, wenn sie keine Anfrage verarbeitet.

Herunterfahren

Eine Containerinstanz kann jederzeit heruntergefahren werden.

Wenn eine Containerinstanz heruntergefahren werden muss, werden neue eingehende Anfragen an andere Instanzen weitergeleitet und die aktuell verarbeiteten Anfragen werden abgeschlossen. Die Containerinstanz erhält dann ein SIGTERM-Signal, das den Beginn einer Zeitspanne von 10 Sekunden angibt, bevor die Instanz heruntergefahren wird (mit einem SIGKILL-Signal). In diesem Zeitraum wird der Containerinstanz CPU zugewiesen und in Rechnung gestellt. Wenn die Containerinstanz das Signal SIGTERM nicht erfasst, wird sie sofort heruntergefahren.

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.

Containerinstanzressourcen

Die Ressourcenanforderungen für Ihre Containerinstanzen werden in den Knoten Ihres GKE-Clusters geplant. Jeder Knoten teilt die für Ihren GKE-Cluster verfügbaren Rechenressourcen.

Daher ist die Menge der für einen Knative Serving-Dienst verfügbaren Rechenressourcen nur durch die Menge der verfügbaren Ressourcen in diesem Knoten begrenzt. Weitere Informationen finden Sie unter Rechenressourcen für Anfragen.

Wenn Sie beispielsweise einem Container 512 MiB Speicher zuweisen und dieser Container in dem einzigen Pod innerhalb eines Knotens mit 8 GiB Arbeitsspeicher ausgeführt wird, kann der Container versuchen, mehr RAM zu nutzen.

CPU

Standardmäßig reserviert der Warteschlangen-Proxy-Sidecar 25 MilliCPU. Die Anzahl der vCPUs, die Ihre Knative Serving-Dienste nutzen können, ist nicht begrenzt. Der Ressourcenverbrauch des Warteschlangenproxys hängt von der Anzahl der Anfragen in der Warteschlange und der Größe der Anfragen ab.

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. Die vCPU wird nur während des Starts und der Anfrageverarbeitung der Containerinstanz zugewiesen. Andernfalls wird sie gedrosselt.

Wenn Sie einen anderen vCPU-Wert zuweisen möchten, lesen Sie die Dokumentation zum Zuordnen von CPU.

Speicher

Standardmäßig reserviert der Warteschlangen-Proxy-Sidecar keinen Arbeitsspeicher und es gibt keine Beschränkung für die Größe von Arbeitsspeicher, den Ihre Knative Serving-Dienste verwenden können. Bei Bedarf können Sie Speicherlimits für Ihre Knative Serving-Dienste konfigurieren. Weitere Informationen dazu, wie GKE Arbeitsspeicher verarbeitet, finden Sie unter Zuweisbare Arbeitsspeicher- und CPU-Ressourcen.

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
  • Speichernutzung pro Anfrage

Gleichzeitigkeit

Jede Knative Serving-Containerinstanz ist standardmäßig auf Gleichzeitigkeit eingestellt, wobei jede Containerinstanz mehr als eine Anfrage gleichzeitig erhalten kann. Sie können dies ändern und eine Gleichzeitigkeit festlegen.

Sandbox für Containerinstanzen

Knative Serving verwendet keine Container-Sandbox.

Metadatenserver der Containerinstanz

Knative Serving-Containerinstanzen stellen einen Metadatenserver bereit, mit dem Sie Details zu Ihrer Containerinstanz abrufen können, z. B. Projekt-ID, Region, Instanz-ID oder Dienstkonten.

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 dieses Knative Serving-Dienstes
/computeMetadata/v1/instance/region Region dieses Knative Serving-Dienstes
/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 Knative Serving-Dienstes