Configurer des installations de volumes NFS pour les pools de nœuds de calcul

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 le vôtre 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.

Chemins d'accès non autorisés

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

Limites

  • 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 sur lequel votre serveur NFS ou votre instance Filestore est exécuté.
  • Un serveur NFS s'exécutant dans un réseau VPC, avec votre pool de nœuds de calcul Cloud Run connecté à ce réseau VPC. Si vous ne disposez pas encore de serveur NFS, créez-en un en créant une instance Filestore.
  • Votre pool de nœuds de calcul Cloud Run est associé au réseau VPC sur lequel votre serveur NFS s'exécute. 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 de votre pare-feu VPC permet à Cloud Run d'accéder à votre serveur NFS. (Si vous partez 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 pare-feu de sortie 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é (exécuté en tant que racine) pour modifier les autorisations de partage. Par exemple, vous pouvez utiliser la commande chown pour transférer la propriété des fichiers ou des répertoires à 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 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.

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 un montage de volume NFS à l'aide de la console Google Cloud , de Google Cloud CLI ou de Terraform.

Console

  1. Dans la console Google Cloud , accédez à Cloud Run :

    Accédez à Cloud Run

  2. Sélectionnez Pools de nœuds de calcul dans le menu, puis cliquez sur Déployer un conteneur pour configurer un nouveau pool de nœuds de calcul. Si vous configurez un pool de nœuds de calcul existant, cliquez sur celui-ci, puis sur Modifier et déployer la nouvelle révision.

  3. Si vous configurez un nouveau pool de nœuds de calcul, remplissez la page initiale du pool de nœuds de calcul, puis cliquez sur Conteneur(s), Volumes, Mise en réseau, Sécurité pour développer la page de configuration des pools de nœuds de calcul.

  4. Cliquez sur l'onglet Volumes.

    image

    • Sous Volumes, cliquez sur Ajouter un volume.
      • Dans le menu déroulant Type de volume, sélectionnez NFS.
      • 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", recherchez le conteneur que vous souhaitez monter, puis développez ses détails.
    • 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.
      • Cliquez sur OK.
  5. Cliquez sur Créer ou Déployer.

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=nfs,location=IP_ADDRESS:NFS_PATH \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Remplacez les éléments suivants :

    • WORKER_POOL : nom de votre pool de nœuds de calcul.
    • VOLUME_NAME : nom que vous souhaitez attribuer à votre 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).
    • MOUNT_PATH : chemin relatif où vous installez le volume, par exemple, /mnt/my-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 beta run worker-pools update WORKER_POOL \
    --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

Terraform

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

resource "google_cloud_run_v2_worker_pool" "default" {
  name = "WORKER_POOL"
  location = "REGION"
  launch_stage = "BETA"

  template {
    containers {
      image = "IMAGE_URL"
      volume_mounts {
        name       = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }
    vpc_access {
      network_interfaces {
        network    = "default"
        subnetwork = "default"
      }
    }

    volumes {
      name = "VOLUME_NAME"
      nfs {
        server    = google_filestore_instance.default.networks[0].ip_addresses[0]
        path      = "NFS_PATH"
        read_only = "IS_READ_ONLY"
      }
    }
  }
}

resource "google_filestore_instance" "default" {
  name     = "cloudrun-worker-pool"
  location = "REGION"
  tier     = "BASIC_HDD"

  file_shares {
    capacity_gb = 1024
    name        = "share1"
  }

  networks {
    network = "default"
    modes   = ["MODE_IPV4"]
  }
}

Remplacez les éléments suivants :

  • WORKER_POOL : nom du pool de nœuds de calcul.
  • REGION : région Google Cloud , par exemple europe-west1.
  • IMAGE_URL : référence à l'image de conteneur contenant le pool de nœuds de calcul, par exemple us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • VOLUME_NAME : nom de 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).
  • NFS_PATH : chemin d'accès au partage de fichiers NFS.
  • IS_READ_ONLY : True pour passer le volume en lecture seule ou False pour autoriser les écritures.

Afficher la configuration des variable d'environnement pour le pool de nœuds de calcul

  1. Dans la console Google Cloud , accédez à Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur Pools de nœuds de calcul pour afficher la liste des pools de nœuds de calcul déployés.

  3. Cliquez sur le pool de workers que vous souhaitez examiner pour afficher son volet d'informations.

  4. Cliquez sur l'onglet Conteneurs pour afficher la configuration des conteneurs du pool de nœuds de calcul.

Résoudre les problèmes liés à NFS

Si vous rencontrez des problèmes, vérifiez les points suivants :

  • Votre pool de nœuds de calcul Cloud Run est connecté au réseau VPC sur lequel se trouve le serveur NFS.
  • Aucune règle de pare-feu n'empêche Cloud Run d'accéder au 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 correctement installé.

Notez que NFS ne monte un volume qu'après avoir établi une connexion au serveur et récupéré un descripteur de fichier. Si Cloud Run ne parvient pas à établir une connexion au serveur, le pool de nœuds de calcul Cloud Run ne démarre pas.

De plus, tout retard réseau peut avoir un impact sur le temps de démarrage du conteneur, car Cloud Run dispose d'un délai total de 30 secondes pour toutes les installations. Si l'installation de NFS prend plus de 30 secondes, le pool de nœuds de calcul Cloud Run ne démarre pas.

Caractéristiques des performances de 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. L'accès au système de fichiers peut donc être affecté par une bande passante limitée.

Lorsque vous écrivez dans 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 du 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 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 sidecars pour effacer les volumes et les installations de volume :

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