Cette page explique comment installer un partage de fichiers NFS en tant que volume dans Cloud Run. Vous pouvez utiliser n'importe quel serveur NFS, y compris votre propre serveur NFS hébergé sur site ou sur une VM Compute Engine. Si vous ne disposez pas encore de serveur NFS, nous vous recommandons d'utiliser Filestore, une offre NFS entièrement gérée de Google Cloud.
Si vous souhaitez utiliser les systèmes de fichiers réseau NBD, 9P, CIFS/Samba et Ceph, consultez la section Utiliser les systèmes de fichiers réseau NBD, 9P, CIFS/Samba et Ceph.
L'installation du partage de fichiers NFS en tant que volume dans Cloud Run présente le partage de fichiers sous forme de fichiers dans le système de fichiers du conteneur. Après avoir installé le partage de fichiers en tant que volume, vous y accédez comme s'il s'agissait d'un répertoire de votre système de fichiers local, en utilisant les opérations et les bibliothèques du système de fichiers de votre langage de programmation.
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.
Limites
Pour écrire sur un volume NFS, votre conteneur doit s'exécuter en tant qu'utilisateur racine. Si le conteneur ne lit qu'à partir du système de fichiers, il peut s'exécuter comme n'importe quel utilisateur.
Cloud Run n'est pas compatible avec le verrouillage NFS. Les volumes NFS sont automatiquement installés en mode sans verrouillage.
Avant de commencer
Pour installer un serveur NFS en tant que volume dans Cloud Run, assurez-vous de disposer des éléments suivants :
- Un réseau VPC où votre serveur NFS ou votre instance Filestore est en cours d'exécution.
- Un serveur NFS s'exécutant dans un réseau VPC, avec votre service Cloud Run connecté à ce réseau VPC. Si vous ne disposez pas encore d'un serveur NFS, créez-en un en créant une instance Filestore.
- Votre service Cloud Run est associé au réseau VPC sur lequel votre serveur NFS est exécuté. Pour obtenir de meilleures performances, utilisez le VPC direct plutôt que les connecteurs VPC.
- Si vous utilisez un projet existant, assurez-vous que la configuration du pare-feu VPC permet à Cloud Run d'accéder à votre serveur NFS. (Si vous démarrez à partir d'un nouveau projet, cette option est activée par défaut.) Si vous utilisez Filestore comme serveur NFS, suivez la documentation Filestore pour créer une règle de sortie de pare-feu afin de permettre à Cloud Run d'accéder à Filestore.
Installer un volume NFS
Vous pouvez installer plusieurs serveurs NFS, instances Filestore ou autres types de volumes avec différents chemins d'installation.
Si vous utilisez plusieurs conteneurs, spécifiez les volumes, puis spécifiez les installations de volume pour chaque conteneur.
Console
Dans la console Google Cloud, accédez à la page des jobs Cloud Run :
Cliquez sur Déployer un conteneur, puis sélectionnez Job pour remplir la page initiale des paramètres du job. Si vous configurez un job existant, cliquez sur celui-ci, puis sur Modifier.
Cliquez sur Conteneur, variables et secrets, connexions, sécurité pour développer la page des propriétés du job.
Cliquez sur l'onglet Volumes.
- Sous Volumes :
- Cliquez sur Ajouter un volume.
- Dans la liste déroulante Type de volume, sélectionnez NFS comme type de volume.
- Dans le champ Nom du volume, saisissez le nom du volume que vous souhaitez utiliser.
- Dans le champ Serveur NFS, saisissez le nom de domaine ou l'emplacement (au format
IP_ADDRESS
) du partage de fichiers NFS. - Dans le champ Chemin d'accès, saisissez le chemin d'accès au répertoire du serveur NFS que vous souhaitez installer.
- Cliquez sur OK.
- Cliquez sur l'onglet "Conteneur", puis développez le conteneur sur lequel vous installez le volume pour modifier le conteneur.
- Cliquez sur l'onglet Montages de volume.
- Cliquez sur Monter le volume.
- Sélectionnez le volume de stockage dans le menu.
- Spécifiez le chemin d'accès où vous souhaitez installer le volume.
- Cliquez sur Monter le volume.
- Sous Volumes :
Cliquez sur Créer ou Mettre à jour.
gcloud
Pour ajouter un volume et l'installer, procédez comme suit :
gcloud run jobs update JOB \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --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 donner à votre volume.
- IP_ADDRESS par l'emplacement du partage de fichiers NFS.
- NFS_PATH par le chemin d'accès au partage de fichiers NFS.
- MOUNT_PATH par le chemin d'accès au système de fichiers du conteneur sur lequel vous souhaitez installer ce volume.
Pour installer votre volume en tant que volume en lecture seule, procédez comme suit :
--add-volume name VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
Si vous utilisez plusieurs conteneurs, spécifiez les volumes, puis spécifiez les installations de volume pour chaque conteneur :
gcloud run jobs update JOB \ --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \ --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
Mettez à jour les attributs MOUNT_PATH, VOLUME_NAME, IP_ADDRESS et NFS_PATH si nécessaire. Si vous disposez de plusieurs installations de volume, vous aurez plusieurs de ces attributs.
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: metadata: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME nfs: server: IP_ADDRESS path: NFS_PATH readonly: IS_READ_ONLY
Remplacer
- JOB par le nom de votre job Cloud Run.
- MOUNT_PATH par le chemin relatif où vous installez le volume, par exemple,
/mnt/my-volume
. - VOLUME_NAME par le nom que vous souhaitez pour votre volume. La valeur VOLUME_NAME permet de mapper le volume à l'installation du volume.
- IP_ADDRESS par l'adresse du partage de fichiers NFS.
- NFS_PATH par le chemin d'accès au partage de fichiers NFS.
- IS_READ_ONLY par
True
pour passer le volume en lecture seule ouFalse
pour autoriser les écritures.
Créez ou mettez à jour le job à l'aide de la commande suivante :
gcloud run jobs replace job.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 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");
Résoudre les problèmes liés à NFS
Si vous rencontrez des problèmes, vérifiez les points suivants :
- Votre service Cloud Run est connecté au réseau VPC sur lequel le serveur NFS est activé.
- Aucune règle de pare-feu n'empêche Cloud Run d'atteindre le serveur NFS.
- Si votre conteneur écrit sur votre serveur NFS, assurez-vous qu'il s'exécute en tant qu'utilisateur racine.
Délai de démarrage du conteneur et installations de volume NFS
L'utilisation d'installations de volume NFS peut légèrement augmenter le temps de démarrage à froid de votre conteneur Cloud Run, car l'installation de volumes est effectuée avant le démarrage du ou des conteneurs. Votre conteneur ne démarrera que si NFS est correctement monté.
Notez que NFS ne monte un volume que si vous avez établi une connexion au serveur et récupéré un handle de fichier. Tout retard réseau peut avoir un impact sur le temps de démarrage du conteneur. Si Cloud Run ne parvient pas à établir une connexion au serveur, le job Cloud Run ne démarre pas. En outre, si l'installation de NFS prend plus de 30 secondes, le job Cloud Run ne démarre pas, car Cloud Run a un délai total de 30 secondes pour effectuer toutes les installations.
Caractéristiques des performances NFS
Si vous créez plusieurs volumes NFS, tous les volumes sont installés en parallèle.
Comme NFS est un système de fichiers réseau, il est soumis à des limites de bande passante et l'accès au système de fichiers peut être affecté par une bande passante limitée.
Lorsque vous écrivez sur votre volume NFS, l'écriture est stockée dans la mémoire Cloud Run jusqu'à ce que les données soient vidées. Les données sont vidées dans les cas suivants :
- Votre application efface les données de fichier explicitement à l'aide de sync(2), msync(2) ou fsync(3).
- Votre application ferme un fichier avec close(2).
- La pression de la mémoire force la récupération des ressources de mémoire système.
Pour en savoir plus, consultez la documentation Linux sur NFS.