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.
- Partager un volume en mémoire entre différents conteneurs dans une même instance Cloud Run. Lorsque Cloud Run effectue un scaling horizontal sur plusieurs instances d'un pool de nœuds de calcul, chaque pool de nœuds de calcul dispose de son propre volume en mémoire partagé par tous les conteneurs de ce pool de nœuds de calcul. Ce volume est disponible pour tous les conteneurs lorsque Cloud Run effectue un scaling horizontal pour gérer le trafic.
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 job 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. Cela peut entraîner des plantages inattendus si un seul conteneur dépasse sa propre mémoire allouée en essayant d'écrire davantage de données sur 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 éviter que vos conteneurs ne manquent de mémoire et qu'ils plantent.
Chemins d'accès non autorisés
Cloud Run ne vous permet pas d'installer un volume sur /dev
, /proc
et /sys
, ni 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 pool de nœuds de calcul Cloud Run communique avec des APIGoogle Cloud , telles que des 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
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.
Configurez un montage de volume en mémoire à l'aide de la Google Cloud CLI lorsque vous créez un pool de nœuds de calcul ou déployez une nouvelle révision.
gcloud
Pour ajouter un volume et l'installer, procédez comme suit :
gcloud beta run worker-pools update WORKER_POOL \ --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Remplacez :
- WORKER_POOL par le nom de votre pool de nœuds de calcul.
- 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,
/mnt/my-volume
. - 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 worker-pools update WORKER_POOL \ --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
Afficher la configuration des variable d'environnement pour le pool de nœuds de calcul
Dans la console Google Cloud , accédez à Cloud Run :
Cliquez sur Pools de nœuds de calcul pour afficher la liste des pools de nœuds de calcul déployés.
Cliquez sur le pool de workers que vous souhaitez examiner pour afficher son volet d'informations.
Cliquez sur l'onglet Conteneurs pour afficher la configuration des conteneurs du pool de nœuds de calcul.
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 les données 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 les volumes et les montages de volume
Vous pouvez effacer tous les volumes et montages, ou supprimer des volumes et montages de volume individuels.
Effacer tous les volumes et les montages de volume
Pour effacer tous les volumes et les montages de volume de votre pool de nœuds de calcul à conteneur unique, exécutez la commande suivante :
gcloud beta run worker-pools update WORKER_POOL \ --clear-volumes --clear-volume-mounts
Si vous avez plusieurs conteneurs, suivez les conventions de la CLI des side-cars pour effacer les volumes et les installations de volumes :
gcloud beta run worker-pools update WORKER_POOL \ --container=container1 \ --clear-volumes -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
Supprimer des volumes et des montages de volume individuels
Pour supprimer un volume, vous devez également supprimer tous les montages de volume qui l'utilisent.
Pour supprimer des volumes ou des montages de volumes individuels, utilisez les indicateurs remove-volume
et remove-volume-mount
:
gcloud beta run worker-pools update WORKER_POOL \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH