Manuelle Skalierung

Auf dieser Seite wird beschrieben, wie Sie Ihren Dienst manuell skalieren. Außerdem finden Sie hier eine Anleitung für einen häufigen Anwendungsfall: die Änderung der Anzahl der Instanzen basierend auf einem Zeitplan mit Cloud Scheduler-Jobs und der Cloud Run Admin API.

Übersicht

Mit der manuellen Skalierung können Sie eine bestimmte Anzahl von Instanzen festlegen, unabhängig von Traffic oder Nutzung und ohne dass eine erneute Bereitstellung erforderlich ist. So haben Sie die Möglichkeit, Ihre eigene Skalierungslogik mit einem externen System zu schreiben. Ein Beispiel finden Sie unter Zeitplanbasierte Skalierung.

Standardmäßig wird Cloud Run automatisch horizontal skaliert auf eine angegebene oder standardmäßige maximale Anzahl von Instanzen, je nach Traffic, CPU oder Ihren eigenen benutzerdefinierten Zielen für die CPU- oder Nebenläufigkeitsnutzung. In einigen Anwendungsfällen möchten Sie jedoch möglicherweise eine bestimmte Anzahl von Instanzen mithilfe der manuellen Skalierung festlegen.

Mindest- und Höchstanzahl von Instanzen auf Überarbeitungsebene und manuelle Skalierung

Wenn Sie Ihren Dienst auf manuelle Skalierung einstellen, werden alle Einstellungen für die Mindest- und Höchstanzahl von Instanzen auf Überarbeitungsebene ignoriert.

Trafficaufteilungen für die manuelle Skalierung

In der folgenden Liste wird beschrieben, wie Instanzen bei der Aufteilung des Traffics unter manueller Skalierung zugewiesen werden. Dazu gehört auch das Verhalten für Überarbeitungen, die nur Traffic-Tags enthalten.

  • Bei einer Trafficaufteilung werden jeder Überarbeitung Instanzen proportional zugewiesen, basierend auf der Trafficaufteilung, ähnlich wie bei der Trafficaufteilung mit Mindestanzahl von Instanzen auf Dienstebene.

  • Wenn die Anzahl der Überarbeitungen, die Traffic empfangen, die manuelle Anzahl von Instanzen übersteigt, haben einige Überarbeitungen keine Instanzen. Für Traffic, der an diese Überarbeitungen gesendet wird, wird derselbe Fehler angezeigt, als wären die Überarbeitungen deaktiviert.

  • Für alle Überarbeitungen, die Traffic in einer Trafficaufteilung empfangen, werden alle Mindest- und Höchstanzahl von Instanzen auf Überarbeitungsebene deaktiviert.

  • Wenn eine Überarbeitung aktiv nur aufgrund von Traffic-Tags ist:

    • Wenn die Mindestanzahl von Instanzen auf Überarbeitungsebene festgelegt ist, wird die angegebene Anzahl von Instanzen gestartet, wird aber nicht auf die manuelle Gesamtzahl der Instanzen des Dienstes angerechnet. Die Überarbeitung wird nicht automatisch skaliert.
    • Wenn die Mindestanzahl von Instanzen auf Überarbeitungsebene nicht festgelegt ist, wird die Überarbeitung auf maximal eine Instanz skaliert, als Reaktion auf Traffic, der an die Tag-URL gesendet wird.

Abrechnungsverhalten bei manueller Skalierung

Wenn Sie die manuelle Skalierung verwenden, ähnelt das Abrechnungsverhalten dem Verhalten, wenn Sie die Funktion für die Mindestanzahl von Instanzen verwenden.

Das heißt, bei manueller Skalierung und instanzbasierter Abrechnung, werden manuell skalierte inaktive Instanzen als aktive Instanzen abgerechnet.

Wenn Sie die manuelle Skalierung mit anfragebasierter Abrechnung, werden manuell skalierte inaktive Instanzen als inaktive Mindestanzahl von Instanzen abgerechnet. Ausführliche Informationen zur Abrechnung finden Sie auf der Preisseite.

Erforderliche Rollen

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

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 mit Google 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.

Manuelle Skalierung konfigurieren

