Scalabilità manuale

Questa pagina descrive come eseguire il ridimensionamento manuale del servizio. Fornisce inoltre 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

Per impostazione predefinita, Cloud Run esegue la scalabilità orizzontale automaticamente fino a un numero massimo di istanze specificato o predefinito, a seconda del traffico e dell'utilizzo della CPU. Tuttavia, per alcuni casi d'uso, potresti volere la possibilità di impostare un numero specifico di istanze utilizzando il ridimensionamento manuale.

La scalabilità manuale ti consente di impostare un numero specifico di istanze, indipendentemente dal traffico o dall'utilizzo, e senza richiedere il ricollocamento. Tutto ciò ti offre la possibilità di scrivere la tua logica di scalabilità utilizzando un sistema esterno. Per un esempio, consulta la sezione Scalabilità in base alla pianificazione.

Passare dalla scalabilità automatica a quella manuale e viceversa

Il passaggio da una modalità di scalabilità all'altra influisce sul numero di istanze e sulle impostazioni di istanze minima e massima a livello di servizio, come mostrato nella tabella seguente:

Direzione dell'opzione di scala Numero di istanze Numero minimo e massimo di istanze
Da automatico a manuale Se il conteggio delle istanze non è specificato nel comando che cambia modalità, eredita l'impostazione Istanze minime a livello di servizio. Dopo il passaggio, le istanze minime e massime a livello di servizio non vengono impostate.
Da manuale ad automatico Il conteggio delle istanze manuale non è impostato Devi specificare entrambe le istanze minime e massime a livello di servizio oppure nessuna delle due. Se ne specifichi solo uno, viene restituito un errore. Se non specifichi nessuno di questi valori nel comando che cambia modalità, le istanze minime e massime a livello di servizio ereditano il conteggio delle istanze manuali.

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

Se imposti il servizio sulla scalabilità manuale, tutte le impostazioni di istanze minima a livello di revisione e massima vengono ignorate.

Suddivisioni del traffico per la scalabilità manuale

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

  • Durante la suddivisione del traffico, a ogni revisione vengono allocate istanze proporzionalmente in base alla suddivisione del traffico, in modo simile alla suddivisione del traffico con 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 presenterà lo stesso errore che si verifica se le revisioni sono disattivate.

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

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

    • Se sono impostate le istanze minime a livello di revisione, il numero specificato di istanze verrà avviato, ma non verrà conteggiato ai fini del conteggio totale delle istanze manuali del servizio. La revisione non verrà scalata automaticamente.
    • Se le istanze minime a livello di revisione non sono impostate, la revisione viene scalata fino a una 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 che si verifica quando utilizzi la funzionalità delle istanze minime.

In altre parole, con la scalabilità manuale e la fatturazione basata sulle istanze, le istanze inattive con scalabilità manuale vengono fatturate come istanze attive.

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

Ruoli obbligatori

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

Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il servizio Cloud Run interagisce conGoogle Cloud API, come le librerie client di Cloud, consulta la guida alla configurazione dell'identità di servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta le autorizzazioni di deployment e gestisci l'accesso.

Configura la scalabilità

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

Console

  1. Nella Google Cloud console, vai a Cloud Run:

    Vai a Cloud Run

  2. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e selezionate Servizio per visualizzare il modulo Crea servizio. Se stai configurando un servizio esistente, fai clic sul servizio per visualizzarne il riquadro dei dettagli, quindi fai clic sull'icona a forma di penna 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 Numero di istanze, specifica il numero di istanze di container per il servizio.

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

gcloud

Per specificare il ridimensionamento per un nuovo servizio, utilizza il comando deploy:

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

Sostituisci quanto segue:

  • SERVICE con il nome del servizio
  • INSTANCE_COUNT con il numero di istanze per il servizio. Il servizio viene impostato sulla scalabilità manuale. Specifica un valore 0 per disattivare il servizio. Specifica un valore auto per utilizzare il comportamento di scalabilità automatica predefinito di Cloud Run.
  • IMAGE_URL con un riferimento all'immagine del 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 ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Specifica il ridimensionamento per un servizio esistente utilizzando il seguente comando update:

gcloud beta 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/launch-stage: BETA
      run.googleapis.com/scalingMode: MODE
      run.googleapis.com/manualInstanceCount: INSTANCE_COUNT

    Sostituisci quanto segue:

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

    gcloud run services replace service.yaml

API REST

Per aggiornare le istanze minime a livello di servizio per un determinato servizio, invia una PATCH richiesta HTTP all'endpoint service dell'API Cloud Run Admin.

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

Sostituisci:

  • ACCESS_TOKEN con un token di accesso valido per un account che possiede le 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. All'interno di un'istanza container Cloud Run, puoi recuperare un token di accesso utilizzando il server di metadati dell'istanza container.
  • MANUAL_INSTANCE_COUNT con il numero di istanze per il servizio. Il servizio viene impostato sulla scalabilità manuale. Specifica un valore 0 per disattivare il servizio.
  • SERVICE con il nome del servizio.
  • REGION con la Google Cloud regione in cui è stato eseguito il deployment del servizio.
  • PROJECT_ID con l' Google Cloud ID progetto.

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 a Cloud Run:

    Vai a Cloud Run

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

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

gcloud

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

gcloud beta 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, tutte le richieste attualmente in fase di elaborazione potranno essere completate. Tuttavia, qualsiasi ulteriore richiesta all'URL del servizio non andrà a buon fine con un errore Service unavailable o Service disabled.

Le richieste di 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 console Google Cloud, Google Cloud CLI, il file YAML o l'API:

Console

  1. Nella Google Cloud console, vai a Cloud Run:

    Vai a Cloud Run

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

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

    immagine

    Nel campo 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 beta 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/launch-stage: BETA
      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'endpoint service dell'API Cloud Run Admin.

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

Sostituisci:

  • ACCESS_TOKEN con un token di accesso valido per un account che possiede le 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. All'interno di un'istanza container Cloud Run, puoi recuperare un token di accesso utilizzando il server di metadati dell'istanza container.
  • SERVICE con il nome del servizio.
  • REGION con la Google Cloud regione in cui è stato eseguito il deployment del servizio.
  • PROJECT_ID con l' Google Cloud ID progetto.

Esempio di scalabilità basata sulla pianificazione

Un caso d'uso comune della scalabilità manuale è la modifica del numero di istanze in base a una programmazione predefinita. In questo esempio utilizziamo Cloud Scheduler per pianificare due job, ciascuno dei quali richiama l'API Cloud Run Admin per scalare il numero di istanze. Il primo job imposta il servizio per eseguire lo scale out manuale fino a 10 istanze durante l'orario di apertura (9:00-17:00, dal lunedì al venerdì). Il secondo job imposta il servizio in modo che la scalabilità sia ridotta a zero istanze durante le ore di riposo.

Tieni presente che l'impostazione delle istanze su zero come mostrato nell'esempio disattiva il servizio, ma non i job Cloud Scheduler. Questi job continueranno a essere eseguiti e reimpostano (e riattivano) il servizio su 10 istanze come pianificato.

In questo esempio, per semplicità, utilizziamo la guida introduttiva di Cloud Run, 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 beta run deploy SERVICE \
       --image=us-docker.pkg.dev/cloudrun/container/hello \
       --region=REGION \
       --project PROJECT_ID

    Sostituisci le seguenti variabili:

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

    gcloud beta run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Crea un job Cloud Scheduler che esegue il ridimensionamento manuale delle istanze di servizio fino a 10 istanze 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='{"launchStage":"BETA","scaling":{"manualInstanceCount":10}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

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

  4. Crea un job Cloud Scheduler che ridimensiona manualmente le istanze di servizio fino a zero istanze durante le ore di riposo, disattivando il servizio:

    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

    Questo comando crea un job Cloud Scheduler che effettua una chiamata HTTP all'API Cloud Run Admin, impostando su zero le istanze di scalabilità manuale. In questo modo, il servizio viene disattivato, ma non i job Cloud Scheduler, che continueranno a essere eseguiti e a reimpostare (e riattivare) il servizio su 10 istanze come pianificato.