Auf dieser Seite wird beschrieben, wie Sie Ihren Dienst manuell skalieren. Außerdem finden Sie eine Anleitung für einen gängigen Anwendungsfall, bei dem die Anzahl der Instanzen basierend auf einem Zeitplan mithilfe von Cloud Scheduler-Jobs und der Cloud Run Admin API geändert wird.
Übersicht
Standardmäßig wird Cloud Run automatisch skaliert, je nach Traffic und CPU-Auslastung auf eine angegebene oder standardmäßige maximale Anzahl von Instanzen. Bei einigen Anwendungsfällen kann es jedoch sinnvoll sein, eine bestimmte Anzahl von Instanzen mithilfe des manuellen Scalings festzulegen.
Bei der manuellen Skalierung können Sie unabhängig von Traffic oder Auslastung eine bestimmte Anzahl von Instanzen festlegen, ohne dass eine Neubereitstellung erforderlich ist. So haben Sie die Möglichkeit, Ihre eigene Skalierungslogik mit einem externen System zu erstellen. Ein Beispiel hierfür finden Sie unter Zeitplanbasierte Skalierung.
Zwischen automatischer und manueller Skalierung wechseln
Das Wechseln des Skalierungsmodus wirkt sich auf die Anzahl der Instanzen und die Einstellungen für die Mindestanzahl auf Dienstebene und die maximale Anzahl von Instanzen aus, wie in der folgenden Tabelle dargestellt:
Richtung des Skalierungsschalters | Anzahl der Instanzen | Mindest- und Höchstzahl von Instanzen |
---|---|---|
Von automatischer zu manueller Auslieferung | Wenn die Anzahl der Instanzen im Befehl, mit dem der Modus gewechselt wird, nicht angegeben ist, wird die Einstellung Mindestinstanzen auf Dienstebene übernommen. | Nach der Umstellung werden die Mindest- und Höchstanzahl von Instanzen auf Dienstebene zurückgesetzt. |
Von manuell zu automatisch | Die manuelle Anzahl von Instanzen ist nicht festgelegt. | Sie müssen entweder sowohl die Mindest- als auch die Höchstanzahl der Instanzen auf Dienstebene angeben oder keinesfalls beides. Wenn Sie nur eine angeben, wird ein Fehler zurückgegeben. Wenn Sie keines dieser beiden im Befehl angeben, mit dem der Modus gewechselt wird, wird die manuelle Anzahl von Instanzen auf die Mindest- und Höchstinstanzen auf Dienstebene angewendet. |
Mindest- und Höchsteinstellungen auf Überarbeitungsebene und manuelle Skalierung
Wenn Sie für Ihren Dienst die manuelle Skalierung festlegen, werden alle Einstellungen für die Mindestanzahl und die maximale Anzahl von Instanzen auf Überarbeitungsebene ignoriert.
Trafficaufteilungen für die manuelle Skalierung
In der folgenden Liste wird beschrieben, wie Instanzen bei der Aufteilung des Traffics bei manueller Skalierung zugewiesen werden. Das gilt auch für das Verhalten von Überarbeitungen, die nur ein Traffic-Tag enthalten.
Bei einer Trafficaufteilung werden jeder Überarbeitung proportional zur Trafficaufteilung Instanzen zugewiesen, ähnlich wie bei der Trafficaufteilung mit Mindestanzahl von Instanzen auf Dienstebene.
Wenn die Anzahl der Versionen, die Zugriffe erhalten, die Anzahl der manuellen Instanzen überschreitet, haben einige Versionen keine Instanzen. Für Traffic, der an diese Versionen gesendet wird, wird derselbe Fehler ausgegeben, als wären die Versionen deaktiviert.
Für alle Überarbeitungen, die Traffic in einer Trafficaufteilung erhalten, sind die Mindest- und Höchstanzahl von Instanzen auf Überarbeitungsebene 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, sie wird aber nicht auf die Gesamtzahl der manuellen Instanzen des Dienstes angerechnet. Die Überarbeitung wird nicht automatisch skaliert.
- Wenn keine Mindestanzahl von Instanzen auf Überarbeitungsebene festgelegt ist, wird die Überarbeitung als Reaktion auf Traffic, der an die Tag-URL gesendet wird, auf höchstens eine Instanz hochskaliert.
Abrechnungsverhalten bei manueller Skalierung
Bei der manuellen Skalierung ähnelt das Abrechnungsverhalten dem bei der Verwendung der Funktion Mindestinstanzen.
Bei manueller Skalierung und instanzbasierter Abrechnung werden inaktiv gelassene Instanzen, die manuell skaliert wurden, als aktive Instanzen abgerechnet.
Wenn Sie die manuelle Skalierung mit der anfragebasierten Abrechnung verwenden, werden inaktive Instanzen mit manueller Skalierung als inaktive Mindestinstanzen abgerechnet. Vollständige Informationen zur Abrechnung finden Sie auf der Preisseite.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Bereitstellen von Cloud Run-Diensten benötigen:
-
Rolle Cloud Run Entwickler (
roles/run.developer
) im Cloud Run-Job -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für die Dienstidentität -
Artifact Registry Reader (
roles/artifactregistry.reader
) im 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.
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 aktualisieren:
Console
Rufen Sie in der Google Cloud Console Cloud Run auf:
Wenn Sie einen neuen Dienst konfigurieren, klicken Sie auf Container bereitstellen und wählen Sie Dienst aus, 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 Dienst skalieren (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 Befehl deploy, um die Skalierung für einen neuen Dienst anzugeben:
gcloud beta run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Ersetzen Sie Folgendes:
- SERVICE durch den Namen des Dienstes.
- INSTANCE_COUNT mit der Anzahl der Instanzen für den Dienst.
Dadurch wird die manuelle Skalierung für den Dienst festgelegt. Geben Sie den Wert
0
an, um den Dienst zu deaktivieren. Geben Sie den Wertauto
an, um das standardmäßige Cloud Run-Verhalten für die automatische Skalierung zu verwenden. - 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 die FormLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
Mit dem folgenden update-Befehl können Sie die Skalierung für einen vorhandenen Dienst angeben:
gcloud beta 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
scalingMode
undmanualInstanceCount
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
Ersetzen Sie Folgendes:
- SERVICE durch den Namen Ihres Cloud Run-Dienstes
- MODE mit
manual
für die manuelle Skalierung oderautomatic
für das standardmäßige Autoscaling-Verhalten von Cloud Run. - INSTANCE_COUNT mit der Anzahl der Instanzen, die Sie für den Dienst manuell skalieren. Geben Sie den Wert
0
an, um den Dienst zu deaktivieren.
Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:
gcloud run services replace service.yaml
REST API
Wenn Sie die Mindestanzahl der Instanzen auf Dienstebene für einen bestimmten Dienst 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 '{"launchStage":"BETA","scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount
Ersetzen Sie:
- ACCESS_TOKEN durch 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 mitgcloud auth print-access-token
abrufen. Innerhalb einer Cloud Run-Containerinstanz können Sie ein Zugriffstoken über den Metadatenserver der Containerinstanz abrufen. - MANUAL_INSTANCE_COUNT mit der Anzahl der Instanzen für den Dienst.
Dadurch wird die manuelle Skalierung für den Dienst festgelegt. Geben Sie den Wert
0
an, um den Dienst zu deaktivieren. - SERVICE durch den Namen des Dienstes.
- REGION durch die Region Google Cloud , in der der Dienst bereitgestellt wird.
- PROJECT_ID durch die Google Cloud Projekt-ID.
Skalierungskonfiguration für Ihren Dienst aufrufen
So rufen Sie die Instanzen der Skalierungskonfiguration für Ihren Cloud Run-Dienst auf:
Console
Rufen Sie in der Google Cloud Console 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 beta 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
Mit dem folgenden Befehl laden Sie die YAML-Konfiguration des Dienstes herunter:
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 Anfragen, die derzeit verarbeitet werden, abgeschlossen.
Alle weiteren Anfragen an die Dienst-URL schlagen jedoch mit dem Fehler Service unavailable
oder Service disabled
fehl.
Anfragen an Überarbeitungen, die nur aufgrund von Traffic-Tags aktiv sind, sind nicht betroffen, da diese Überarbeitungen nicht deaktiviert sind.
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 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 in das Feld Anzahl der Instanzen den Wert
0
(null) ein.Klicken Sie auf Speichern.
gcloud
Wenn Sie einen Dienst deaktivieren möchten, setzen Sie die Skalierung mit dem folgenden Befehl auf null:
gcloud beta 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
Legen Sie das
manualInstanceCount
-Attribut auf null (0
) fest:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA 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
Wenn Sie einen Dienst deaktivieren 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 '{"launchStage":"BETA","scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount
Ersetzen Sie:
- ACCESS_TOKEN durch 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 mitgcloud auth print-access-token
abrufen. Innerhalb einer Cloud Run-Containerinstanz können Sie ein Zugriffstoken über den Metadatenserver der Containerinstanz abrufen. - SERVICE durch den Namen des Dienstes.
- REGION durch die Region Google Cloud , in der der Dienst bereitgestellt wird.
- PROJECT_ID durch die Google Cloud Projekt-ID.
Beispiel für die zeitplanbasierte Skalierung
Ein häufiger Anwendungsfall der manuellen Skalierung ist die Änderung der Anzahl der Instanzen anhand eines vordefinierten Zeitplans. In diesem Beispiel verwenden wir Cloud Scheduler, um zwei Jobs zu planen, bei denen jeweils die Cloud Run Admin API aufgerufen wird, um die Anzahl der Instanzen zu skalieren. Mit dem ersten Job wird der Dienst so konfiguriert, dass er während der Geschäftszeiten (Montag bis Freitag, 9:00 bis 17:00 Uhr) manuell auf 10 Instanzen skaliert wird. Der zweite Job legt fest, dass der Dienst außerhalb der Geschäftszeiten auf null Instanzen herunterskaliert wird.
Beachten Sie, dass durch das Festlegen der Instanzen auf null, wie im Beispiel gezeigt, der Dienst deaktiviert wird, aber nicht die Cloud Scheduler-Jobs. Diese Jobs werden weiterhin ausgeführt und der Dienst wird wie geplant auf 10 Instanzen zurückgesetzt und wieder aktiviert.
In diesem Beispiel verwenden wir zur Vereinfachung die Cloud Run-Kurzanleitung. Sie können aber auch einen beliebigen Dienst verwenden.
So richten Sie die zeitplanbasierte manuelle Skalierung ein:
Stellen Sie den Dienst mit dem folgenden Befehl bereit:
gcloud beta run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Ersetzen Sie die folgenden Variablen:
- REGION durch die Region, in der der Cloud Run-Dienst bereitgestellt wird.
- SERVICE durch den Namen des Cloud Run-Dienstes.
Konfigurieren Sie Ihren Dienst mit dem folgenden Befehl für die manuelle Skalierung auf 10 Instanzen:
gcloud beta run services update SERVICE \ --region=REGION \ --scaling=10
Erstellen Sie einen Cloud Scheduler-Job, mit dem die Dienstinstanzen während der Geschäftszeiten manuell auf 10 Instanzen skaliert werden:
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='{"launchStage":"BETA","scaling":{"manualInstanceCount":10}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
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
10
festlegt. Im Beispiel wird das Compute Engine-StandarddienstkontoPROJECT_NUMBER-compute@developer.gserviceaccount.com
für die Cloud Scheduler-Jobs verwendet. Sie können jedes Dienstkonto verwenden, das Berechtigungen zum Aktualisieren von Cloud Run-Diensten hat.Erstellen Sie einen Cloud Scheduler-Job, der die Dienstinstanzen außerhalb der Geschäftszeiten manuell auf null skaliert und den Dienst deaktiviert:
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='{"launchStage":"BETA","scaling":{"manualInstanceCount":0}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Mit diesem Befehl wird ein Cloud Scheduler-Job erstellt, der einen HTTP-Aufruf an die Cloud Run Admin API sendet und die Instanzen für die manuelle Skalierung auf null setzt. Dadurch wird der Dienst deaktiviert, aber nicht die Cloud Scheduler-Jobs. Diese werden weiterhin ausgeführt und der Dienst wird wie geplant auf 10 Instanzen zurückgesetzt und wieder aktiviert.