Sie können den Skalierungsmodus über die Google Cloud Konsole, die Google Cloud CLI, eine YAML-Datei oder die API konfigurieren, wenn Sie einen Dienst erstellen oder eine Überarbeitung aktualisieren:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienste für Cloud Run auf:

    Zu Cloud Run

  2. Wenn Sie einen neuen Dienst konfigurieren, klicken Sie auf Container bereitstellen , um das Formular Dienst erstellen aufzurufen. Wenn Sie einen vorhandenen Dienst konfigurieren, klicken Sie auf den Dienst, um das Detailfeld aufzurufen, und dann oben rechts im Detailfeld auf das Stiftsymbol neben Skalierung.

  3. Suchen Sie das Formular Dienstskalierung (für einen neuen Dienst) oder das Formular Skalierung bearbeiten für einen vorhandenen Dienst.

    Image

    Geben Sie im Feld Anzahl der Instanzen die Anzahl der Containerinstanzen für den Dienst an.

  4. Klicken Sie für einen neuen Dienst auf Erstellen oder für einen vorhandenen Dienst auf Speichern.

gcloud

Verwenden Sie den Bereitstellungsbefehl, um die Skalierung für einen neuen Dienst anzugeben:

gcloud run deploy SERVICE \
    --scaling=INSTANCE_COUNT \
    --image IMAGE_URL

Ersetzen Sie Folgendes:

  • SERVICE: der Name Ihres Dienstes.
  • INSTANCE_COUNT: die Anzahl der Instanzen für den Dienst. Dadurch wird der Dienst auf manuelle Skalierung eingestellt. Geben Sie den Wert 0 an, um den Dienst zu deaktivieren. Geben Sie den Wert auto an, um das standardmäßige Autoscaling-Verhalten von Cloud Run zu verwenden.
  • IMAGE_URL: ein Verweis auf das Container-Image, zum Beispiel us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry, das Repository REPO_NAME muss bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Geben Sie die Skalierung für einen vorhandenen Dienst mit dem folgenden Aktualisierungsbefehl an:

gcloud run services update SERVICE \
   --scaling=INSTANCE_COUNT

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. Aktualisieren Sie die Attribute scalingMode und manualInstanceCount:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/scalingMode: MODE
      run.googleapis.com/manualInstanceCount: INSTANCE_COUNT

    Ersetzen Sie Folgendes:

    • SERVICE: der Name Ihres Cloud Run-Dienstes
    • MODE: manual für die manuelle Skalierung oder automatic für das standardmäßige Autoscaling-Verhalten von Cloud Run.
    • INSTANCE_COUNT: die Anzahl der Instanzen, die Sie für den Dienst manuell skalieren. Geben Sie den Wert 0 an, um den Dienst zu deaktivieren.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

    Der Befehl gcloud run services replace verwendet standardmäßig die Datei service.yaml, falls vorhanden.

REST API

Wenn Sie die Anzahl der Instanzen für einen bestimmten Dienst bei der manuellen Skalierung aktualisieren möchten, senden Sie eine PATCH HTTP-Anfrage an den Endpunkt service der Cloud Run Admin API.

Beispiel mit curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount

Ersetzen Sie Folgendes:

  • ACCESS_TOKEN: ein gültiges Zugriffstoken für ein Konto, das die IAM-Berechtigungen zum Aktualisieren eines Dienstes hat. Wenn Sie beispielsweise in gcloud angemeldet sind, können Sie ein Zugriffstoken mit gcloud auth print-access-token abrufen. Innerhalb einer Cloud Run-Containerinstanz können Sie ein Zugriffstoken über den Metadatenserver der Containerinstanz abrufen.
  • MANUAL_INSTANCE_COUNT: die Anzahl der Instanzen für den Dienst. Dadurch wird der Dienst auf manuelle Skalierung eingestellt. Geben Sie den Wert 0 an, um den Dienst zu deaktivieren.
  • SERVICE: der Name des Dienstes.
  • REGION: die Google Cloud Region, in der der Dienst bereitgestellt wird.
  • PROJECT_ID: die Google Cloud Projekt-ID.

Wenn Sie den Skalierungsmodus von manuell auf automatisch umstellen möchten, senden Sie eine PATCH Anfrage an den service Endpunkt der Cloud Run Admin API und legen Sie für das scalingMode Feld den Wert AUTOMATIC fest.

Führen Sie beispielsweise den folgenden curl-Befehl aus:

      curl -H "Content-Type: application/json" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -X PATCH \
      -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \
      https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount

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     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "INSTANCE_COUNT"
  }
}

Ersetzen Sie Folgendes:

  • SERVICE_NAME: der Name Ihres Cloud Run-Dienstes.
  • REGION: die Google Cloud Region. Beispiel: europe-west1.
  • IMAGE_URL: ein Verweis auf das Container-Image, zum Beispiel us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry, das Repository REPO_NAME muss bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • INSTANCE_COUNT: die Anzahl der Instanzen, die Sie für den Dienst manuell skalieren. Diese Anzahl von Instanzen wird auf alle Überarbeitungen mit angegebenem Traffic aufgeteilt, basierend auf dem Prozentsatz des Traffics, den sie empfangen.

