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:
- Cloud Run-Entwickler (
roles/run.developer) im Cloud Run-Dienst - Dienstkontonutzer (
roles/iam.serviceAccountUser) für die Dienstidentität - Artifact Registry-Leser (
roles/artifactregistry.reader) für das Artifact Registry-Repository des bereitgestellten Container-Images (falls zutreffend)
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
Console
Rufen Sie in der Google Cloud Console die Seite Dienste für Cloud Run auf:
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.
Suchen Sie das Formular Dienstskalierung (für einen neuen Dienst) oder das Formular Skalierung bearbeiten für einen vorhandenen Dienst.
Geben Sie im Feld Anzahl der Instanzen die Anzahl der Containerinstanzen für den Dienst an.
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
0an, um den Dienst zu deaktivieren. Geben Sie den Wertautoan, 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 FormatLOCATION-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
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
Aktualisieren Sie die Attribute
scalingModeundmanualInstanceCount: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:
manualfür die manuelle Skalierung oderautomaticfü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
0an, um den Dienst zu deaktivieren.
Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:
gcloud run services replace service.yaml
Der Befehl
gcloud run services replaceverwendet standardmäßig die Dateiservice.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
gcloudangemeldet sind, können Sie ein Zugriffstoken mitgcloud auth print-access-tokenabrufen. 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
0an, 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 einergoogle_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 FormatLOCATION-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
Rufen Sie in der Google Cloud Console die Seite Dienste für Cloud Run auf:
Klicken Sie auf den gewünschten Dienst, um den Bereich Dienstdetails zu öffnen.
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
Rufen Sie in der Google Cloud Console die Seite Dienste für Cloud Run auf:
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.
Suchen Sie das Formular Skalierung bearbeiten und wählen Sie Manuelle Skalierung aus.
Geben Sie im Feld Anzahl der Instanzen den Wert
0(null) ein.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
Laden Sie die YAML-Konfiguration Ihres Dienstes herunter:
gcloud run services describe SERVICE --format export > service.yaml
Setzen Sie das Attribut
manualInstanceCountauf 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.
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
gcloudangemeldet sind, können Sie ein Zugriffstoken mitgcloud auth print-access-tokenabrufen. 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 FormatLOCATION-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:
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.
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
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.comfür die Cloud Scheduler-Jobs verwendet. Sie können ein beliebiges Dienstkonto verwenden, das die Berechtigung zum Aktualisieren von Cloud Run-Diensten hat.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).