Volumes en mémoire (services)

Cette page explique comment configurer un volume en mémoire dédié à la lecture et à l'écriture de fichiers.

Cette fonctionnalité diffère du système de fichiers en mémoire intégré fourni par Cloud Run, qui ne limite pas la mémoire utilisée par les écritures de fichiers en mémoire. En utilisant des volumes en mémoire, vous pouvez limiter la quantité de mémoire pouvant être utilisée.

Comportement

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.

Si vous spécifiez une limite pour un volume en mémoire, puis dépassez cette limite lors de l'écriture sur le volume, vous obtiendrez une erreur de mémoire insuffisante, que vous pouvez gérer, et l'instance continuera de s'exécuter. Si vous ne spécifiez pas de limite de taille de volume, puis que vous dépassez la limite de mémoire de l'instance lors de l'écriture sur le volume, l'instance plantera.

La propriété du volume diffère selon l'environnement d'exécution et le type de déploiement.

Lorsque vous installez un volume, l'identité propriétaire des fichiers et des répertoires varie en fonction de l'environnement d'exécution de la charge de travail et selon que le déploiement comprend un ou plusieurs conteneurs.

Dans l'environnement d'exécution de première génération où vous déployez un seul conteneur, le volume appartient à l'identité utilisée pour le conteneur. Dans tous les autres cas, le volume appartient à la racine. Notre offre comprend :

  • Environnement d'exécution de première génération dans lequel vous déployez plusieurs conteneurs
  • Environnement de deuxième génération

Cas d'utilisation

Les cas d'utilisation d'un volume en mémoire incluent l'allocation d'espace de travail ou la création de points de contrôle d'un long calcul pour éviter les plantages.

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.

Si vous spécifiez une limite de taille de mémoire pour le volume, la mémoire est allouée à partir de la mémoire utilisée par tous les conteneurs individuels de l'instance qui accèdent à ce volume. Si la taille du volume en mémoire est supérieure à la somme totale de la mémoire utilisée par les conteneurs de l'instance, le volume est défini par défaut sur la somme totale utilisée par les conteneurs.

Si vous ne spécifiez pas de limite de taille de mémoire pour un volume, vous pouvez potentiellement dépasser la limite de mémoire de l'instance et planter l'instance.

Si vous utilisez le volume en mémoire comme volume partagé dans un déploiement multiconteneur sans spécifier de limite de taille de mémoire, la moitié de la mémoire totale de l'instance disponible est allouée au volume partagé. Par exemple, la taille du volume emptyDir = [mémoire (conteneur A) + mémoire (conteneur B) + mémoire (conteneur N)]/2.

Console

  1. Accédez à Cloud Run

  2. Cliquez sur le service que vous souhaitez configurer.

  3. Cliquez sur l'onglet YAML.

  4. Configurez les attributs volumeMounts et volumes comme indiqué :

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
        name: SERVICE
      spec:
        template:
          metadata:
          spec:
            containers:
            - image: IMAGE_URL
              volumeMounts:
              - mountPath: PATH
                name: VOLUME_NAME
            volumes:
            - name: VOLUME_NAME
              emptyDir:
                sizeLimit: SIZE_LIMIT
                medium: Memory

    replace

    • SERVICE par le nom de votre service Cloud Run ;
    • 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 : REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH par le chemin relatif du volume, par exemple /cache ;
    • VOLUME_NAME par le nom que vous souhaitez utiliser pour le volume en mémoire ;
    • 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.
  5. Cliquez sur Enregistrer et déployer la nouvelle révision.

YAML

Vous pouvez télécharger et afficher les configurations de service existantes à l'aide de la commande gcloud run services describe --format export, qui renvoie les résultats nettoyés au format YAML. Vous pouvez ensuite modifier les champs décrits ci-dessous et importer le fichier YAML modifié à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les champs indiqués.

  1. Pour afficher et télécharger la configuration, exécutez la commande suivante :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Configurez les attributs volumeMounts et volumes comme indiqué :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory

    Remplacez :

    • SERVICE par le nom de votre service Cloud Run ;
    • 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 : REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PATH par le chemin relatif du volume, par exemple /cache ;
    • VOLUME_NAME par le nom que vous souhaitez utiliser pour le volume en mémoire ;
    • 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.
  3. Remplacez la configuration du service en utilisant la commande suivante :

    gcloud run services replace service.yaml