Skalierungskonfiguration für Ihren Dienst ansehen

So rufen Sie die Skalierungskonfigurationsinstanzen für Ihren Cloud Run-Dienst auf:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienste für Cloud Run auf:

    Zu Cloud Run

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

  3. Die aktuelle Skalierungseinstellung wird oben rechts im Bereich mit den Dienstdetails nach dem Label Skalierung neben dem Stiftsymbol angezeigt.

gcloud

Verwenden Sie den folgenden Befehl, um die aktuelle Skalierungskonfiguration für den Dienst aufzurufen:

gcloud run services describe SERVICE

Ersetzen Sie SERVICE durch den Namen Ihres Dienstes.

Suchen Sie oben im Text, der von describe zurückgegeben wird, nach dem Feld Scaling: Manual (Instances: ).

YAML

Verwenden Sie den folgenden Befehl, um die YAML-Konfiguration des Dienstes herunterzuladen:

gcloud run services describe SERVICE --format export > service.yaml

Die Skalierungskonfiguration ist in den scalingMode und manualInstanceCount Attributen enthalten.

Dienst deaktivieren

Wenn Sie einen Dienst deaktivieren, werden alle aktuell verarbeiteten Anfragen abgeschlossen. Alle weiteren Anfragen an die Dienst-URL schlagen jedoch mit dem Fehler Service unavailable oder Service disabled fehl.

Anfragen an Dienstüberarbeitungen, die nur aufgrund von Traffic-Tags aktiv sind, sind nicht betroffen, da diese Überarbeitungen nicht deaktiviert werden.

Um einen Dienst zu deaktivieren, setzen Sie die Skalierung auf null. Sie können einen Dienst über die Google Cloud Console, die Google Cloud CLI, eine YAML-Datei oder die API deaktivieren:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienste für Cloud Run auf:

    Zu Cloud Run

  2. Klicken Sie auf den Dienst, den Sie deaktivieren möchten, um das Detailfeld aufzurufen, und dann oben rechts im Detailfeld auf das Stiftsymbol neben Skalierung.

  3. Suchen Sie das Formular Skalierung bearbeiten und wählen Sie Manuelle Skalierung aus.

    Image

    Geben Sie im Feld Anzahl der Instanzen den Wert 0 (null) ein.

  4. Klicken Sie auf Speichern.

gcloud

Verwenden Sie den folgenden Befehl, um einen Dienst zu deaktivieren und die Skalierung auf null zu setzen:

gcloud run services update SERVICE --scaling=0

Ersetzen Sie SERVICE durch den Namen Ihres Dienstes.

YAML

  1. Laden Sie die YAML-Konfiguration Ihres Dienstes herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Setzen Sie das Attribut manualInstanceCount auf null (0):

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/scalingMode: manual
      run.googleapis.com/manualInstanceCount: `0`

    Ersetzen Sie SERVICE durch den Namen Ihres Cloud Run-Dienstes.

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

    gcloud run services replace service.yaml

REST API

Senden Sie zum Deaktivieren eines Dienstes eine PATCH-HTTP-Anfrage an den Endpunkt service der Cloud Run Admin API.

Beispiel mit curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"scaling":{"manualInstanceCount":0 }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount

Ersetzen Sie Folgendes:

  • ACCESS_TOKEN: ein gültiges Zugriffstoken für ein Konto, das die IAM-Berechtigungen zum Aktualisieren eines Dienstes hat. Wenn Sie beispielsweise in gcloud angemeldet sind, können Sie ein Zugriffstoken mit gcloud auth print-access-token abrufen. Innerhalb einer Cloud Run-Containerinstanz können Sie ein Zugriffstoken über den Metadatenserver der Containerinstanz abrufen.
  • SERVICE: der Name des Dienstes.
  • REGION: die Google Cloud Region, in der der Dienst bereitgestellt wird.
  • PROJECT_ID: die Google Cloud Projekt-ID.

Terraform

Um einen Dienst zu deaktivieren, setzen Sie das Attribut manual_instance_count auf null (0):

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "0"
  }
}

Ersetzen Sie Folgendes:

  • SERVICE_NAME: der Name Ihres Cloud Run-Dienstes.
  • REGION: die Google Cloud Region. Beispiel: europe-west1.
  • IMAGE_URL: ein Verweis auf das Container-Image, zum Beispiel us-docker.pkg.dev/cloudrun/container/hello:latest. Wenn Sie Artifact Registry, das Repository REPO_NAME muss bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

Beispiel für zeitplanbasierte Skalierung

Ein häufiger Anwendungsfall der manuellen Skalierung ist die Änderung der Anzahl der Instanzen basierend auf einem vordefinierten Zeitplan. In diesem Beispiel verwenden wir Cloud Scheduler, um zwei Jobs zu planen, die jeweils die Cloud Run Admin API aufrufen, um die Anzahl der Instanzen zu skalieren. Der erste Cloud Scheduler-Job legt fest, dass der Dienst während der Öffnungszeiten (9:00 bis 17:00 Uhr, Montag bis Freitag) manuell auf eine bestimmte Anzahl von Instanzen skaliert wird. Der zweite Job legt fest, dass der Dienst außerhalb der Geschäftszeiten auf eine bestimmte Anzahl von Instanzen herunterskaliert wird.

In diesem Beispiel verwenden wir die Cloud Run-Kurzanleitung um es einfach zu halten. Sie können aber einen beliebigen Dienst verwenden.

So richten Sie die zeitplanbasierte manuelle Skalierung ein:

  1. Stellen Sie Ihren Dienst mit dem folgenden Befehl bereit:

    gcloud run deploy SERVICE \
       --image=us-docker.pkg.dev/cloudrun/container/hello \
       --region=REGION \
       --project PROJECT_ID

    Ersetzen Sie Folgendes:

    • SERVICE: der Name des Cloud Run-Dienstes.
    • REGION: die Region, in der der Cloud Run-Dienst bereitgestellt wird.
    • PROJECT_ID: die Google Cloud Projekt-ID.
  2. Konfigurieren Sie Ihren Dienst mit dem folgenden Befehl für die manuelle Skalierung auf 10 Instanzen:

    gcloud run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Erstellen Sie einen Cloud Scheduler-Job, der während der Geschäftszeiten manuell auf eine bestimmte Anzahl von Dienstinstanzen skaliert:

    gcloud scheduler jobs create http hello-start-instances \
      --location=REGION \
      --schedule="0 9 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Ersetzen Sie Folgendes:

    • REGION: die Region, in der der Cloud Run-Dienst bereitgestellt wird.
    • PROJECT_ID: die Google Cloud Projekt-ID.
    • INSTANCE_COUNT: die Anzahl der Instanzen, auf die Sie skalieren möchten, z. B. 10.
    • PROJECT_NUMBER: die Google Cloud Projektnummer.

    Mit diesem Befehl wird ein Cloud Scheduler-Job erstellt, der einen HTTP-Aufruf an die Cloud Run Admin API sendet und die Anzahl der Instanzen auf die von Ihnen angegebene Anzahl festlegt. Im Beispiel wird das Compute Engine-Standarddienstkonto PROJECT_NUMBER-compute@developer.gserviceaccount.com für die Cloud Scheduler-Jobs verwendet. Sie können ein beliebiges Dienstkonto verwenden, das die Berechtigung zum Aktualisieren von Cloud Run-Diensten hat.

  4. Erstellen Sie einen Cloud Scheduler-Job, der Dienstinstanzen außerhalb der Geschäftszeiten manuell herunterskaliert:

    gcloud scheduler jobs create http hello-stop-instances \
      --location=REGION \
      --schedule="0 17 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"scaling":{"manualInstanceCount":INSTANCE_COUNT}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Ersetzen Sie Folgendes:

    • REGION: die Region, in der der Cloud Run-Dienst bereitgestellt wird.
    • PROJECT_ID: die Google Cloud Projekt-ID.
    • INSTANCE_COUNT: die Anzahl der Instanzen, auf die Sie skalieren möchten. Setzen Sie diesen Wert auf 0, um den Dienst zu deaktivieren.
    • PROJECT_NUMBER: die Google Cloud Projektnummer.

    Mit diesem Befehl wird ein Cloud Scheduler-Job erstellt, der einen HTTP-Aufruf an die Cloud Run Admin API sendet und die Anzahl der manuell skalierten Instanzen auf die von Ihnen angegebene Anzahl festlegt. Wenn Sie die Anzahl der Instanzen auf null setzen, wird der Dienst zwar deaktiviert, die Cloud Scheduler-Jobs jedoch nicht. Diese Jobs werden weiterhin ausgeführt und setzen den Dienst wie geplant auf eine höhere Anzahl von Instanzen zurück (und aktivieren ihn wieder).