Seleziona un ambiente di esecuzione per i servizi

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

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

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

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

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

Entrambi gli ambienti di esecuzione hanno gli stessi prezzi. Per maggiori dettagli, 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 e i pool di worker di Cloud Run utilizzano solo l'ambiente di esecuzione di seconda generazione e non possono essere modificati.

Come scegliere un ambiente di esecuzione

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

  • Il tuo servizio Cloud Run ha un traffico burst e deve eseguire rapidamente lo scale out a molte istanze oppure il servizio è sensibile ai tempi di avvio a freddo.
  • Il tuo servizio Cloud Run ha un traffico poco frequente che causa un frequente scale out da zero.
  • Vuoi utilizzare meno di 512 MiB di memoria. L'ambiente di esecuzione di seconda generazione richiede almeno 512 MiB di memoria.

Dovresti utilizzare la seconda generazione se si verifica una delle seguenti condizioni per il tuo servizio Cloud Run:

  • Il tuo servizio deve utilizzare NFS, che è supportato solo dalla seconda generazione.
  • Il tuo servizio ha un traffico abbastanza costante ed è tollerante agli avvii a freddo leggermente più lenti.
  • Il tuo servizio ha carichi di lavoro che richiedono un utilizzo 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 il traffico a una rete VPC e richiede le migliori prestazioni di rete possibili.
  • Il tuo servizio deve utilizzare 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 altri ruoli concessi nel tuo progetto e nel 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 è non specificato, 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 Google Cloud console, 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 Google Cloud console, 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 di una nuova revisione.

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

  4. Fai clic sulla scheda Container.

    immagine

    • Seleziona l'ambiente di esecuzione desiderato utilizzando i pulsanti di opzione. Mantieni "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 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 il deployment 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 di 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 google_cloud_run_v2_service risorsa 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.

Visualizzare le impostazioni dell'ambiente di esecuzione

Per visualizzare le impostazioni correnti dell'ambiente di esecuzione per il tuo servizio Cloud Run:

Console

  1. Nella Google Cloud console, 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 viene arrestata, riceve un SIGTERM segnale per consentire un arresto normale di 10 secondi.

Gestire il segnale SIGTERM

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

La gestione di SIGTERM consente al container di eseguire le attività di pulizia necessarie, ad esempio lo scaricamento dei log prima di uscire. Se il container non rileva SIGTERM, gli verranno comunque concessi 10 secondi per eseguire queste attività; questi 10 secondi vengono fatturati.

Come verificare se il container gestisce SIGTERM

Per determinare se nel container è installato un gestore SIGTERM:

  1. Avvia Cloud Shell. Puoi trovare Pulsante Attiva Cloud Run Attiva Cloud Shell nell'intestazione della pagina della documentazione in cui ti trovi. Potresti dover autorizzarlo e attendere il provisioning. In alternativa, avvia una sessione autonoma.

  2. Esegui il container in locale 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 di 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 container restituito dal comando.

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

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

Come gestire SIGTERM

Se il 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