Volumi in memoria (servizi)

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

  1. Vai a Cloud Run

  2. Fai clic sul servizio che vuoi configurare.

  3. Fai clic sulla scheda YAML.

  4. Configura gli attributi volumeMounts e volumes 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 forma REGION-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.
  5. 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.

  1. Per visualizzare e scaricare la configurazione:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Configura gli attributi volumeMounts e volumes 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 forma REGION-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.
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml