Ausführungsumgebung für Dienste auswählen

Alle Cloud Run-Instanzen werden in einer Sandbox ausgeführt. Die Sandboxing-Technologie und die verfügbaren Funktionen hängen von der ausgewählten Ausführungsumgebung ab.

Die Ausführungsumgebung der ersten Generation basiert auf gVisor und bietet schnelle Kaltstartzeiten und die meisten Emulationen der meisten, aber nicht aller Betriebssystemaufrufe.

Die Ausführungsumgebung der zweiten Generation ist eine Mikro-VM und bietet vollständige Linux-Kompatibilität anstelle einer Systemaufrufemulation. 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 einige Dienste auch längere Kaltstartzeiten als die erste Generation.

Für beide Ausführungsumgebungen gelten dieselben Preise. Weitere Informationen finden Sie auf der Cloud Run-Preisseite.

Ausführungsumgebung für einen Cloud Run-Dienst auswählen

Für Cloud Run-Dienste ist standardmäßig keine Ausführungsumgebung angegeben. Das bedeutet, dass Cloud Run die Ausführungsumgebung anhand der verwendeten Features auswählt. Wenn Sie keine Ausführungsumgebung für Ihren Dienst angeben, kann Cloud Run entweder die Umgebung der ersten Generation oder die zweite Generation auswählen.

Cloud Run-Jobs und Worker-Pools verwenden nur die Ausführungsumgebung der zweiten Generation. Dies kann nicht geändert werden.

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 NFS 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 verwendet ausgehenden Direct VPC-Traffic, um Traffic an ein VPC-Netzwerk zu senden, und erfordert die bestmögliche Netzwerkleistung.
  • 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 eines Drittanbieters zur Sicherung von Containern.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren und Bereitstellen von Cloud Run-Diensten benötigen:

Wenn Sie einen Dienst oder eine Funktion aus Quellcode bereitstellen, müssen Sie auch zusätzliche Rollen für Ihr Projekt und Ihr Cloud Build-Dienstkonto haben.

Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Dienst mitGoogle Cloud -APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.

Ausführungsumgebung festlegen und aktualisieren

Jede Konfigurationsänderung führt zur Erstellung einer neuen Überarbeitung. Für nachfolgende Überarbeitungen gilt automatisch dieselbe Konfigurationseinstellung, sofern Sie sie nicht explizit aktualisieren.

Der Standard für Cloud Run-Dienste ist nicht angegeben. Das bedeutet, dass Cloud Run eine geeignete Ausführungsumgebung auswählt. Alternativ können Sie eine Ausführungsumgebung angeben. Zur Verwendung der zweiten Generation müssen Sie mindestens 512 MiB Arbeitsspeicher angeben.

Sie können die Ausführungsumgebung über die Google Cloud Console, die gcloud-Befehlszeile oder eine YAML-Datei festlegen, wenn Sie einen neuen Dienst erstellen oder eine neue Überarbeitung bereitstellen:

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf:

    Zu Cloud Run

  2. Wählen Sie im Cloud Run-Navigationsmenü Dienste aus und klicken Sie auf Container bereitstellen, um einen neuen Dienst zu konfigurieren. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Wenn Sie einen neuen Dienst konfigurieren, füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus und klicken Sie dann auf Container, Volumes, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  4. Klicken Sie auf den Tab Container.

    Bild

    • Wählen Sie die gewünschte Ausführungsumgebung mit den Optionsschaltflächen aus. Behalten Sie die Standardeinstellung bei, damit Cloud Run eine geeignete Ausführungsumgebung auswählen kann.
  5. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

Mit dem folgenden Befehl können Sie die Ausführungsumgebung für einen bestimmten Dienst aktualisieren:

gcloud run services update SERVICE --execution-environment ENVIRONMENT

Ersetzen Sie SERVICE durch den Namen Ihres Dienstes und ENVIRONMENT durch die gewünschte Ausführungsumgebung. Geben Sie den Wert gen1 für die erste Generation oder gen2 für die zweite Generation an.

Sie können die Ausführungsumgebung auch während der Bereitstellung mit dem folgenden Befehl festlegen:

gcloud run deploy --image IMAGE_URL --execution-environment ENVIRONMENT

Ersetzen Sie Folgendes:

  • IMAGE_URL: ein 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 das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • ENVIRONMENT: die gewünschte Ausführungsumgebung. Geben Sie den Wert gen1 für die erste Generation oder gen2 für die zweite Generation an.

YAML

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Legen Sie die Annotation run.googleapis.com/execution-environment fest:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: ENVIRONMENT

    Ersetzen Sie Folgendes:

    • SERVICE: Der Name Ihres Cloud Run-Dienstes.
    • ENVIRONMENT: die ausgewählte Ausführungsumgebung. Geben Sie den Wert gen1 für die erste Generation oder gen2 für die zweite Generation an.

    Entfernen Sie die Annotation run.googleapis.com/execution-environment für das Standardverhalten.

  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Fügen Sie einer google_cloud_run_v2_service-Ressource in Ihrer Terraform-Konfiguration Folgendes hinzu:
resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-execution-environment"
  location = "REGION"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    execution_environment = "ENVIRONMENT"
  }
}

Ersetzen Sie Folgendes:

  • REGION: die Google Cloud Region. Beispiel: europe-west1.
  • ENVIRONMENT: EXECUTION_ENVIRONMENT_GEN1 für die erste Generation oder EXECUTION_ENVIRONMENT_GEN2 für die zweite Generation.

Einstellungen für die Ausführungsumgebung aufrufen

So rufen Sie die aktuellen Einstellungen der Ausführungsumgebung für Ihren Cloud Run-Dienst auf:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Run-Dienste auf:

    Zu Cloud Run

  2. Klicken Sie auf den gewünschten Dienst, um die Seite Dienstdetails zu öffnen.

  3. Klicken Sie auf den Tab Überarbeitungen.

  4. Im Detailbereich rechts wird die Einstellung der Ausführungsumgebung auf dem Tab Container aufgeführt.

gcloud

  1. Verwenden Sie den folgenden Befehl:

    gcloud run services describe SERVICE
  2. Suchen Sie in der zurückgegebenen Konfiguration die Einstellung für die Ausführungsumgebung.

Ordnungsgemäßes Herunterfahren

Wenn eine Cloud Run-Instanz heruntergefahren wird, erhält sie ein SIGTERM-Signal, das ein ordnungsgemäßes Herunterfahren innerhalb von 10 Sekunden ermöglicht.

SIGTERM-Signal verarbeiten

Wir empfehlen, in Ihrem Container einen SIGTERM-Handler zu installieren, insbesondere wenn Sie die anfragebasierte Abrechnung 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 trotzdem 10 Sekunden Zeit, diese Aufgaben auszuführen. Diese 10 Sekunden werden in Rechnung gestellt.

Prüfen, 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 auch 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 das Format LOCATION-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 vom Befehl zurückgegebene Container-ID ermitteln.

  4. Mit der Container-ID ein SIGTERM-Signal an den Container senden

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

Verarbeiten von SIGTERM

Wenn Ihr Container SIGTERM nicht verarbeitet, können Sie am einfachsten einen SIGTERM-Handler hinzufügen, indem Sie Ihren Dienst in tini einschließen. Auf diese Weise wird der Dienst als Unterprozess von tini ausgeführt, was die Rolle des Container-init-Prozesses übernimmt. Weitere Informationen finden Sie in der Docker-Anleitung.

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

Nächste Schritte