Manuelle Skalierung

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:

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

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

    Zu Cloud Run

  2. 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.

  3. Suchen Sie das Formular Dienst skalieren (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 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 Wert auto 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 Form LOCATION-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

  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/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 oder automatic 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.
  3. 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 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 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

  1. Rufen Sie in der Google Cloud Console 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 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

  1. Rufen Sie in der Google Cloud Console 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 in das Feld Anzahl der Instanzen den Wert 0 (null) ein.

  4. 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

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. 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.

  3. 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 mit gcloud 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:

  1. 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.
  2. 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
  3. 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-Standarddienstkonto PROJECT_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.

  4. 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.