Configura i montaggi dei volumi in memoria per i job

Questa pagina descrive come configurare un volume in memoria dedicato da utilizzare per le letture e le scritture di file utilizzando i montaggi dei volumi di Cloud Run. Tieni presente che questa funzionalità è diversa dal file system in memoria integrato fornito da Cloud Run.

Puoi utilizzare i volumi in memoria per:

  • Limita le dimensioni del volume in memoria. Se si limitano le dimensioni di un volume, le scritture a un volume completo hanno esito negativo, il che è preferibile che le istanze Cloud Run siano terminate a causa del volume che consuma troppa memoria.
  • Condividi un volume in memoria tra container diversi in un'unica istanza Cloud Run.

Comportamento

Quando crei un volume in memoria, ti consigliamo di specificare un limite di dimensioni. Se il volume raggiunge il limite di dimensioni, le ulteriori scritture non riusciranno e genereranno un errore di memoria insufficiente. L'istanza può gestire questo errore e continuare a essere in esecuzione.

Tieni presente che il limite di dimensioni è solo un limite: non alloca spazio aggiuntivo per il tuo volume in memoria. Piuttosto, il volume in memoria consuma la memoria configurata per i container. Se esegui il deployment di più container, la memoria utilizzata da ogni scrittura nel volume viene conteggiata come memoria utilizzata per il container che ha scritto i dati.

Se non specifichi un limite, questo verrà impostato automaticamente sulla metà della dimensione totale di tutti i container nel job o nel servizio. Ad esempio, dimensione del volume emptyDir = [Memoria (container A) + Memoria (container B) + Memoria (container N)]/2. Questo comportamento predefinito può comportare che il limite delle dimensioni del volume in memoria sia superiore alla memoria allocata per alcuni dei container. In questa situazione, se il container continua a scrivere memoria nel volume, supererà la memoria allocata e si arresta in modo anomalo prima che venga raggiunto il limite delle dimensioni del volume.

L'impostazione di un limite di dimensione è facoltativa, ma ti consigliamo di impostarne uno per proteggere i container dalla perdita di memoria e dagli arresti anomali.

La proprietà del volume varia in base all'ambiente di esecuzione e al tipo di deployment

Quando monta un volume, l'identità a cui appartengono i file e le directory varia a seconda dell'ambiente di esecuzione del carico di lavoro e del fatto che il deployment sia costituito da uno o più container.

Nell'ambiente di esecuzione di prima generazione in cui esegui il deployment di un singolo container, il volume appartiene all'identità utilizzata per il container. In tutti gli altri casi, il volume è di proprietà della directory principale. Ciò include:

  • L'ambiente di esecuzione di prima generazione in cui esegui il deployment di più container
  • L'ambiente di seconda generazione

Configurare un volume in memoria

Qualsiasi modifica alla configurazione porta alla creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Dopo aver configurato un volume in memoria per il servizio Cloud Run, viene creato un volume vuoto per ogni istanza Cloud Run avviata e il volume esiste finché l'istanza è in esecuzione. Quando l'istanza arresta l'esecuzione, i dati nel volume vengono eliminati definitivamente.

Riga di comando

  • Per aggiungere un volume e montarlo:

    gcloud beta run jobs update JOB \
    --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Sostituisci:

    • JOB con il nome del tuo job.
    • VOLUME_NAME con il nome che preferisci per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al relativo montaggio.
    • MOUNT_PATH con il percorso relativo all'interno del file system del container in cui vuoi montare questo volume, ad esempio /cache.
    • SIZE_LIMIT con il limite di memoria che vuoi assegnare al volume, in MiB o GiB (specificato come Mi o Gi), ad esempio 500Mi. Questo limite deve essere inferiore alla memoria totale specificata per i container.
  • Se utilizzi più container, specifica prima i volumi, quindi specifica i montaggi dei volumi per ogni container:

    gcloud beta run jobs update JOB \
    --add-volume=name= VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
    --container=CONTAINER_1 \
    --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH \
    --container==CONTAINER_2 \
    --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

  1. Se stai creando un nuovo job, salta questo passaggio. Se stai aggiornando un job esistente, scarica la relativa configurazione YAML:

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Configura gli attributi volumeMounts e volumes come mostrato di seguito:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory
    

    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
    • VOLUME_NAME con il nome che preferisci per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al relativo montaggio.
    • MOUNT_PATH con il percorso relativo all'interno del file system del container in cui vuoi montare questo volume, ad esempio /cache.
    • SIZE_LIMIT con il limite di memoria che vuoi assegnare al volume, in MiB o GiB (specificato 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 beta run jobs replace job.yaml