Configurer les installations de volume en mémoire pour les instances

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.

Lorsque vous installez le volume en mémoire dans Cloud Run, il s'affiche sous forme de fichiers dans le système de fichiers du conteneur. Une fois que vous avez installé le volume en mémoire, vous y accédez comme s'il s'agissait d'un répertoire de votre système de fichiers local, à l'aide des opérations et des bibliothèques de système de fichiers de votre langage de programmation.

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.

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 est automatiquement définie sur la moitié de la taille totale de tous les conteneurs de votre instance. 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. Cela peut entraîner des plantages inattendus si un seul conteneur dépasse sa propre mémoire allouée lorsqu'il tente d'écrire davantage de données dans le volume, même si la limite de taille du volume n'a pas été atteinte.

Bien que la définition d'une limite de taille soit facultative, nous vous recommandons d'en définir une pour protéger vos conteneurs de la mémoire insuffisante et des plantages.

Chemins d'accès non autorisés

Cloud Run ne vous permet pas d'installer un volume sur /dev, /proc et /sys, ou dans leurs sous-répertoires.

Rôles requis

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre instance Cloud Run communique avec Google Cloud des API, telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.

Configurer un volume en mémoire

Une fois que vous avez configuré un volume en mémoire pour votre instance Cloud Run, un volume vide est créé pour chaque instance Cloud Run qui est démarrée, et le 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.

Configurez une installation de volume en mémoire à l'aide de Google Cloud CLI ou de YAML.

gcloud

  • Pour installer un volume :

    gcloud beta run instances update INSTANCE \
      --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT

    Remplacez les éléments suivants :

    • INSTANCE : nom de l'instance.
    • MOUNT_PATH : chemin relatif du système de fichiers du conteneur sur lequel vous souhaitez installer ce volume, par exemple, /mnt/my-volume.
    • SIZE_LIMIT : 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 instances update INSTANCE \
      --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 une instance, ignorez cette étape. Si vous mettez à jour une instance existante, téléchargez sa configuration YAML :

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. L'exemple suivant contient la configuration YAML :

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

    Remplacez les éléments suivants :

    • INSTANCE : nom de votre instance Cloud Run.
    • CONTAINER_NAME : nom du conteneur.
    • IMAGE_URL: référence à l'image de conteneur, telle que us-docker.pkg.dev/cloudrun/container/hello:latest.
    • VOLUME_NAME : nom de votre choix pour votre volume. La valeur VOLUME_NAME permet de mapper le volume à l'installation du volume.
    • MOUNT_PATH : chemin relatif où vous installez le volume, par exemple, /mnt/my-volume.
    • SIZE_LIMIT : 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. Créez ou mettez à jour l'instance à l'aide de la commande suivante :

    gcloud beta run instances replace instance.yaml

Lire et écrire dans un volume

Si vous utilisez la fonctionnalité d'installation de volume Cloud Run, vous accédez à un volume installé à l'aide des mêmes bibliothèques dans votre langage de programmation que celles que vous utilisez pour lire et écrire des fichiers sur votre système de fichiers local.

Ceci est particulièrement utile si vous utilisez un conteneur existant qui attend que des données soient stockées sur le système de fichiers local et utilise des opérations standards du système de fichiers pour y accéder.

Les extraits suivants supposent une installation de volume avec un mountPath défini sur /mnt/my-volume.

Nodejs

Utilisez le module File System pour créer un fichier ou ajouter des données à un fichier existant dans le volume /mnt/my-volume :

var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });

Python

Écrivez dans un fichier conservé dans le volume /mnt/my-volume :

f = open("/mnt/my-volume/sample-logfile.txt", "a")

Go

Utilisez le package os pour créer un fichier conservé dans le volume /mnt/my-volume :

f, err := os.Create("/mnt/my-volume/sample-logfile.txt")

Java

Utilisez la classe Java.io.File pour créer un fichier journal dans le volume /mnt/my-volume :

import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");

Effacer et supprimer des volumes et des installations de volume

Vous pouvez effacer tous les volumes et installations, ou supprimer des volumes et des installations de volume individuels.

Effacer tous les volumes et installations de volume

Pour effacer tous les volumes et installations de volume de votre instance à conteneur unique, exécutez la commande suivante :

gcloud beta run instances update INSTANCE \
    --clear-volumes \
    --clear-volume-mounts

Supprimer des volumes et des installations de volume individuels

Pour supprimer un volume, vous devez également supprimer toutes les installations de volume qui l'utilisent.

Pour supprimer des volumes ou des installations de volume individuels, utilisez les options remove-volume et remove-volume-mount :

gcloud beta run instances update INSTANCE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH