Configura un disco temporaneo per i servizi Cloud Run

Cloud Run fornisce un volume del disco temporaneo che persiste solo per la durata dell'istanza. Questa funzionalità ti consente di specificare la quantità di disco di cui hai bisogno e la posizione per il montaggio. Cloud Run allocherà quindi quell'importo di spazio su disco alla tua risorsa.

I dischi vengono sottoposti al provisioning automatico, preformattati in ext4 e criptati con chiavi specifiche dell'istanza all'avvio. Il disco temporaneo crea il volume in modo che qualsiasi utente possa leggerlo o scriverci. Poiché lo spazio di archiviazione è temporaneo, tutti i dati vengono eliminati definitivamente quando l'istanza viene arrestata. Sono inclusi gli arresti anomali causati da:

  • Arresti anomali dell'istanza
  • Scalabilità del servizio
  • Migrazione del traffico a una nuova revisione

I dischi sono dedicati a un'istanza specifica e non sono condivisi tra altre istanze o revisioni. Hai il controllo sulla struttura del file system con un punto di montaggio configurabile per ogni volume.

Prima di arrestare un'istanza, Cloud Run invia un segnale SIGTERM a tutti i container di un'istanza, indicando l'inizio di un periodo di 10 secondi prima dell'arresto effettivo, momento in cui Cloud Run invia un segnale SIGKILL. Puoi utilizzare questa finestra di 10 secondi per eseguire operazioni di pulizia come l'esecuzione di un ultimo ciclo di copia dell'archiviazione permanente dei contenuti del disco.

Casi d'uso

Puoi utilizzare il disco temporaneo per:

  • Carichi di lavoro di elaborazione dei dati: quando elabori file di dati di grandi dimensioni in Cloud Run, in genere memorizzi l'intero file in memoria o orchestri la suddivisione in parti più piccole. Con l'archiviazione temporanea, non dovrai pagare grandi quantità di memoria per creare una copia locale temporanea dei tuoi dati. Potrai anche elaborare set di dati più grandi.
  • Memorizzazione nella cache: nei casi d'uso di web serving, la memorizzazione nella cache dei dati su disco anziché il recupero dall'archiviazione remota può ottimizzare la latenza dell'applicazione.

Limiti di spazio di archiviazione e istanze

I limiti sono i seguenti:

  • Limite di spazio di archiviazione istanza: per impostazione predefinita, ogni istanza è limitata a 10 GB di spazio totale. Se necessario, richiedi un aumento della quota.
  • Limite di volumi per istanza: ogni istanza è limitata a un massimo di 10 volumi.
  • Limite del progetto: per impostazione predefinita, ogni progetto è limitato a 100 GB per regione. Se necessario, richiedi un aumento della quota.

Richiedi un aumento della quota

Ai progetti che utilizzano per la prima volta un disco temporaneo Cloud Run in una regione vengono concessi automaticamente 10 GB per istanza, per limite di regione e 100 GB per progetto, per limite di regione.

Se hai bisogno di ulteriore capacità, devi richiedere un aumento della quota per il tuo servizio Cloud Run. Utilizza i link forniti nei seguenti pulsanti per richiedere la quota di cui hai bisogno.

Quota attuale Link alla quota
10 GB per istanza Richiedere una quota maggiore per istanza
100 GB per progetto Richiedere una quota maggiore per progetto

Per ulteriori informazioni sulla richiesta di aumenti di quota, vedi Come aumentare la quota.

Limitazioni

Il disco temporaneo è disponibile solo nell'ambiente di esecuzione di seconda generazione.

Percorsi non consentiti

Cloud Run non consente di montare un volume in /dev, /proc o /sys o nelle relative sottodirectory.

Aree geografiche supportate

La funzionalità del disco temporaneo è disponibile nelle seguenti regioni:

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Installa e inizializza gcloud CLI.
  7. Aggiorna i componenti:
    gcloud components update
  8. Consulta la pagina Prezzi di Cloud Run per CPU, memoria e traffico di rete in uscita. L'intera dimensione del disco di cui è stato eseguito il provisioning e la durata dell'istanza che lo utilizza contribuiscono al costo.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare un disco temporaneo, chiedi all'amministratore di concederti i seguenti ruoli IAM:

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.

Crea e monta un disco temporaneo

Puoi creare e montare un disco temporaneo utilizzando la console Google Cloud , Google Cloud CLI o Terraform:

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 Contenitori, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Contenitore.

    immagine

    • In Risorse:
      • Seleziona Disco temporaneo.
      • Specifica le dimensioni del disco temporaneo dal menu.
      • Inserisci il percorso di montaggio.
  5. Fai clic su Crea o Esegui il deployment.

gcloud

Per aggiungere un volume e montarlo:

gcloud beta run services update SERVICE \
    --execution-environment=gen2 \
    --add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

Sostituisci quanto segue:

  • SERVICE: il nome del servizio.
  • VOLUME_NAME: il nome che vuoi assegnare al volume.
  • SIZE: le dimensioni del disco, ad esempio 100Gi. La dimensione deve essere almeno 10Gi per i volumi ephemeral-disk.
  • MOUNT_PATH: il percorso relativo in cui stai montando il volume, ad esempio /mnt/my-volume.

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     = "SERVICE"
    location = "REGION"
    launch_stage = "BETA"
    deletion_protection =  "true"
    ingress = "INGRESS_TRAFFIC_ALL"

  template {
    containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
    }
    volumes {
        name = "VOLUME_NAME"
        empty_dir {
          medium = "DISK"
          size_limit = "SIZE"
        }
    }
  }
  lifecycle {
    ignore_changes = [
      launch_stage,
    ]
  }
}

Sostituisci quanto segue:

  • SERVICE: il nome del servizio.
  • REGION: la Google Cloud regione.
  • 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 .
  • VOLUME_NAME: il nome che vuoi assegnare al volume.
  • MOUNT_PATH: il percorso relativo in cui stai montando il volume, ad esempio /mnt/my-volume.
  • SIZE: le dimensioni del disco, ad esempio 100Gi. La dimensione deve essere almeno 10Gi per i volumi ephemeral-disk.

Lettura e scrittura in un volume

Se utilizzi la funzionalità di montaggio del volume di Cloud Run, accedi a un volume montato utilizzando le stesse librerie nel tuo linguaggio di programmazione che utilizzi per leggere e scrivere file nel file system locale.

Ciò è particolarmente utile se utilizzi un container esistente che prevede che i dati vengano archiviati nel file system locale e utilizza operazioni regolari del file system per accedervi.

I seguenti snippet presuppongono un montaggio del volume con mountPath impostato su /mnt/my-volume.

Nodejs

Utilizza il modulo File System per creare un nuovo file o aggiungere contenuti a un file esistente nel volume, /mnt/my-volume:

var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });

Python

Scrivi in un file conservato nel volume, /mnt/my-volume:

f = open("/mnt/my-volume/sample-logfile.txt", "a")

Go

Utilizza il pacchetto os per creare un nuovo file conservato nel volume, /mnt/my-volume:

f, err := os.Create("/mnt/my-volume/sample-logfile.txt")

Java

Utilizza la classe Java.io.File per creare un file di log nel volume /mnt/my-volume:

import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");

Cancella e rimuovi volumi e montaggi dei volumi

Puoi cancellare tutti i volumi e i punti di montaggio oppure rimuovere singoli volumi e punti di montaggio.

Cancella tutti i volumi e i relativi punti di montaggio

Per cancellare tutti i volumi e i relativi montaggi dal servizio a singolo container, esegui questo comando:

gcloud run services update SERVICE \
    --clear-volumes
    --clear-volume-mounts

Se hai più container, segui le convenzioni della CLI sidecar per cancellare i volumi e i montaggi dei volumi:

gcloud run services update SERVICE \
    --container=container1 \
    --clear-volumes
    -–clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    -–clear-volume-mounts

Rimuovere singoli volumi e montaggi dei volumi

Per rimuovere un volume, devi rimuovere anche tutti i montaggi dei volumi che lo utilizzano.

Per rimuovere singoli volumi o montaggi di volumi, utilizza i flag remove-volume e remove-volume-mount:

gcloud run services update SERVICE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH

Best practice

Segui queste best practice per gestire in modo efficace i dati temporanei e ottimizzare le prestazioni di archiviazione.

Copia nell'archiviazione permanente

Se intendi copiare i contenuti del disco temporaneo in uno spazio di archiviazione permanente, ad esempio un bucket Cloud Storage, ti consigliamo di eseguire la copia in modo incrementale anziché fare affidamento sul periodo di tolleranza di 10 secondi da SIGTERM a SIGKILL. Per ulteriori informazioni sugli arresti delle istanze, consulta Contratto di runtime del container.

Cloud Run può leggere e scrivere da Cloud Storage senza alcuna configurazione di rete aggiuntiva. Per ottenere prestazioni ottimali, ti consigliamo di instradare il traffico da e verso Cloud Storage tramite una rete VPC utilizzando il VPC diretto.

Questo metodo funziona se la risorsa Cloud Run non deve accedere a internet. Se hai bisogno dell'accesso a internet, configura Cloud NAT o consulta Traffico interno a un'API di Google.

Per configurare l'uscita VPC diretta con un servizio, completa i seguenti passaggi:

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

    Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio di cui stai eseguendo il deployment. Se stai configurando ed eseguendo il deployment di 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 come necessario, poi fai clic su Contenitori, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Networking.

  5. Fai clic su Connettiti a un VPC per il traffico in uscita.

  6. Fai clic su Invia il traffico direttamente a un VPC.

  7. Nel campo Rete, seleziona la rete VPC a cui vuoi inviare il traffico.

  8. Nel campo Subnet, seleziona la subnet da cui il servizio riceve gli indirizzi IP. Puoi eseguire il deployment di più servizi nella stessa subnet.

  9. Per il routing del traffico, seleziona Instrada tutto il traffico al VPC per inviare tutto il traffico in uscita attraverso la rete VPC.

    1. Fai clic su Crea o Esegui il deployment.

    2. Per verificare che il servizio si trovi sulla rete VPC, fai clic sul servizio, quindi fai clic sulla scheda Networking. La rete e la subnet sono elencate nella scheda VPC.

      Ora puoi inviare richieste dal tuo servizio Cloud Run a qualsiasi risorsa sulla rete VPC, come consentito dalle regole firewall.

    3. Abilita l'accesso privato Google sulla subnet a cui ti sei connesso.

Risoluzione dei problemi

Se riscontri problemi, controlla quanto segue:

  • Se il contenitore sta esaurendo la memoria e hai utilizzato la console Google Cloud per deployare una nuova revisione di un servizio con un disco temporaneo collegato, è probabile che la console Google Cloud abbia convertito il volume del disco in un volume in memoria. In questo modo, le scritture sul disco vengono scritte in memoria, causando l'esaurimento della memoria del container. Per risolvere il problema, riesegui nuovamente il deployment del servizio utilizzando gcloud CLI e assicurati che il file YAML specifichi medium: Disk in volumes.
  • Se noti velocità di rete lente durante il download di una grande quantità di dati sul disco temporaneo, segui i passaggi per attivare Direct VPC. Se Direct VPC non è abilitato, le velocità di trasferimento di rete saranno più lente.