Informazioni sugli ambienti di esecuzione

Per impostazione predefinita, per i servizi Cloud Run non è specificato un ambiente di esecuzione. Ciò 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.

Tieni presente che i job Cloud Run utilizzano solo l'ambiente di esecuzione di seconda generazione e questo valore non può essere modificato per i job.

L'ambiente di esecuzione di prima generazione offre tempi di avvio a freddo rapidi ed emulazione della maggior parte delle chiamate al sistema operativo, ma non di tutte. Inizialmente, questo era l'unico ambiente di esecuzione disponibile per i servizi in Cloud Run.

L'ambiente di esecuzione di seconda generazione offre una compatibilità Linux completa anziché l'emulazione di 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
  • Compatibilità Linux completa, compreso il supporto per tutte le chiamate di sistema, gli spazi dei nomi e cgroups
  • Supporto del file system di rete

Sebbene l'ambiente di esecuzione di seconda generazione in generale abbia prestazioni più veloci sotto carico sostenuto, per la maggior parte dei servizi presenta tempi di avvio a freddo più lunghi rispetto alla prima generazione.

Puoi selezionare l'ambiente di esecuzione per il tuo servizio Cloud Run quando esegui il deployment di un nuovo servizio o di una nuova revisione del tuo servizio. Se non specifichi un ambiente di esecuzione, per impostazione predefinita viene utilizzata la prima generazione.

Come scegliere un ambiente di esecuzione

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

  • Il tuo servizio Cloud Run ha un traffico intenso e deve fare lo scale out veloce per un maggior numero di istanze oppure è sensibile ai tempi di avvio a freddo.
  • Il tuo servizio Cloud Run ha un traffico sporadico che causa frequenti 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 una delle seguenti condizioni si applica al tuo servizio Cloud Run:

  • Il servizio deve utilizzare un file system di rete, supportato solo dalla seconda generazione.
  • Il servizio ha un traffico abbastanza costante e tollera avvii a freddo leggermente più lenti.
  • Il tuo servizio ha carichi di lavoro che consumano molta CPU.
  • Il tuo servizio potrebbe trarre vantaggio da prestazioni di rete più veloci.
  • Il servizio deve utilizzare un software che presenta problemi in esecuzione nella prima generazione a causa di chiamate di sistema non implementate.
  • Il tuo servizio richiede la funzionalità cgroup Linux.
  • Il tuo servizio utilizza un'infrastruttura di terze parti per proteggere i container.

Best practice per l'utilizzo dell'ambiente di esecuzione di seconda generazione

Consigliamo di fare in modo che il container installi un gestore SIGTERM, soprattutto se utilizzi il modello di fatturazione CPU on demand.

La gestione di SIGTERM offre al container la possibilità di eseguire le attività di pulizia necessarie, come lo svuotamento dei log prima di uscire. Se il container non rileva SIGTERM, gli saranno comunque concessi 10 secondi per eseguire queste attività, che sono fatturabili.

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 suo 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à creato. L'URL ha la forma LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

  3. Apri un'altra scheda in Cloud Shell e ottieni un elenco dei container in esecuzione nell'attuale sessione di Cloud Shell:

    docker container ls

    Devi individuare l'ID container restituito dal comando.

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

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

Come gestire SIGTERM

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

In alternativa, puoi modificare la tua applicazione in modo da gestire direttamente SIGTERM.

Passaggi successivi