Impostare il numero minimo di istanze per i servizi

Questa pagina descrive come attivare le istanze inattive per un servizio configurando il numero minimo di istanze utilizzando il comportamento di scalabilità automatica di Cloud Run predefinito. Per scalare manualmente il servizio, consulta Scalabilità manuale.

Se hai bisogno di un maggiore controllo sul comportamento di scalabilità automatica del servizio, puoi impostare un numero minimo di istanze per evitare tempi di avvio lenti dei container e ridurre la latenza del servizio. Per i servizi Cloud Run, Cloud Run, per impostazione predefinita, scala il numero di istanze in base al numero di richieste in entrata.

Tuttavia, se il servizio richiede una latenza ridotta, soprattutto quando lo scale up viene eseguito da zero istanze attive, puoi modificare questo comportamento predefinito specificando un numero minimo di istanze di container da mantenere in uso e pronte per gestire le richieste. Per maggiori dettagli su questa ottimizzazione, consulta i Suggerimenti generali per lo sviluppo.

Cloud Run rimuove le istanze che non elaborano richieste (inattive). Con il numero minimo di istanze impostato, Cloud Run mantiene in esecuzione almeno il numero minimo di istanze, anche se non elaborano richieste. Le istanze attive superiori al numero min-instances potrebbero diventare inattive se non ricevono richieste.

Ad esempio, se min-instances è 10 e il numero di istanze attive è 0, il numero di istanze inattive è 10. Quando il numero di istanze attive aumenta a 6, il numero di istanze inattive diminuisce a 4.

Tieni presente che se un servizio non ha gestito traffico di recente, la metrica delle istanze attive può indicare che non sono presenti istanze attive, anche se ne hai specificata una o più per il numero minimo di istanze.

Le istanze minime possono essere riavviate in qualsiasi momento.

Best practice per l'alta affidabilità

Per garantire che il tuo servizio rimanga ad alta affidabilità, ti consigliamo di configurare almeno 3 istanze minime.

Limitazioni del numero minimo di istanze

Il numero minimo di istanze è un target best-effort per mantenere le istanze attive e pronte. Potresti riscontrare cali temporanei al di sotto del numero minimo di istanze configurate a causa dei seguenti rischi non mitigati, anche se configuri 3 o più istanze:

  • Capacità della zona o della regione: in caso di grave esaurimento della capacità in una zona o regione, il sistema potrebbe non essere in grado di avviare o eseguire le istanze.
  • Ribilanciamento dell'infrastruttura: occasionalmente, l'infrastruttura sottostante viene ribilanciata, il che potrebbe causare un ritardo temporaneo nell'avvio delle istanze sostitutive. Per saperne di più su come vengono terminate le istanze, consulta la documentazione relativa alla chiusura delle istanze.
  • Arresti anomali dell'applicazione: se il container si arresta in modo anomalo all'avvio o non supera costantemente i controlli di integrità, il sistema tenta continuamente di avviare istanze per soddisfare il numero minimo, ma il numero di istanze integre e pronte per la gestione rimane inferiore al limite configurato.
  • Limiti di quota e fatturazione: se il tuo progetto raggiunge i limiti di quota di CPU o memoria o se la fatturazione è disattivata, la piattaforma interrompe lo scale up e potrebbe terminare le istanze indipendentemente dall'impostazione del numero minimo di istanze.

Fatturazione

Le istanze mantenute in esecuzione utilizzando la funzionalità Numero minimo di istanze comportano costi di fatturazione.

Il seguente diagramma mostra come funziona la fatturazione durante il ciclo di vita di un'istanza quando configuri le istanze minime per un servizio o una revisione:

Chiama l'API Cloud Run Admin dalla console Google Cloud .
Figura 1. Un'istanza di esempio che riceve ed elabora tre richieste.

