In questa pagina viene descritto come configurare un volume in memoria dedicato che puoi utilizzare per le letture e le scritture di file.
Questa funzionalità è diversa dal file system in memoria integrato fornito da Cloud Run, che non limita la memoria utilizzata per le operazioni di scrittura di file in memoria. Utilizzando i volumi in memoria, puoi limitare la quantità di memoria che può essere consumata.
Comportamento
Dopo aver configurato un volume in memoria per il servizio Cloud Run, viene creato un volume vuoto per ogni istanza Cloud Run avviata ed esiste finché l'istanza è in esecuzione. Quando l'istanza viene interrotta, i dati nel volume vengono eliminati definitivamente.
Se specifichi un limite per un volume in memoria e poi lo superi durante la scrittura sul volume, riceverai un errore di memoria insufficiente, che puoi gestire, e l'istanza continuerà a essere eseguita. Se non specifichi un limite per le dimensioni del volume e superi il limite di memoria dell'istanza durante la scrittura nel volume, l'istanza si arresta in modo anomalo.
La proprietà dei volumi varia in base all'ambiente di esecuzione e al tipo di deployment
Quando monta un volume, l'identità proprietaria dei file e delle directory varia a seconda dell'ambiente di esecuzione del carico di lavoro e se il deployment è costituito da uno o più container.
Nell'ambiente di esecuzione di prima generazione in cui esegui il deployment di un singolo container, il volume è di proprietà dell'identità utilizzata per il container. In tutti gli altri casi, il volume è di proprietà dell'account root. Ciò include:
- Ambiente di esecuzione di prima generazione in cui esegui il deployment di più container
- L'ambiente di seconda generazione
Casi d'uso
I casi d'uso per un volume in memoria includono l'allocazione dello spazio temporaneo o l'esecuzione di checkpoint di un calcolo lungo per evitare arresti anomali.
Configurare un volume in memoria
Ogni 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.
Se specifichi un limite per le dimensioni della memoria per il volume, la memoria viene allocata dalla memoria utilizzata da tutti i singoli container nell'istanza che accedono a questo volume. Se specifichi una dimensione del volume in memoria superiore alla somma totale di tutta la memoria utilizzata dai container nell'istanza, per impostazione predefinita il volume corrisponderà alla somma totale utilizzata dai container.
Se non specifichi un limite per le dimensioni della memoria per un volume, puoi potenzialmente superare il limite di memoria dell'istanza e arrestare l'istanza.
Se utilizzi il volume in memoria come volume condiviso in un
deployment multicontainer senza
specificare un limite per le dimensioni in memoria, metà della memoria totale dell'istanza disponibile viene allocata per il volume condiviso. Ad esempio, dimensione del volume emptyDir
= [Memoria (contenitore A) + Memoria (contenitore B) + Memoria (contenitore N)]/2.
Console
Fai clic sul servizio che vuoi configurare.
Fai clic sulla scheda YAML.
Configura gli attributi
volumeMounts
evolumes
come mostrato di seguito:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME emptyDir: sizeLimit: SIZE_LIMIT medium: Memory
sostituisci
- SERVICE con il nome del tuo servizio Cloud Run.
- 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 formaREGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- PATH con il percorso relativo al volume, ad esempio
/cache
. - VOLUME_NAME con il nome che vuoi utilizzare per il volume in memoria.
- SIZE_LIMIT con il limite di memoria che vuoi assegnare al volume, in
MiB o GiB (specificati come Mi o Gi), ad esempio
500Mi
. Questo limite deve essere inferiore alla memoria totale specificata per i container.
Fai clic su Save and Deploy new Revision (Salva ed esegui il deployment di una nuova revisione).
YAML
Puoi scaricare e visualizzare le configurazioni di servizio esistenti utilizzando il comando gcloud run services describe --format export
, che restituisce risultati puliti in formato YAML.
Puoi quindi modificare i campi descritti di seguito e
caricare il file YAML modificato usando il comando gcloud run services replace
.
Assicurati di modificare solo i campi come documentato.
Per visualizzare e scaricare la configurazione:
gcloud run services describe SERVICE --format export > service.yaml
Configura gli attributi
volumeMounts
evolumes
come mostrato di seguito:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME emptyDir: sizeLimit: SIZE_LIMIT medium: Memory
Sostituisci:
- SERVICE con il nome del tuo servizio Cloud Run.
- 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 formaREGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- PATH con il percorso relativo al volume, ad esempio
/cache
. - VOLUME_NAME con il nome che vuoi utilizzare per il volume in memoria.
- SIZE_LIMIT con il limite di memoria che vuoi assegnare al volume, in
MiB o GiB (specificati come Mi o Gi), ad esempio
500Mi
. Questo limite deve essere inferiore alla memoria totale specificata per i container.
Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:
gcloud run services replace service.yaml