Scalabilità manuale

Questa pagina descrive come scalare manualmente il tuo servizio. Fornisce anche istruzioni per un caso d'uso comune: la modifica del conteggio delle istanze in base a una pianificazione utilizzando i job Cloud Scheduler e l'API Cloud Run Admin.

Panoramica

La scalabilità manuale ti consente di impostare un conteggio specifico delle istanze, indipendentemente dal traffico o dall'utilizzo e senza richiedere un nuovo deployment. Tutto ciò ti offre la possibilità di scrivere la tua logica di scalabilità utilizzando un sistema esterno. Per un esempio, consulta Scalabilità basata sulla pianificazione.

Per impostazione predefinita, Cloud Run esegue automaticamente lo scale out fino a un numero massimo specificato o predefinito di istanze, a seconda del traffico, della CPU o dei tuoi target di utilizzo personalizzati della CPU o della concorrenza. Tuttavia, per alcuni casi d'uso, potresti voler impostare un numero specifico di istanze utilizzando la scalabilità manuale.

Impostazioni minime e massime a livello di revisione e scalabilità manuale

Se imposti il servizio sulla scalabilità manuale, le impostazioni minime a livello di revisione e massime delle istanze vengono ignorate.

Suddivisioni del traffico per la scalabilità manuale

Il seguente elenco descrive come vengono allocate le istanze durante la suddivisione del traffico con la scalabilità manuale. Sono inclusi i comportamenti per le revisioni solo con tag di traffico.

  • Durante una suddivisione del traffico, a ogni revisione vengono allocate le istanze in modo proporzionale, in base alla suddivisione del traffico, in modo simile alla suddivisione del traffico con le istanze minime a livello di servizio.

  • Se il numero di revisioni che ricevono traffico supera il conteggio delle istanze manuali, alcune revisioni non avranno istanze. Il traffico inviato a queste revisioni genererà lo stesso errore di se le revisioni fossero disabilitate.

  • Per tutte le revisioni che ricevono traffico in una suddivisione del traffico, le istanze minime e massime a livello di revisione vengono disabilitate.

  • Se una revisione è attiva solo a causa dei tag di traffico:

    • Se è impostato il numero minimo di istanze a livello di revisione, il numero specificato di istanze verrà avviato, ma non verrà conteggiato nel conteggio totale delle istanze manuali del servizio. La revisione non verrà scalata automaticamente.
    • Se il numero minimo di istanze a livello di revisione non è impostato, la revisione viene scalata fino a un massimo di un'istanza in risposta al traffico inviato all'URL del tag.

Comportamento di fatturazione con la scalabilità manuale

Quando utilizzi la scalabilità manuale, il comportamento di fatturazione è simile a quello quando utilizzi la funzionalità delle istanze minime.

Ovvero, con la scalabilità manuale e la fatturazione basata sulle istanze, le istanze inattive scalate manualmente vengono fatturate come istanze attive.

Se utilizzi la scalabilità manuale con la fatturazione basata sulle richieste, le istanze inattive scalate manualmente vengono fatturate come istanze minime inattive. Per i dettagli completi sulla fatturazione, consulta la pagina dei prezzi.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eseguire il deployment di servizi Cloud Run, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.

Configurare la scalabilità manuale

Puoi configurare la modalità di scalabilità utilizzando la Google Cloud console, Google Cloud CLI, il file YAML o l'API quando crei un servizio o aggiorni una revisione:

Console

  1. Nella Google Cloud console, vai alla pagina Cloud Run Servizi:

    Vai a Cloud Run

  2. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container per visualizzare il modulo Crea servizio. Se stai configurando un servizio esistente, fai clic sul servizio per visualizzare il relativo riquadro dei dettagli, quindi fai clic sull'icona a forma di matita accanto a Scalabilità in alto a destra nel riquadro dei dettagli.

  3. Individua il modulo Scalabilità del servizio (per un nuovo servizio) o il modulo Modifica scalabilità per un servizio esistente.

    immagine

    Nel campo con l'etichetta Numero di istanze, specifica il numero di istanze container per il servizio.

  4. Fai clic su Crea per un nuovo servizio o su Salva per un servizio esistente.

gcloud

Per specificare la scalabilità per un nuovo servizio, utilizza il comando deploy:

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

Sostituisci quanto segue:

  • SERVICE: il nome del servizio.
  • INSTANCE_COUNT: il numero di istanze per il servizio. Imposta il servizio sulla scalabilità manuale. Specifica un valore di 0 per disabilitare il servizio. Specifica un valore di auto per utilizzare il comportamento di scalabilità automatica predefinito di Cloud Run.
  • IMAGE_URL: un riferimento all'immagine container, ad esempio, us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato di LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Specifica la scalabilità per un servizio esistente utilizzando il seguente comando update:

gcloud run services update SERVICE \
   --scaling=INSTANCE_COUNT

YAML

  1. Se stai creando un nuovo servizio, salta questo passaggio. Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna gli attributi scalingMode e manualInstanceCount:

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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio Cloud Run
    • MODE: manual per la scalabilità manuale o automatic per il comportamento di scalabilità automatica predefinito di Cloud Run.
    • INSTANCE_COUNT: il numero di istanze che stai scalando manualmente per il servizio. Specifica un valore di 0 per disabilitare il servizio.
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

    Per impostazione predefinita, il comando gcloud run services replace utilizza il file service.yaml, se presente.

API REST

Per aggiornare il numero di istanze per un determinato servizio nella scalabilità manuale, invia una richiesta HTTP PATCH all'API Cloud Run Admin service endpoint.

Ad esempio, utilizzando 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

Sostituisci quanto segue:

  • ACCESS_TOKEN: un token di accesso valido per un account che dispone delle autorizzazioni IAM per aggiornare un servizio. Ad esempio, se hai eseguito l'accesso a gcloud, puoi recuperare un token di accesso utilizzando gcloud auth print-access-token. Da un'istanza container Cloud Run, puoi recuperare un token di accesso utilizzando il server dei metadati dell'istanza container.
  • MANUAL_INSTANCE_COUNT: il numero di istanze per il servizio. Imposta il servizio sulla scalabilità manuale. Specifica un valore di 0 per disabilitare il servizio.
  • SERVICE: il nome del servizio.
  • REGION: la Google Cloud regione in cui è stato eseguito il deployment del servizio.
  • PROJECT_ID: l' Google Cloud ID progetto.

Per passare dalla modalità di scalabilità manuale a quella automatica, invia una richiesta PATCH all'endpoint service dell'API Cloud Run Admin e imposta il campo scalingMode su AUTOMATIC.

Ad esempio, esegui il seguente comando curl:

      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

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Aggiungi quanto segue a una google_cloud_run_v2_service risorsa nella configurazione Terraform:
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"
  }
}

Sostituisci quanto segue:

  • SERVICE_NAME: il nome del servizio Cloud Run.
  • REGION: la Google Cloud regione. Ad esempio, europe-west1.
  • IMAGE_URL: un riferimento all'immagine container, ad esempio, us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato di LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • INSTANCE_COUNT: il numero di istanze che stai scalando manualmente per il servizio. Questo numero di istanze viene suddiviso tra tutte le revisioni con traffico specificato in base alla percentuale di traffico che ricevono.

Visualizzare la configurazione della scalabilità per il servizio

Per visualizzare le istanze di configurazione della scalabilità per il servizio Cloud Run:

Console

  1. Nella Google Cloud console, vai alla pagina Cloud Run Servizi:

    Vai a Cloud Run

  2. Fai clic sul servizio che ti interessa per aprire il riquadro Dettagli servizio.

  3. L'impostazione di scalabilità corrente viene visualizzata in alto a destra nel riquadro dei dettagli del servizio, dopo l'etichetta Scalabilità, accanto all'icona a forma di matita.

gcloud

Utilizza il seguente comando per visualizzare la configurazione della scalabilità corrente per il servizio:

gcloud run services describe SERVICE

Sostituisci SERVICE con il nome del servizio.

Cerca il campo Scaling: Manual (Instances: ) nella parte superiore del testo restituito da describe.

YAML

Utilizza il seguente comando per scaricare la configurazione YAML del servizio:

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

La configurazione della scalabilità è contenuta negli attributi scalingMode e manualInstanceCount.

Disattivazione di un servizio

Quando disattivi un servizio, le richieste attualmente in fase di elaborazione potranno essere completate. Tuttavia, le richieste successive all'URL del servizio non andranno a buon fine e verrà generato un errore Service unavailable o Service disabled.

Le richieste alle revisioni del servizio attive solo a causa dei tag di traffico non sono interessate perché queste revisioni non sono disattivate.

Per disattivare un servizio, imposta la scalabilità su zero. Puoi disattivare un servizio utilizzando la Google Cloud console, Google Cloud CLI, il file YAML o l'API:

Console

  1. Nella Google Cloud console, vai alla pagina Cloud Run Servizi:

    Vai a Cloud Run

  2. Fai clic sul servizio che vuoi disattivare per visualizzare il relativo riquadro dei dettagli, quindi fai clic sull'icona a forma di matita accanto a Scalabilità in alto a destra nel riquadro dei dettagli.

  3. Individua il modulo Modifica scalabilità e seleziona Scalabilità manuale.

    immagine

    Nel campo con l'etichetta Numero di istanze, inserisci il valore 0 (zero).

  4. Fai clic su Salva.

gcloud

Per disattivare un servizio, utilizza il seguente comando per impostare la scalabilità su zero:

gcloud run services update SERVICE --scaling=0

Sostituisci SERVICE con il nome del servizio.

YAML

  1. Scarica la configurazione YAML del servizio:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Imposta l'attributo manualInstanceCount su zero (0):

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

    Sostituisci SERVICE con il nome del servizio Cloud Run.

  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

API REST

Per disattivare un servizio, invia una richiesta HTTP PATCH all'API Cloud Run Admin service endpoint.

Ad esempio, utilizzando 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

Sostituisci quanto segue:

  • ACCESS_TOKEN: un token di accesso valido per un account che dispone delle autorizzazioni IAM per aggiornare un servizio. Ad esempio, se hai eseguito l'accesso a gcloud, puoi recuperare un token di accesso utilizzando gcloud auth print-access-token. Da un'istanza container Cloud Run, puoi recuperare un token di accesso utilizzando il server dei metadati dell'istanza container.
  • SERVICE: il nome del servizio.
  • REGION: la Google Cloud regione in cui è stato eseguito il deployment del servizio.
  • PROJECT_ID: l' Google Cloud ID progetto.

Terraform

Per disattivare un servizio, imposta l'attributo manual_instance_count su zero (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"
  }
}

Sostituisci quanto segue:

  • SERVICE_NAME: il nome del servizio Cloud Run.
  • REGION: la Google Cloud regione. Ad esempio, europe-west1.
  • IMAGE_URL: un riferimento all'immagine container, ad esempio, us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formato di LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Esempio di scalabilità basata sulla pianificazione

Un caso d'uso comune della scalabilità manuale è la modifica del conteggio delle istanze in base a una pianificazione predefinita. In questo esempio, utilizziamo Cloud Scheduler per pianificare due job, ognuno dei quali richiama l'API Cloud Run Admin per scalare il numero di istanze. Il primo job Cloud Scheduler imposta il servizio in modo che venga scalato manualmente a un numero specificato di istanze durante l'orario di apertura (9:00-17:00, dal lunedì al venerdì). Il secondo job imposta il servizio in modo che venga eseguito fare lo scale down a un numero specificato di istanze durante le ore non lavorative.

In questo esempio, utilizziamo la guida rapida di Cloud Run per semplicità, ma puoi utilizzare un servizio a tua scelta.

Per configurare la scalabilità manuale basata sulla pianificazione:

  1. Esegui il deployment del servizio utilizzando il seguente comando:

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

    Sostituisci quanto segue:

    • SERVICE: il nome del servizio Cloud Run.
    • REGION: la regione in cui è stato eseguito il deployment del servizio Cloud Run.
    • PROJECT_ID: l' Google Cloud ID progetto.
  2. Configura il servizio per la scalabilità manuale a 10 istanze utilizzando il seguente comando:

    gcloud run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Crea un job Cloud Scheduler che esegua manualmente lo scale up a un numero specificato di istanze di servizio durante l'orario di apertura:

    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

    Sostituisci quanto segue:

    • REGION: la regione in cui è stato eseguito il deployment del servizio Cloud Run.
    • PROJECT_ID: l' Google Cloud ID progetto.
    • INSTANCE_COUNT: il numero di istanze a cui vuoi eseguire lo scale up, ad esempio 10.
    • PROJECT_NUMBER: il Google Cloud numero di progetto.

    Questo comando crea un job Cloud Scheduler che effettua una chiamata HTTP all'API Cloud Run Admin, impostando il numero di istanze sul numero specificato. L'esempio utilizza il account di servizio predefinito di Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com per i job Cloud Scheduler. Puoi utilizzare qualsiasi account di servizio con le autorizzazioni per aggiornare i servizi Cloud Run.

  4. Crea un job Cloud Scheduler che esegua manualmente lo scale down delle istanze di servizio durante le ore non lavorative:

    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

    Sostituisci quanto segue:

    • REGION: la regione in cui è stato eseguito il deployment del servizio Cloud Run.
    • PROJECT_ID: l' Google Cloud ID progetto.
    • INSTANCE_COUNT: il numero di istanze a cui vuoi eseguire lo scale up. Per disattivare il servizio, imposta questo valore su 0.
    • PROJECT_NUMBER: il Google Cloud numero di progetto.

    Questo comando crea un job Cloud Scheduler che effettua una chiamata HTTP all'API Cloud Run Admin, impostando le istanze di scalabilità manuale sul numero di istanze specificato. Se imposti le istanze su zero, il servizio viene disattivato, ma non i job Cloud Scheduler. Questi job continuano a essere eseguiti e reimposteranno (e riattiveranno) il servizio a un numero maggiore di istanze come pianificato.