Configurare i mount dei volumi in memoria per i job

Questa pagina descrive come configurare un volume in memoria dedicato che puoi 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.

Quando monti il volume in memoria in Cloud Run, il volume in memoria viene visualizzato come file nel file system del container. Dopo aver montato il volume in memoria, puoi accedervi come se fosse una directory nel file system locale, utilizzando le operazioni e le librerie del file system del linguaggio di programmazione.

Puoi utilizzare i volumi in memoria per:

  • Limitare le dimensioni del volume in memoria. Quando limiti le dimensioni di un volume, le scritture in un volume completo non andranno a buon fine, il che è preferibile rispetto alla terminazione delle istanze di Cloud Run perché il volume consuma troppa memoria.

Comportamento

Quando crei un volume in memoria, ti consigliamo di specificare un limite di dimensioni. Se il volume raggiunge il limite di dimensioni, le scritture successive non andranno a buon fine e verrà visualizzato un errore di memoria insufficiente. La tua istanza può gestire questo errore e continuare a essere eseguita.

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

Se non specifichi un limite di dimensioni, questo viene impostato automaticamente sulla metà delle dimensioni totali di tutti i container nell'attività del job. Ad esempio, dimensioni del volume emptyDir = [Memoria (Container A) + Memoria (Container B) + Memoria (Container N)]/2. Questo comportamento predefinito può comportare che il limite di dimensioni del volume in memoria sia superiore alla memoria allocata per alcuni container. Ciò può causare arresti anomali imprevisti se un singolo container supera la memoria allocata mentre tenta di scrivere più dati nel volume, anche se il limite di dimensioni del volume non è stato raggiunto.

Anche se l'impostazione di un limite di dimensioni è facoltativa, ti consigliamo di impostarne uno per proteggere i container dall'out of memory e dall'arresto anomalo.

Percorsi non consentiti

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

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare i job Cloud Run, 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 job Cloud Run interagisce con Google Cloud le API, 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.

Configurare un volume in memoria

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

Console

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

    Vai a Cloud Run

  2. Fai clic su Esegui il deployment del container per compilare la pagina delle impostazioni iniziali del job. Se stai configurando un job esistente, selezionalo e fai clic su Visualizza e modifica la configurazione del job.

  3. Fai clic su Container, connessioni, sicurezza per espandere la pagina delle proprietà del job.

  4. Fai clic sulla scheda Volumi.

    • Fai clic su Monta volume.
    • Fai clic su In memoria come tipo di volume.
    • Nel campo Percorso di montaggio, inserisci il percorso in cui vuoi montare il volume.
    • Nel campo Nome volume, inserisci il nome del volume.
    • (Facoltativo) Inserisci il limite di dimensioni e l' unità di memoria per specificare il limite di memoria che vuoi assegnare al volume. Questo limite deve essere inferiore alla memoria totale specificata per i container. I dati archiviati in questo volume consumano la memoria riservata dal container che ha scritto i dati.
    • Fai clic su Salva.
  5. Fai clic su Crea o Aggiorna.

gcloud

  • Per montare un volumethird_party/devsite/cloud/en/run/docs/images/nfs-volume-mount.png:

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

    Sostituisci quanto segue:

    • JOB: il nome del job.
    • MOUNT_PATH: il percorso relativo all'interno del file system del container in cui vuoi montare questo volume, ad esempio /mnt/my-volume.
    • SIZE_LIMIT: 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, poi i montaggi dei volumi per ogni container:

    gcloud 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
    spec:
      template:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: MOUNT_PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory

    Sostituisci quanto segue:

    • IMAGE_URL: un riferimento all' immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/job:latest.
    • VOLUME_NAME: qualsiasi nome che vuoi per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al montaggio del volume.
    • MOUNT_PATH: il percorso relativo all'interno del file system del container in cui vuoi montare questo volume, ad esempio /mnt/my-volume.
    • SIZE_LIMIT: 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. Crea o aggiorna il job utilizzando il seguente comando:

    gcloud run jobs replace job.yaml

    Il comando gcloud run jobs replace utilizza per impostazione predefinita il file job.yaml, se presente.

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Aggiungi quanto segue a una google_cloud_run_v2_job risorsa nella configurazione Terraform:

resource "google_cloud_run_v2_job" "default" {
  name     = "JOB_NAME"
  location = "REGION"

  template {
    template {
      containers {
        image = "IMAGE_URL"
    volume_mounts {
      name = "VOLUME_NAME"
      mount_path = "MOUNT_PATH"
    }
      }
      volumes {
        name = "VOLUME_NAME"
    empty_dir {
      medium = "MEMORY"
      size_limit = "SIZE_LIMIT"
    }
      }
    }
  }
}

Sostituisci quanto segue:

  • JOB_NAME: il nome del job Cloud Run.
  • REGION con the Google Cloud region. Ad esempio, europe-west1.
  • IMAGE_URL: un riferimento all' immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/job:latest.
  • VOLUME_NAME: qualsiasi nome che vuoi per il volume. Il valore VOLUME_NAME viene utilizzato per mappare il volume al montaggio del volume.
  • MOUNT_PATH: il percorso relativo all'interno del file system del container in cui vuoi montare questo volume, ad esempio /mnt.
  • SIZE_LIMIT: il limite di memoria che vuoi assegnare al volume, in MiB o GiB (specificato come Mi o Gi), ad esempio 128Mi. Questo limite deve essere inferiore alla memoria totale specificata per i container.

Leggere e scrivere in un volume

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

Questa funzionalità è particolarmente utile se utilizzi un container esistente che prevede che i dati vengano archiviati nel file system locale e utilizza le normali operazioni del file system per accedervi.

I seguenti snippet presuppongono un montaggio del volume con un 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")

Vai

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");

Cancellare e rimuovere volumi e montaggi dei volumi

Puoi cancellare tutti i volumi e i montaggi oppure rimuovere singoli volumi e montaggi dei volumi.

Cancellare tutti i volumi e i montaggi dei volumi

Per cancellare tutti i volumi e i montaggi dei volumi dal job a container singolo, esegui il seguente comando:

gcloud run jobs update JOB \
    --clear-volumes \
    --clear-volume-mounts
Se hai più container, segui le convenzioni CLI dei sidecar per cancellare volumi e montaggi dei volumi:

gcloud run jobs update JOB \
    --clear-volumes \
    --clear-volume-mounts \
    --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 dei volumi, utilizza i remove-volume e remove-volume-mount flag:

gcloud run jobs update JOB \
    --remove-volume VOLUME_NAME
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH