Montages de volume en mémoire pour les jobs

Cette page explique comment configurer un volume en mémoire dédié à la lecture et à l'écriture de fichiers à l'aide d'installations de volume Cloud Run. Notez que cette fonctionnalité diffère du système de fichiers en mémoire intégré fourni par Cloud Run.

Vous pouvez utiliser des volumes en mémoire pour effectuer les opérations suivantes :

  • Limiter la taille du volume en mémoire. Lorsque vous limitez la taille d'un volume, les écritures sur un volume complet échouent, ce qui est préférable à ce que Cloud Run arrête des instances en raison d'un volume de mémoire trop important.
  • Partager un volume en mémoire entre différents conteneurs dans une même instance Cloud Run.

Comportement

Lors de la création d'un volume en mémoire, nous vous recommandons de spécifier une limite de taille. Si le volume atteint sa limite de taille, les écritures suivantes échouent avec une erreur de mémoire insuffisante. Votre instance peut gérer cette erreur et continuer de s'exécuter.

Notez que la limite de taille n'est qu'une limite : elle n'alloue pas d'espace supplémentaire pour votre volume en mémoire. En effet, votre volume en mémoire consomme la mémoire que vous avez configurée pour vos conteneurs. Si vous déployez plusieurs conteneurs, la mémoire utilisée par chaque écriture sur le volume compte comme l'utilisation de la mémoire pour le conteneur qui a écrit les données.

Si vous ne spécifiez pas de limite de taille, elle sera automatiquement définie sur la moitié de la taille totale de tous les conteneurs de votre tâche ou service. Par exemple, la taille du volume emptyDir = [mémoire (conteneur A) + mémoire (conteneur B) + mémoire (conteneur N)]/2. Ce comportement par défaut peut entraîner une limite de taille de la quantité de volume en mémoire supérieure à la mémoire allouée à certains de vos conteneurs. Dans ce cas, si votre conteneur continue d'écrire de la mémoire sur le volume, il dépassera sa mémoire allouée et plantera avant d'atteindre la limite de taille du volume.

Bien que la définition d'une limite de taille soit facultative, nous vous recommandons d'en définir une pour éviter que vos conteneurs ne manquent de mémoire et qu'ils plantent.

La propriété du volume diffère selon l'environnement d'exécution et le type de déploiement.

Lorsque vous installez un volume, l'identité propriétaire des fichiers et des répertoires varie en fonction de l'environnement d'exécution de la charge de travail et selon que le déploiement comprend un ou plusieurs conteneurs.

Dans l'environnement d'exécution de première génération où vous déployez un seul conteneur, le volume appartient à l'identité utilisée pour le conteneur. Dans tous les autres cas, le volume appartient à la racine. Notre offre comprend :

  • Environnement d'exécution de première génération dans lequel vous déployez plusieurs conteneurs
  • Environnement de deuxième génération

Configurer un volume en mémoire

Tout changement de configuration entraîne la création d'une révision. Les révisions ultérieures obtiennent aussi automatiquement le même paramètre de configuration, à moins que vous ne le mettiez explicitement à jour.

Une fois que vous avez configuré un volume en mémoire pour votre service Cloud Run, un volume vide est créé pour chaque instance Cloud Run qui est démarrée. Ce volume existe tant que cette instance est en cours d'exécution. Lorsque l'instance cesse de s'exécuter, les données du volume sont définitivement supprimées.

Ligne de commande

  • Pour ajouter un volume et l'installer, procédez comme suit :

    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

    Remplacez :

    • JOB par le nom de votre tâche.
    • VOLUME_NAME par le nom que vous souhaitez pour votre volume. La valeur VOLUME_NAME permet de mapper le volume à l'installation du volume.
    • MOUNT_PATH par le chemin relatif du système de fichiers du conteneur sur lequel vous souhaitez installer ce volume, par exemple, /cache.
    • SIZE_LIMIT par la limite de mémoire que vous souhaitez attribuer au volume, en Mio ou Gio (spécifié en Mi ou Gi), par exemple 500Mi. Cette limite doit être inférieure à la mémoire totale spécifiée pour vos conteneurs.
  • Si vous utilisez plusieurs conteneurs, spécifiez les volumes, puis spécifiez les installations de volume pour chaque conteneur :

    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. Si vous créez un job, ignorez cette étape. Si vous mettez à jour un job existant, téléchargez sa configuration YAML :

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. Configurez les attributs volumeMounts et volumes comme indiqué :

    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
    

    Remplacez :

    • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • VOLUME_NAME par le nom que vous souhaitez pour votre volume. La valeur VOLUME_NAME permet de mapper le volume à l'installation du volume.
    • MOUNT_PATH par le chemin relatif du système de fichiers du conteneur sur lequel vous souhaitez installer ce volume, par exemple, /cache.
    • SIZE_LIMIT par la limite de mémoire que vous souhaitez attribuer au volume, en Mio ou Gio (spécifié en Mi ou Gi), par exemple 500Mi. Cette limite doit être inférieure à la mémoire totale spécifiée pour vos conteneurs.
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud beta run jobs replace job.yaml