Seleziona un ambiente di esecuzione per i servizi

Tutte le istanze Cloud Run sono in modalità sandbox. La tecnologia sandbox e le funzionalità disponibili variano a seconda dell'ambiente di esecuzione selezionato.

L'ambiente di esecuzione di prima generazione si basa su gVisor e offre tempi di avvio a freddo rapidi ed emulazione della maggior parte, ma non di tutte, le chiamate al sistema operativo.

L'ambiente di esecuzione di seconda generazione è una microVM e offre piena compatibilità con Linux anziché l'emulazione delle chiamate di sistema. Questo ambiente di esecuzione fornisce:

  • Prestazioni della CPU più rapide
  • Prestazioni di rete più veloci, soprattutto in presenza di perdita di pacchetti
  • Compatibilità Linux completa, incluso il supporto per tutte le chiamate di sistema, gli spazi dei nomi e i cgroup
  • Supporto del file system di rete

Sebbene l'ambiente di esecuzione di seconda generazione in genere funzioni più velocemente con un carico sostenuto, ha tempi di avvio a freddo più lunghi rispetto alla prima generazione per alcuni servizi.

Entrambi gli ambienti di esecuzione hanno lo stesso prezzo. Per informazioni dettagliate, consulta la pagina dei prezzi di Cloud Run.

Selezionare un ambiente di esecuzione per un servizio Cloud Run

Per impostazione predefinita, i servizi Cloud Run non hanno un ambiente di esecuzione specificato, il che significa che Cloud Run seleziona l'ambiente di esecuzione in base alle funzionalità utilizzate. Se non specifichi un ambiente di esecuzione per il tuo servizio, Cloud Run può selezionare l'ambiente di prima o seconda generazione.

I job Cloud Run e i pool di worker utilizzano solo l'ambiente di esecuzione di seconda generazione e questa impostazione non può essere modificata.

Come scegliere un ambiente di esecuzione

Devi utilizzare la prima generazione se si verifica una delle seguenti condizioni:

  • Il tuo servizio Cloud Run ha un traffico bursty e deve scalare rapidamente fino a molte istanze oppure il tuo servizio è sensibile ai tempi di avvio a freddo.
  • Il tuo servizio Cloud Run ha un traffico poco frequente che causa frequenti scalabilità orizzontale da zero.
  • Vuoi utilizzare meno di 512 MiB di memoria. L'ambiente di esecuzione di seconda generazione richiede almeno 512 MiB di memoria.

Devi utilizzare la seconda generazione se al tuo servizio Cloud Run si applica una delle seguenti condizioni:

  • Il tuo servizio deve utilizzare NFS, che è supportato solo dalla seconda generazione.
  • Il tuo servizio ha un traffico abbastanza costante e tollera avvii completi un po' più lenti.
  • Il tuo servizio ha carichi di lavoro che richiedono un uso intensivo della CPU.
  • Il tuo servizio potrebbe trarre vantaggio da prestazioni di rete più veloci.
  • Il tuo servizio utilizza l'uscita VPC diretto per inviare traffico a una rete VPC e richiede le migliori prestazioni di rete possibili.
  • Il tuo servizio deve utilizzare un software che presenta problemi di esecuzione nella prima generazione a causa di chiamate di sistema non implementate.
  • Il tuo servizio richiede la funzionalità cgroup di Linux.
  • Il tuo servizio utilizza un'infrastruttura di terze parti per proteggere i container.

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 disporre anche 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.

Impostare e aggiornare l'ambiente di esecuzione

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

Il valore predefinito per i servizi Cloud Run è unspecified, il che significa che Cloud Run seleziona un ambiente di esecuzione adatto. In alternativa, puoi specificare un ambiente di esecuzione. Per utilizzare la seconda generazione, devi specificare almeno 512 MiB di memoria.

Puoi impostare l'ambiente di esecuzione utilizzando la console Google Cloud , la riga di comando gcloud o un file YAML quando crei un nuovo servizio o esegui il deployment di una nuova revisione:

Console

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

    Vai a Cloud Run

  2. Seleziona Servizi dal menu di navigazione di Cloud Run e fai clic su Esegui il deployment del container per configurare un nuovo servizio. Se stai configurando un servizio esistente, fai clic sul servizio, quindi su Modifica ed esegui il deployment della nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina delle impostazioni iniziali del servizio, poi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Contenitore.

    immagine

    • Seleziona l'ambiente di esecuzione che preferisci utilizzando i pulsanti di opzione. Mantieni l'opzione "Predefinito" per consentire a Cloud Run di selezionare un ambiente di esecuzione adatto.
  5. Fai clic su Crea o Esegui il deployment.

