Mit der manuellen Skalierung können Sie eine bestimmte Anzahl von Instanzen für Ihren Cloud Run-Dienst festlegen, unabhängig von Traffic oder Auslastung und ohne erneute Bereitstellung. Sie können damit auch Ihre eigene Skalierungslogik aus einem externen System implementieren, z. B. die Instanzanzahl nach einem Zeitplan ändern. Ein Beispiel finden Sie unter Zeitplanbasierte Skalierung.
Standardmäßig wird Cloud Run automatisch horizontal skaliert, und zwar auf eine angegebene oder standardmäßige maximale Anzahl von Instanzen, basierend auf Traffic, CPU oder Ihren eigenen benutzerdefinierten CPU- oder Gleichzeitigkeitsauslastungszielen. Die manuelle Skalierung überschreibt dieses Verhalten, wenn Sie eine feste Anzahl von Instanzen benötigen.
Mindest- und Höchsteinstellungen auf Überarbeitungsebene und manuelle Skalierung
Wenn Sie Ihren Dienst auf manuelle Skalierung festlegen, 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 zugewiesen werden, wenn der Traffic bei manueller Skalierung aufgeteilt wird. Dazu gehört auch das Verhalten bei Überarbeitungen, die nur Traffic-Tags betreffen.
Bei einer Trafficaufteilung werden jeder Version Instanzen proportional zugewiesen, basierend auf der Trafficaufteilung, ähnlich wie bei der Aufteilung des Traffics mit einer Mindestanzahl von Instanzen auf Dienstebene.
Wenn die Anzahl der Versionen, die Traffic empfangen, die Anzahl der manuellen Instanzen überschreitet, haben einige Versionen keine Instanzen. Traffic, der an diese Versionen gesendet wird, erhält denselben Fehler, als wären die Versionen deaktiviert.
Für alle Versionen, die Traffic in einer Aufteilung des Traffics erhalten, werden alle Mindest- und Höchstwerte für Instanzen auf Versionsebene deaktiviert.
Wenn eine Version nur aufgrund von Traffic-Tags aktiv ist:
- Wenn die Mindestanzahl von Instanzen auf Versionsebene festgelegt ist, wird die angegebene Anzahl von Instanzen gestartet, aber nicht auf die Gesamtzahl der manuellen Instanzen des Dienstes angerechnet. Die Version wird nicht automatisch skaliert.
- Wenn die Mindestanzahl von Instanzen auf Überarbeitungsebene nicht festgelegt ist, wird die Überarbeitung als Reaktion auf Traffic, der an die Tag-URL gesendet wird, auf maximal eine Instanz horizontal skaliert.
Abrechnungsverhalten bei manueller Skalierung
Wenn Sie die manuelle Skalierung verwenden, ist das Abrechnungsverhalten ähnlich wie bei der Verwendung der Funktion Mindestanzahl von Instanzen.
Das bedeutet, dass bei manueller Skalierung und instanzbasierter Abrechnung manuell skalierte inaktive Instanzen als aktive Instanzen abgerechnet werden.
Wenn Sie die manuelle Skalierung mit anfragebasierter Abrechnung verwenden, werden manuell skalierte inaktive Instanzen als inaktive Mindestinstanzen abgerechnet. Vollständige Abrechnungsdetails 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) für den 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 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.
Manuelle Skalierung konfigurieren
Sie können den Skalierungsmodus mit der Google Cloud Console, der Google Cloud CLI, einer YAML-Datei oder der API konfigurieren, wenn Sie einen Dienst erstellen oder eine Überarbeitung aktualisieren:
Console
Rufen Sie in der Google Cloud Console Cloud Run auf:
Wählen Sie im Cloud Run-Navigationsmenü die Option Dienste aus:
Wenn Sie einen neuen Dienst konfigurieren, klicken Sie auf Container bereitstellen und füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus.
Wenn Sie einen vorhandenen Dienst konfigurieren, klicken Sie auf den Dienst und dann auf den Tab Skalierung.
Klicken Sie auf Manuelle Skalierung.
Geben Sie im Feld Anzahl der Instanzen die Anzahl der Containerinstanzen für den Dienst an.
Klicken Sie auf Erstellen, um einen neuen Dienst zu erstellen. Klicken Sie auf Unterschied ansehen und erneut bereitstellen und dann auf Änderungen bereitstellen, um einen vorhandenen Dienst zu aktualisieren.
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 festgelegt. Geben Sie den Wert
0an, um den Dienst zu deaktivieren. Geben Sie den Wertautoan, um das Standardverhalten für das Autoscaling von Cloud Run zu verwenden. IMAGE_URL: ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME 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 manuell für den Dienst 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.
Verwenden Sie zum Beispiel 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 festgelegt. Geben Sie den Wert
0an, um den Dienst zu deaktivieren. - SERVICE ist der Name des Diensts.
- REGION: die Google Cloud -Region, in der der Dienst bereitgestellt wird.
- PROJECT_ID: die Projekt-ID in Google Cloud .
Wenn Sie den Skalierungsmodus von manuell auf automatisch umstellen möchten, senden Sie eine PATCH-Anfrage an den Endpunkt service der Cloud Run Admin API und setzen Sie das Feld scalingMode auf AUTOMATIC.
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, z. B.us-docker.pkg.dev/cloudrun/container/hello:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME 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 manuell für den Dienst skalieren. Diese Anzahl von Instanzen wird auf alle Versionen mit angegebenem Traffic aufgeteilt, basierend auf dem Prozentsatz des Traffics, den sie erhalten.
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 Cloud Run-Dienste auf:
Klicken Sie auf den gewünschten Dienst, um den Bereich Dienstdetails zu öffnen.
Klicken Sie auf den Tab Skalierung, um die Skalierungseinstellungen aufzurufen.
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 im oberen Bereich des von describe zurückgegebenen Texts 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 Attributen scalingMode und manualInstanceCount 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 Dienstversionen, die nur aufgrund von Traffic-Tags aktiv sind, sind nicht betroffen, da diese Versionen nicht deaktiviert werden.
Wenn Sie einen Dienst deaktivieren möchten, legen Sie die Skalierung auf null fest. 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 Cloud Run-Dienste auf:
Klicken Sie auf den Dienst, den Sie deaktivieren möchten, um das Detailfeld aufzurufen, und dann auf den Tab Skalierung.
Wählen Sie Manuelle Skalierung aus.
Geben Sie den Wert
0(null) in das Feld Anzahl der Instanzen ein.Klicken Sie auf Unterschiede ansehen und bereitstellen und dann auf Änderungen bereitstellen.
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.
Verwenden Sie zum Beispiel 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 ist der Name des Diensts.
- REGION: die Google Cloud -Region, in der der Dienst bereitgestellt wird.
- PROJECT_ID: die Projekt-ID in Google Cloud .
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, z. B.us-docker.pkg.dev/cloudrun/container/hello:latestWenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME 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 für die manuelle Skalierung ist die Änderung der Instanzanzahl nach 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. Mit dem ersten Cloud Scheduler-Job wird der Dienst so konfiguriert, dass er während der Geschäftszeiten (Mo–Fr, 9:00–17:00 Uhr) manuell auf eine bestimmte Anzahl von Instanzen skaliert wird. Mit dem zweiten Job wird der Dienst so konfiguriert, dass er außerhalb der Arbeitszeiten auf eine bestimmte Anzahl von Instanzen herunterskaliert wird.
In diesem Beispiel verwenden wir der Einfachheit halber die Cloud Run-Kurzanleitung. Sie können aber auch einen Dienst Ihrer Wahl verwenden.
So richten Sie die zeitplanbasierte manuelle Skalierung ein:
Stellen Sie den 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 Projekt-ID in Google Cloud .
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@
Ersetzen Sie Folgendes:
- REGION: die Region, in der der Cloud Run-Dienst bereitgestellt wird.
- PROJECT_ID: die Projekt-ID in Google Cloud .
- INSTANCE_COUNT: die Anzahl der Instanzen, auf die Sie skalieren möchten, z. B.
10. - PROJECT_NUMBER: die Projektnummer von Google Cloud .
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@für die Cloud Scheduler-Jobs verwendet. Sie können jedes 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@
Ersetzen Sie Folgendes:
- REGION: die Region, in der der Cloud Run-Dienst bereitgestellt wird.
- PROJECT_ID: die Projekt-ID in Google Cloud .
- INSTANCE_COUNT: die Anzahl der Instanzen, auf die Sie skalieren möchten.
Wenn Sie den Dienst deaktivieren möchten, legen Sie hier
0fest. - PROJECT_NUMBER: die Projektnummer von Google Cloud .
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 für die manuelle Skalierung auf die von Ihnen angegebene Anzahl festlegt. Wenn Sie die Anzahl der Instanzen auf null setzen, wird der Dienst deaktiviert, die Cloud Scheduler-Jobs jedoch nicht. Diese Jobs werden weiterhin ausgeführt und setzen den Dienst wie geplant auf eine erhöhte Anzahl von Instanzen zurück (und aktivieren ihn wieder).