Informazioni sugli ambienti di esecuzione

Per impostazione predefinita, per i servizi Cloud Run non è specificato un ambiente di esecuzione, il che significa che Cloud Run seleziona l'ambiente di esecuzione in base alle funzionalità utilizzate. Pertanto, a meno che 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 che questo non può essere modificato per i job.

L'ambiente di esecuzione di prima generazione offre tempi di avvio a freddo rapidi ed emula la maggior parte, ma non tutte, le chiamate del sistema operativo. In origine, 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 delle chiamate di sistema. Questo ambiente di esecuzione fornisce:

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

Sebbene l'ambiente di esecuzione di seconda generazione in genere abbia un rendimento più elevato sotto carico sostenuto, i tempi di avvio a freddo sono più lunghi rispetto alla prima generazione per la maggior parte dei servizi.

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

Come scegliere un ambiente di esecuzione

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

  • Il tuo servizio Cloud Run presenta un traffico discontinuo e deve scalare rapidamente su molte istanze oppure è sensibile ai tempi di avvio a freddo.
  • Il tuo servizio Cloud Run ha un traffico infrequente che causa frequenti scalate 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 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 avviamenti a freddo leggermente più lenti.
  • Il tuo servizio ha carichi di lavoro che richiedono molta CPU.
  • Prestazioni di rete più veloci per il tuo servizio.
  • 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 di Linux.
  • Il tuo servizio utilizza l'infrastruttura di terze parti per proteggere i container.

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

Consigliamo di far installare al container un gestore SIGTERM, soprattutto se utilizzi il modello di fatturazione CPU on demand.

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

Come verificare se il contenitore gestisce SIGTERM

Per determinare se nel contenitore è installato un gestore SIGTERM:

  1. Avvia Cloud Shell. Puoi visualizzare Pulsante Attiva Cloud Run Attiva Cloud Shell nell'intestazione della documentazione pagina visualizzata. 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 del container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, il repository REPO_NAME deve essere già creati. 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 nella sessione di Cloud Shell corrente:

    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 invocato docker run per vedere se il contenitore è uscito (si è interrotto). Se l'indicatore SIGTERM ha provocato l'uscita del container, container gestisce SIGTERM.

Come gestire SIGTERM

Se il tuo container non gestisce SIGTERM, il modo più semplice per aggiungere un SIGTERM consiste nel eseguire il wrapping del tuo servizio con tini. In questo modo, il servizio viene eseguito come sottoprocesso di tini, che assume il ruolo del processo di inizializzazione del contenitore. Consulta le istruzioni di Docker per istruzioni.

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

Passaggi successivi