gcloud

Puoi aggiornare l'ambiente di esecuzione per un determinato servizio utilizzando il seguente comando:

gcloud run services update SERVICE --execution-environment ENVIRONMENT

Sostituisci SERVICE con il nome del tuo servizio e ENVIRONMENT con l'ambiente di esecuzione desiderato. Specifica il valore gen1 per la prima generazione o gen2 per la seconda generazione.

Puoi anche impostare l'ambiente di esecuzione durante la distribuzione utilizzando il comando:

gcloud run deploy --image IMAGE_URL --execution-environment ENVIRONMENT

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 .
  • ENVIRONMENT: l'ambiente di esecuzione desiderato. Specifica il valore gen1 per la prima generazione o gen2 per la seconda generazione.

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. imposta l'annotazione run.googleapis.com/execution-environment:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: ENVIRONMENT

    Sostituisci quanto segue:

    • SERVICE: il nome del tuo servizio Cloud Run.
    • ENVIRONMENT: l'ambiente di esecuzione selezionato. Specifica il valore gen1 per la prima generazione o gen2 per la seconda generazione.

    Rimuovi l'annotazione run.googleapis.com/execution-environment per il comportamento predefinito.

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

    gcloud run services replace service.yaml

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-execution-environment"
  location = "REGION"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    execution_environment = "ENVIRONMENT"
  }
}

Sostituisci quanto segue:

  • REGION: la Google Cloud regione. Ad esempio europe-west1.
  • ENVIRONMENT: EXECUTION_ENVIRONMENT_GEN1 per la prima generazione o EXECUTION_ENVIRONMENT_GEN2 per la seconda generazione.

Visualizza le impostazioni dell'ambiente di esecuzione

Per visualizzare le impostazioni correnti dell'ambiente di esecuzione 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 la pagina Dettagli servizio.

  3. Fai clic sulla scheda Revisioni.

  4. Nel riquadro dei dettagli a destra, l'impostazione Ambiente di esecuzione è elencata nella scheda Container.

gcloud

  1. Utilizza il seguente comando:

    gcloud run services describe SERVICE
  2. Individua l'impostazione Ambiente di esecuzione nella configurazione restituita.

Arresti controllati

Quando un'istanza Cloud Run è in fase di arresto, riceve un segnale SIGTERM per consentire un arresto normale di 10 secondi.

Gestione del segnale SIGTERM

Ti consigliamo di installare un gestore SIGTERM nel container, soprattutto se utilizzi la fatturazione basata sulle richieste.

La gestione di SIGTERM offre al contenitore la possibilità di eseguire qualsiasi attività di pulizia necessaria, come lo svuotamento dei log prima di uscire. Se il container non rileva SIGTERM, avrà comunque 10 secondi di tempo per eseguire queste attività; questi 10 secondi sono fatturati.

Come verificare se il container gestisce SIGTERM

Per determinare se nel contenitore è installato un gestore SIGTERM:

  1. Avvia Cloud Shell. Puoi trovare Pulsante Attiva Cloud Run Attiva Cloud Shell nell'intestazione della pagina della documentazione che stai consultando. Potresti doverlo autorizzare e attendere il provisioning. In alternativa, avvia una sessione autonoma.

  2. Esegui il container localmente in Cloud Shell:

    docker run IMAGE_URL

    Sostituisci IMAGE_URL con 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 .

  3. Apri un'altra scheda in Cloud Shell e recupera un elenco dei container in esecuzione nella sessione di Cloud Shell corrente:

    docker container ls

    Devi individuare l'ID contenitore restituito dal comando.

  4. Utilizzando l'ID contenitore, invia un segnale SIGTERM al contenitore.

    docker kill -s SIGTERM CONTAINER_ID
  5. Torna alla scheda in cui hai richiamato docker run per vedere se il container è uscito (si è arrestato). Se il segnale SIGTERM ha causato l'uscita del container, il container gestisce SIGTERM.

Come gestire SIGTERM

Se il tuo container non gestisce SIGTERM, il modo più semplice per aggiungere un gestore SIGTERM è racchiudere il servizio con tini. In questo modo, il servizio viene eseguito come sottoprocesso di tini, che assume il ruolo di processo di inizializzazione del container. Per istruzioni, consulta le istruzioni di Docker.

In alternativa, puoi modificare l'applicazione per gestire direttamente SIGTERM.

Passaggi successivi