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
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
Configurez les attributs
volumeMounts
etvolumes
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.
- IMAGE_URL par une référence à l'image de conteneur, par exemple
Remplacez la configuration du service en utilisant la commande suivante :
gcloud beta run jobs replace job.yaml