A seconda delle impostazioni di fatturazione configurate, il servizio viene fatturato come segue:

  • Per la fatturazione basata sulle richieste, ti viene addebitata una tariffa inferiore quando le istanze sono inattive e in attesa di elaborare le richieste. Se il numero minimo di istanze è impostato su 0, non ti viene addebitato alcun costo quando le istanze sono inattive.
  • Per la fatturazione basata sulle istanze, ti viene addebitata la tariffa predefinita per l'intero ciclo di vita dell'istanza. Il tempo che intercorre tra l'avvio e l'arresto include il momento in cui un'istanza elabora le richieste o è inattiva. In altre parole, anche se il numero minimo di istanze è impostato su 0, ti viene comunque addebitata la tariffa predefinita. Questa opzione è utile se hai bisogno di CPU al di fuori delle richieste. Se il numero minimo di istanze è impostato su 0, ti verrà addebitata la tariffa predefinita.
Poiché questi addebiti sono prevedibili, Google consiglia di acquistare uno sconto per impegno di utilizzo.

Applica il numero minimo di istanze a livello di servizio rispetto al livello di revisione

Puoi configurare il numero minimo di istanze a livello di servizio o di revisione. Google consiglia di applicare il numero minimo di istanze a livello di servizio ed evitare di combinare il numero minimo di istanze a livello di servizio e di revisione. Scopri di più sul comportamento quando configuri le impostazioni di scalabilità sia a livello di servizio sia a livello di revisione.

Se applichi il numero minimo di istanze a livello di revisione, le impostazioni diventano effettive al momento del deployment della revisione. Se applichi questa funzionalità a livello di servizio, l'impostazione diventa effettiva senza dover eseguire il deployment di una nuova revisione.

Revisioni e numero minimo di istanze

Quando il numero minimo di istanze è impostato a livello di servizio, le richieste in entrata vengono distribuite a tutte le revisioni che gestiscono il traffico in proporzione alla suddivisione del traffico.

Quando il numero minimo di istanze è impostato a livello di revisione, le istanze minime vengono avviate ogni volta che la revisione viene indicata in una suddivisione del traffico o ha un tag di traffico assegnato. Ciò significa che l'istanza viene fatturata quando elabora le richieste e anche quando è in attesa di richieste in entrata.

Revisioni con tag e numero minimo di istanze a livello di servizio

Se viene avviata una revisione con un tag assegnato, l'istanza viene conteggiata ai fini del numero minimo di istanze a livello di servizio se fa parte di una suddivisione del traffico.

Routing delle richieste con numero minimo di istanze

Quando imposti il numero minimo di istanze, Cloud Run distribuisce le richieste in entrata in modo uniforme tra tutte le istanze di cui è stato eseguito il provisioning. Comprendere questo comportamento è importante per gestire i costi, soprattutto con la fatturazione basata sulle richieste o se intendi mantenere istanze hot spare inattive. Per ridurre al minimo i costi, imposta il numero minimo di istanze sul numero di istanze necessarie per gestire il traffico tipico.

Ruoli obbligatori

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

Se esegui il deployment di un servizio o di una funzione dal codice sorgente, devi anche disporre di ruoli aggiuntivi concessi al tuo progetto e al account di servizio Cloud Build.

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 il numero minimo di istanze a livello di servizio

Per impostazione predefinita, le istanze di container hanno il numero minimo di istanze a livello di servizio disattivato, con un'impostazione di 0. Puoi modificare questa impostazione predefinita utilizzando la consoleGoogle Cloud , Google Cloud CLI o un file YAML:

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu di navigazione di Cloud Run:

    1. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio.

    2. Se stai configurando un servizio esistente, fai clic sul servizio, quindi sulla scheda Scalabilità.

  3. Nella sezione Scalabilità del servizio, specifica il numero minimo di istanze di container nel campo Numero minimo di istanze.

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

Aggiorna il numero minimo di istanze per un determinato servizio utilizzando il seguente comando:

gcloud run services update SERVICE --min MIN-VALUE

Sostituisci quanto segue:

  • SERVICE: il nome del servizio.
  • MIN-VALUE: il numero di istanze container da mantenere attive, pronte a ricevere richieste. Specifica default per cancellare qualsiasi impostazione del numero minimo di istanze.

In alternativa, puoi impostare il numero minimo di istanze durante il deployment utilizzando il comando:

gcloud run deploy --image IMAGE_URL --min MIN-VALUE

Sostituisci quanto segue:

  • 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 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • MIN-VALUE: il numero di istanze di container da mantenere attive, pronte a ricevere richieste. Specifica default per cancellare qualsiasi impostazione del numero minimo di istanze.

YAML

Qualsiasi modifica alla configurazione porta alla creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

  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 l'attributo run.googleapis.com/minScale:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/minScale: 'MIN_INSTANCE'

    Sostituisci quanto segue:

    • SERVICE: il nome del tuo servizio Cloud Run
    • MIN-INSTANCE: il numero di istanze da mantenere attive, pronte a ricevere richieste.
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

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

Librerie client

Per aggiornare il numero minimo di istanze a livello di servizio per il tuo servizio dal codice:

API REST

Per aggiornare le istanze minime a livello di servizio per un determinato 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": { "minInstanceCount": MIN-VALUE }}' \
https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.minInstanceCount

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. All'interno di un'istanza container di Cloud Run, puoi recuperare un token di accesso utilizzando il server dei metadati dell'istanza container.
  • MIN-VALUE: il numero di istanze container da mantenere attive, pronte a ricevere richieste.
  • SERVICE: il nome del servizio.
  • REGION: la regione Google Cloud del servizio.
  • PROJECT-ID: l'ID progetto Google Cloud .

Visualizza il numero minimo di istanze a livello di servizio

Per visualizzare le impostazioni attuali del numero minimo di istanze a livello di servizio per il tuo servizio Cloud Run:

Console

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

    Vai a Cloud Run

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

  3. Fai clic sulla scheda Scalabilità.

  4. Trova l'impostazione Numero minimo di istanze nella sezione Scalabilità del servizio.

gcloud

  1. Utilizza il seguente comando:

    gcloud run services describe SERVICE
  2. Individua il valore di Scalabilità: automatica (min: MIN_VALUE, max: MAX_VALUE) nella configurazione restituita.

Configura il numero minimo di istanze a livello di revisione

Qualsiasi modifica alla configurazione porta alla creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Per impostazione predefinita, le istanze di container hanno min-instances disattivato, con un'impostazione di 0.

La scalabilità a livello di revisione è disponibile solo per i servizi per i quali la funzionalità è stata configurata in precedenza.

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu di navigazione di Cloud Run:

    1. Se stai configurando un nuovo servizio, fai clic su Esegui il deployment del container e compila la pagina delle impostazioni iniziali del servizio. Quindi fai clic su Container, networking, sicurezza per espandere la pagina di configurazione del servizio.

    2. Se stai configurando un servizio esistente, fai clic sul servizio, quindi sulla scheda Scalabilità.

  3. Nella sezione Scalabilità delle revisioni, specifica il numero minimo di istanze di container nel campo Numero minimo di istanze.

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

Puoi aggiornare min-instance di un determinato servizio utilizzando il seguente comando:

gcloud run services update SERVICE --min-instances MIN-VALUE

Sostituisci quanto segue:

  • SERVICE: il nome del servizio.
  • MIN-VALUE: il numero di istanze container da mantenere attive, pronte a ricevere richieste. Specifica default per cancellare qualsiasi impostazione del numero minimo di istanze.

Puoi anche impostare min-instance durante il deployment utilizzando il comando:

gcloud run deploy --image IMAGE_URL --min-instances MIN-VALUE

Sostituisci quanto segue:

  • 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 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • MIN-VALUE: il numero di istanze container da mantenere attive, pronte a ricevere richieste. Specifica default per cancellare qualsiasi impostazione del numero minimo di istanze.

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 l'attributo autoscaling.knative.dev/minScale::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/minScale: 'MIN-INSTANCE'
          name: REVISION

    Sostituisci quanto segue:

    • SERVICE: il nome del tuo servizio Cloud Run
    • MIN-INSTANCE: il numero di istanze da mantenere attive, pronte a ricevere richieste.
    • REVISION: un nuovo nome della revisione o eliminalo (se presente). Se fornisci un nuovo nome della revisione, questo deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non supera i 63 caratteri
  3. Crea o aggiorna il servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

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

Terraform

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

Aggiungi quanto segue a una risorsa google_cloud_run_v2_service nella configurazione Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-min-instances"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      # Min instances
      min_instance_count = 1
    }
  }
}

La risorsa google_cloud_run_v2_service precedente specifica un numero minimo di istanze di 1 in template.scaling. Sostituisci 1 con il numero minimo di istanze che preferisci.

Visualizza il numero minimo di istanze a livello di revisione

La scalabilità a livello di revisione è disponibile solo per i servizi per cui la funzionalità era stata configurata in precedenza.

Per visualizzare le impostazioni attuali del numero minimo di istanze a livello di revisione per il tuo servizio Cloud Run:

Console

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

    Vai a Cloud Run

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

  3. Fai clic sulla scheda Scalabilità.

  4. Trova l'impostazione Numero minimo di istanze nella sezione Scalabilità delle revisioni.

gcloud

  1. Utilizza il seguente comando:

    gcloud run services describe SERVICE
  2. Individua il valore di Min instances: nella configurazione restituita.

Esempi

Le sezioni seguenti mostrano il comportamento del servizio durante la configurazione del numero minimo di istanze.

Utilizza il numero minimo o massimo di istanze sia a livello di servizio che di revisione

Puoi combinare il numero minimo o massimo di istanze a livello di servizio e di revisione. Quando li configuri entrambi, i limiti finali delle istanze sono determinati dalle seguenti regole:

  • I limiti massimi hanno sempre la precedenza sui limiti minimi: qualsiasi limite massimo configurato a livello di servizio o di revisione impedisce rigorosamente al sistema di scalare oltre quel valore, indipendentemente dalle impostazioni minime.
  • Per i limiti minimi, vince il più grande: quando sono attivi più limiti minimi e non sono bloccati da un limite massimo, il gestore della scalabilità automatica soddisfa il limite minimo più alto.
Servizio Revisione Regola di risoluzione Comportamento conseguente
Min Min Vincite minime più alte Se il numero minimo di istanze del servizio è 10 e quello della revisione è 5, la revisione esegue 10 istanze per soddisfare il numero minimo globale più elevato.
Min Max Il numero massimo di istanze della revisione sostituisce il numero minimo di istanze del servizio Se il numero minimo di istanze del servizio è 10, ma il numero massimo di istanze della revisione è 5, la revisione è limitata rigorosamente a 5 istanze.
Max Min Il numero massimo di istanze del servizio sostituisce il numero minimo di istanze della revisione Se il numero massimo di istanze del servizio è 5, ma il numero minimo di istanze della revisione è 10, la revisione è limitata rigorosamente a 5 istanze.
Max Max Vincite massime più basse Se il numero massimo di istanze del servizio è 5 e quello della revisione è 10, la revisione è limitata a 5 istanze.

Cloud Run risolve i vincoli di capacità calcolando innanzitutto il numero massimo di istanze effettive (il valore più piccolo tra i massimi a livello di servizio e di revisione). Quindi determina il numero minimo di istanze effettive (il valore maggiore tra il numero minimo a livello di revisione e il numero minimo a livello di servizio allocato), limitando il risultato al numero massimo effettivo.

Se non configuri un valore, il gestore della scalabilità automatica utilizza i valori predefiniti, ad esempio 0 per le istanze minime a livello di servizio e di revisione e 100 per le istanze massime a livello di revisione.

Utilizza il numero minimo di istanze a livello di servizio con la suddivisione del traffico

