Configurer des installations de volume Cloud Storage pour les jobs

Cette page explique comment installer un bucket Cloud Storage en tant que volume de stockage, à l'aide des installations de volume Cloud Run.

L'installation du bucket en tant que volume dans Cloud Run présente le contenu du bucket sous forme de fichiers dans le système de fichiers du conteneur. Après avoir installé le bucket 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 au lieu d'utiliser les bibliothèques clientes des API Google.

Exigences relatives à la mémoire

Les installations de volume Cloud Storage utilisent la mémoire du conteneur Cloud Run pour les activités suivantes :

  • Pour toute la mise en cache de Cloud Storage FUSE, Cloud Run utilise par défaut le paramètre de cache de statistiques avec une valeur TTL (Time To Live) de 60 secondes. La taille maximale par défaut du cache de statistiques est de 32 Mo. La taille maximale par défaut du cache de types est de 4 Mo.

  • Lors de la lecture, Cloud Storage FUSE consomme également de la mémoire en plus des caches de statistiques et de types, par exemple un tableau de 1 Mo pour chaque fichier en cours de lecture et pour les goroutines.

  • Lors de l'écriture dans Cloud Storage, l'ensemble du fichier est stocké dans la mémoire Cloud Run avant son écriture dans Cloud Storage.

Limites

Cloud Run utilise Cloud Storage FUSE pour cette installation de volume. Quelques points sont à garder à l'esprit lors de l'installation d'un bucket Cloud Storage en tant que volume :

  • Cloud Storage FUSE ne permet pas de contrôler la simultanéité pour plusieurs écritures (verrouillage de fichiers) dans un même fichier. Lorsque plusieurs écritures tentent de remplacer un fichier, la dernière écriture l'emporte et toutes les écritures précédentes sont perdues.
  • Cloud Storage FUSE n'est pas un système de fichiers entièrement compatible avec POSIX. Pour plus de détails, consultez la documentation de Cloud Storage FUSE.

Avant de commencer

Vous avez besoin d'un bucket Cloud Storage à installer en tant que volume.

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer des installations de volume Cloud Storage, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour obtenir les autorisations nécessaires à votre identité de service pour accéder au fichier et au bucket Cloud Storage, demandez à votre administrateur d'accorder à l'identité du service le rôle IAM suivant:

Pour en savoir plus sur les rôles et les autorisations Cloud Storage, consultez la page IAM pour Cloud Storage.

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les pages Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre tâche Cloud Run communique avec des API Google 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.

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.

Installer un volume Cloud Storage

Vous pouvez installer plusieurs buckets sur différents chemins d'installation. Vous pouvez également installer un volume sur plusieurs conteneurs à l'aide de chemins d'installation identiques ou différents sur l'ensemble des conteneurs.

Si vous utilisez plusieurs conteneurs, spécifiez les volumes, puis spécifiez les installations de volume pour chaque conteneur.

Console

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

    Accédez à Cloud Run

  2. Si vous configurez un nouveau job, cliquez sur l'onglet Jobs et remplissez la page des paramètres initiaux du job selon vos besoins. Si vous configurez un job existant, cliquez sur celui-ci, puis sur Modifier.

  3. Cliquez sur Conteneur, variables et secrets, connexions, sécurité pour développer la page des propriétés du job.

  4. Cliquez sur l'onglet Volumes.

    image

    • Sous Volumes :
      • Cliquez sur Ajouter un volume.
      • Dans la liste déroulante Type de volume, sélectionnez "Bucket Cloud Storage" comme type de volume.
      • Dans le champ Nom du volume, saisissez le nom du volume que vous souhaitez utiliser.
      • Parcourez les buckets et sélectionnez-en un pour le volume.
      • Si vous le souhaitez, cochez la case Lecture seule pour passer le bucket en lecture seule.
      • 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 Cloud Storage dans le menu.
      • Spécifiez le chemin d'accès où vous souhaitez installer le volume.
      • Cliquez sur Monter le volume.
  5. Cliquez sur Créer ou Mettre à jour.

gcloud

  • Pour ajouter un volume et l'installer, procédez comme suit :

    gcloud beta run jobs update JOB \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Remplacez :

    • JOB par le nom de votre tâche.
    • 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.
    • BUCKET_NAME par le nom de votre bucket Cloud Storage.
  • Pour installer votre volume en tant que volume en lecture seule, procédez comme suit :

    --add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
  • Si vous utilisez plusieurs conteneurs, spécifiez d'abord vos volumes, puis les installations de volumes pour chaque conteneur :

    gcloud beta run jobs update JOB \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --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

  1. 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
  2. Mettez à jour les attributs MOUNT_PATH, VOLUME_NAME, BUCKET_NAME et IS_READ_ONLY si nécessaire.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
    spec:
      metadata:
        annotations:
          run.googleapis.com/launch-stage: BETA
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          template:
            spec:
              containers:
              - image: IMAGE_URL
                volumeMounts:
                - mountPath: MOUNT_PATH
                  name: VOLUME_NAME
              volumes:
              - name: VOLUME_NAME
                csi:
                  driver: gcsfuse.run.googleapis.com
                  readOnly: IS_READ_ONLY
                  volumeAttributes:
                    bucketName: BUCKET_NAME

    Remplacer

    • 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
    • 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.
    • IS_READ_ONLY par True pour passer le volume en lecture seule ou False pour autoriser les écritures.
    • BUCKET_NAME par le nom du bucket Cloud Storage
  3. Remplacez la configuration du service en exécutant la commande suivante :

    gcloud beta 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.

Node.js

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")

Accéder

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");

Afficher les paramètres des installations de volumes

Console

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

    Accéder aux jobs Cloud Run

  2. Cliquez sur la tâche qui vous intéresse pour ouvrir la page Informations sur la tâche.

  3. Cliquez sur l'onglet Volumes.

  4. Recherchez le paramètre des installations de volumes dans la page d'informations sur les volumes.

gcloud

  1. Exécutez la commande suivante :

    gcloud run jobs describe JOB_NAME
  2. Recherchez le paramètre des installations de volumes dans la configuration renvoyée.