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.
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.
Limites
- Cloud Run n'est pas compatible avec le verrouillage NFS. Les volumes NFS sont automatiquement installés en mode sans verrouillage.
- Chemins d'accès non autorisés : Cloud Run ne vous permet pas d'installer un volume sur
/dev,/procou/sys, ou dans leurs sous-répertoires.
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 sur lequel 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 instance Cloud Run connectée à ce réseau VPC. Si vous ne disposez pas encore de serveur NFS, créez-en un en créant une instance Filestore.
- Votre instance Cloud Run est associée 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 votre configuration de 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.
- Définissez les autorisations sur votre partage de fichiers NFS distant pour autoriser l'accès à l'utilisateur du conteneur. Par défaut, Filestore fournit un accès en lecture à tous les utilisateurs, mais limite l'accès en écriture à l'utilisateur racine (
uid 0). Si votre conteneur nécessite un accès en écriture et ne s'exécute pas en tant qu'utilisateur racine, vous devez utiliser un client connecté (s'exécutant en tant qu'utilisateur racine) pour modifier les autorisations de partage. Par exemple, vous pouvez utiliser la commandechownpour modifier la propriété des fichiers ou des répertoires en fonction de l'ID utilisateur spécifique sous lequel votre conteneur s'exécute.
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 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.
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.
Configurez l'installation d'un volume NFS à l'aide de la Google Cloud CLI ou de YAML.
gcloud
Pour ajouter l'installation d'un volume :
gcloud beta run instances update INSTANCE \ --add-volume mount-path=MOUNT_PATH,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=READ_ONLY
Remplacez les éléments suivants :
- INSTANCE : nom de l'instance.
- MOUNT_PATH : chemin relatif où vous installez le volume, par exemple,
/mnt/my-volume. - IP_ADDRESS : emplacement du partage de fichiers NFS.
- NFS_PATH : chemin d'accès au partage de fichiers NFS commençant par une barre oblique, par exemple
/example-directory. - READ_ONLY :
truepour passer le volume en lecture seule oufalsepour autoriser les écritures.
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=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 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
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 nfs: server: IP_ADDRESS path: NFS_PATH readOnly: IS_READ_ONLY
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, par exempleus-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. - IP_ADDRESS : adresse du partage de fichiers NFS.
- NFS_PATH : chemin d'accès au partage de fichiers NFS commençant par une barre oblique, par exemple
/example-directory. - IS_READ_ONLY :
Truepour passer le volume en lecture seule ouFalsepour autoriser les écritures.
Créez ou mettez à jour l'instance à l'aide de la commande suivante :
gcloud beta run instances replace instance.yaml
Résoudre les problèmes liés à NFS
Si vous rencontrez des problèmes, vérifiez les points suivants :
- Votre instance Cloud Run est connectée au réseau VPC sur lequel se trouve le serveur NFS.
- Aucune règle de pare-feu n'empêche Cloud Run d'atteindre le serveur NFS.
- Si votre conteneur doit écrire des données, assurez-vous que les autorisations de partage NFS sont configurées pour autoriser les écritures de l'utilisateur de votre conteneur.
Délai de démarrage du conteneur et installations de volumes 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 installé correctement.
Notez que NFS n'installe un volume qu'après avoir établi une connexion au serveur et récupéré un handle de fichier. Si Cloud Run ne parvient pas à établir une connexion au serveur, l'instance Cloud Run ne démarre pas.
De plus, tout retard de mise en réseau peut avoir un impact sur le temps de démarrage du conteneur, car Cloud Run dispose d'un délai avant expiration total de 30 secondes pour tous les montages. Si l'installation de NFS prend plus de 30 secondes, l'instance Cloud Run ne démarre pas.
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 vide explicitement les données de fichier à l'aide de sync(2), msync(2) ou fsync(3).
- Votre application ferme un fichier avec close(2).
- La sollicitation 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.
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 tous les montages 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