Se utilizzi la suddivisione del traffico, le istanze minime a livello di servizio vengono divise tra le revisioni in base alla proporzione della suddivisione del traffico. Ad esempio, se il numero minimo di istanze a livello di servizio è 10, una suddivisione del traffico 50/50 assegna 5 istanze minime a livello di servizio a ogni revisione.

La tabella seguente mostra alcuni scenari di configurazione di esempio:

Caso d'uso di esempio Minuti di servizio Revisione A Revisione B Suddivisione traffico Comportamento conseguente
Nessuna impostazione a livello di revisione 10 Min: 0 Min: 0 60/40 La revisione A riceve 6 istanze dal numero minimo di istanze a livello di servizio proporzionale alla suddivisione del traffico. La revisione B riceve 4 istanze dal numero minimo di istanze a livello di servizio proporzionale alla suddivisione del traffico.
Ricezione di un numero di istanze superiore al numero minimo di istanze a livello di servizio a causa del numero minimo di istanze a livello di revisione 10 Min: 6 Min: 0 50/50 La revisione A riceve 6 istanze dal numero minimo di istanze a livello di revisione. La revisione B riceve 5 istanze dal numero minimo di istanze a livello di servizio proporzionale alla suddivisione del traffico. Questo valore supera il numero minimo di istanze a livello di servizio ed è intenzionale.
Ricezione di un numero di istanze inferiore al minimo a livello di servizio a causa del numero massimo di istanze a livello di revisione 10 Min: 0
Max: 3
Min: 0 50/50 La revisione A riceve 3 istanze dal numero minimo di istanze a livello di servizio in base alla suddivisione del traffico, ma è limitata al numero massimo di istanze a livello di revisione.

La revisione B riceve 5 istanze dal numero minimo di istanze a livello di servizio proporzionale alla suddivisione del traffico. In questo modo, vengono create 8 istanze a livello di servizio, poiché 2 vengono perse a causa del numero massimo di istanze a livello di revisione della revisione A.
Il numero minimo di istanze a livello di servizio è maggiore del numero di revisioni nella suddivisione del traffico ed è presente una quantità frazionaria di istanze proporzionale alla suddivisione del traffico 3 Min: 0 Min: 0 50/50 Le allocazioni frazionarie (1,5 istanze ciascuna) vengono arrotondate. La prima revisione elencata nella sezione Traffico riceve il valore arrotondato per eccesso: la revisione B (elencata per prima) riceve 2 istanze e la revisione A ne riceve 1. Il numero totale di istanze è 3.

Determina il numero minimo di istanze necessarie

Se il numero minimo di istanze è impostato su un valore superiore a quello richiesto per il traffico tipico, molte istanze potrebbero diventare leggermente attive, ognuna delle quali elabora alcune richieste. Ad esempio, se il servizio richiede in genere 200 istanze per il carico di picco, ma il numero minimo di istanze è configurato su 600, le richieste in entrata verranno distribuite su tutte le 600 istanze. Di conseguenza, molte di queste 600 istanze diventano parzialmente attive, ognuna gestendo una piccola parte del traffico, invece di avere circa 200 istanze altamente attive e le restanti 400 completamente inattive.

Per ridurre al minimo i costi (utilizzando un numero maggiore di istanze), imposta il numero minimo di istanze su un valore che si avvicini al numero effettivo di istanze necessarie per gestire il traffico tipico.

Inoltre, quando la scalabilità automatica esegue il provisioning di istanze aggiuntive oltre al numero minimo di istanze configurate, Cloud Run preferisce instradare le richieste in entrata prima alle istanze minime configurate e poi alle istanze con scalabilità automatica. Con la fatturazione basata sulle richieste, questo routing preferenziale alle istanze minime configurate riduce i costi riempiendo le istanze minime configurate prima di utilizzare le istanze con scalabilità automatica. Tieni presente che questo routing preferenziale può anche comportare un utilizzo più elevato delle istanze minime configurate rispetto alle istanze con scalabilità automatica, a seconda della quantità di traffico.