La scalabilità manuale ti consente di impostare un numero specifico di istanze per il tuo servizio Cloud Run, indipendentemente dal traffico o dall'utilizzo e senza rifare il deployment. Puoi utilizzarlo anche per implementare la tua logica di scalabilità da un sistema esterno, ad esempio modificando il conteggio delle istanze in base a una pianificazione. Per un esempio, consulta Scalabilità basata sulla pianificazione.
Per impostazione predefinita, Cloud Run esegue automaticamente lo scale out fino a un numero massimo di istanze specificato o predefinito in base al traffico, alla CPU o ai tuoi target di utilizzo della CPU o della contemporaneità personalizzati. La scalabilità manuale esegue l'override di questo comportamento quando hai bisogno di un numero fisso di istanze.
Impostazioni minime e massime a livello di revisione e scalabilità manuale
Se imposti il servizio sulla scalabilità manuale, le impostazioni del numero minimo e massimo di istanze a livello di revisione vengono ignorate.
Suddivisioni del traffico per la scalabilità manuale
L'elenco seguente descrive come vengono allocate le istanze quando si suddivide il traffico in modalità di scalabilità manuale. Ciò include il comportamento per le revisioni solo con tag di traffico.
Durante una suddivisione del traffico, a ogni revisione vengono allocate istanze in modo proporzionale, 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 numero di istanze manuali, alcune revisioni non avranno istanze. Il traffico inviato a queste revisioni riceverà lo stesso errore che si verificherebbe 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 sono disabilitate.
Se una revisione è attiva solo a causa di tag di traffico:
- Se è impostato il numero minimo di istanze a livello di revisione, verrà avviato il numero di istanze specificato, ma queste non verranno conteggiate nel numero totale di istanze manuali del servizio. La revisione non verrà scalata automaticamente.
- Se non è impostato il numero minimo di istanze a livello di revisione, viene eseguito lo scale out della revisione fino a un massimo di 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à Numero minimo di istanze.
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 numero minimo di istanze inattive. Per i 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:
- Cloud Run Developer (
roles/run.developer) sul servizio Cloud Run - Utente dell'account di servizio (
roles/iam.serviceAccountUser) sull'identità di servizio - Artifact Registry Reader (
roles/artifactregistry.reader) sul repository Artifact Registry dell'immagine container di cui è stato eseguito il deployment (se applicabile)
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.
Configura la scalabilità manuale
Puoi configurare la modalità di scalabilità utilizzando la console Google Cloud , Google Cloud CLI, il file YAML o l'API quando crei un servizio o aggiorni una revisione:
Console
Nella console Google Cloud , vai a Cloud Run:
Seleziona Servizi dal menu di navigazione di Cloud Run:
Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio.
Se stai configurando un servizio esistente, fai clic sul servizio, quindi sulla scheda Scalabilità.
Fai clic su Scalabilità manuale.
Specifica il numero di istanze di container per il servizio nel campo Numero di istanze.
Fai clic su Crea per un nuovo servizio. Fai clic su Visualizza differenze e fai di nuovo il deployment, quindi su Esegui il deployment delle modifiche 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.
In questo modo, il servizio viene impostato sulla scalabilità manuale. Specifica un valore
0per disattivare il servizio. Specifica un valoreautoper utilizzare il comportamento di scalabilità automatica predefinito di Cloud Run. IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Specifica la scalabilità per un servizio esistente utilizzando il seguente comando di aggiornamento:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
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
Aggiorna gli attributi
scalingModeemanualInstanceCount: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 tuo servizio Cloud Run
- MODE:
manualper la scalabilità manuale oautomaticper il comportamento di scalabilità automatica predefinito di Cloud Run. - INSTANCE_COUNT: il numero di istanze di cui stai eseguendo lo scale up o lo scale down manualmente per il servizio. Specifica un valore
0per disattivare il servizio.
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
Il comando
gcloud run services replaceutilizza per impostazione predefinita il fileservice.yaml, se presente.
API REST
Per aggiornare il numero di istanze per un determinato servizio in scalabilità manuale, 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 '{"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 utilizzandogcloud auth print-access-token. All'interno di un'istanza container di 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.
In questo modo, il servizio viene impostato sulla scalabilità manuale. Specifica un valore
0per disattivare il servizio. - SERVICE: il nome del servizio.
- REGION: la regione Google Cloud in cui è stato eseguito il deployment del servizio.
- PROJECT_ID: l'ID progetto Google Cloud .
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 questo 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 risorsagoogle_cloud_run_v2_service 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 regione Google Cloud . Ad esempio
europe-west1. IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- INSTANCE_COUNT: il numero di istanze di cui stai eseguendo lo scale up o lo scale down manualmente per il servizio. Questo numero di istanze viene diviso tra tutte le revisioni con traffico specificato in base alla percentuale di traffico che ricevono.
Visualizza la configurazione di scalabilità per il tuo servizio
Per visualizzare le istanze di configurazione della scalabilità per il tuo servizio Cloud Run:
Console
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
Fai clic sul servizio che ti interessa per aprire il riquadro Dettagli servizio.
Fai clic sulla scheda Scalabilità per trovare le impostazioni di scalabilità.
gcloud
Utilizza il seguente comando per visualizzare la configurazione di scalabilità attuale 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 di 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, eventuali ulteriori richieste all'URL del servizio non andranno a buon fine e genereranno 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 disabilitate.
Per disattivare un servizio, imposta la scalabilità su zero. Puoi disabilitare un servizio utilizzando la console Google Cloud , Google Cloud CLI, un file YAML o l'API:
Console
Nella console Google Cloud , vai alla pagina Servizi di Cloud Run:
Fai clic sul servizio che vuoi disattivare per visualizzare il relativo riquadro dei dettagli, quindi fai clic sulla scheda Scalabilità.
Seleziona Scalabilità manuale.
Inserisci il valore
0(zero) nel campo Numero di istanze.Fai clic su Visualizza differenze ed esegui il deployment, quindi su Esegui il deployment delle modifiche.
gcloud
Per disattivare un servizio, utilizza il comando seguente per impostare la scalabilità su zero:
gcloud run services update SERVICE --scaling=0
Sostituisci SERVICE con il nome del servizio.
YAML
Scarica la configurazione YAML del servizio:
gcloud run services describe SERVICE --format export > service.yaml
Imposta l'attributo
manualInstanceCountsu 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 tuo servizio Cloud Run.
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloud run services replace service.yaml
API REST
Per disabilitare 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 '{"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 utilizzandogcloud auth print-access-token. All'interno di un'istanza container di Cloud Run, puoi recuperare un token di accesso utilizzando il server dei metadati dell'istanza container. - SERVICE: il nome del servizio.
- REGION: la regione Google Cloud in cui è stato eseguito il deployment del servizio.
- PROJECT_ID: l'ID progetto Google Cloud .
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 regione Google Cloud . Ad esempio
europe-west1. IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già stato creato. L'URL segue il formatoLOCATION-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 numero di 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, lun-ven). Il secondo job imposta il servizio in modo che fare lo scale down venga eseguito fino a un numero specificato di istanze durante le ore non di punta.
In questo esempio, utilizziamo la guida rapida di Cloud Run per semplicità, ma puoi utilizzare un servizio di tua scelta.
Per configurare la scalabilità manuale basata su pianificazione:
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'ID progetto Google Cloud .
Configura il servizio per la scalabilità manuale a 10 istanze utilizzando il seguente comando:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
Crea un job Cloud Scheduler che esegue lo scale up manuale di 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@
Sostituisci quanto segue:
- REGION: la regione in cui è stato eseguito il deployment del servizio Cloud Run.
- PROJECT_ID: l'ID progetto Google Cloud .
- INSTANCE_COUNT: il numero di istanze che vuoi scalare, ad esempio
10. - PROJECT_NUMBER: il numero di progetto Google Cloud .
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@per i job di Cloud Scheduler. Puoi utilizzare qualsiasi account di servizio che disponga delle autorizzazioni per aggiornare i servizi Cloud Run.Crea un job Cloud Scheduler che riduca manualmente le istanze di servizio durante le ore non di punta:
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@
Sostituisci quanto segue:
- REGION: la regione in cui è stato eseguito il deployment del servizio Cloud Run.
- PROJECT_ID: l'ID progetto Google Cloud .
- INSTANCE_COUNT: il numero di istanze di cui vuoi fare lo scale up o lo scale down.
Per disattivare il servizio, imposta questo valore su
0. - PROJECT_NUMBER: il numero di progetto Google Cloud .
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 disabilitato, ma non i job Cloud Scheduler. Questi job continuano a essere eseguiti e ripristineranno (e riattiveranno) il servizio a un numero maggiore di istanze come pianificato.