Configurar los montajes de volúmenes de Cloud Storage para los servicios de Cloud Run

En esta página se muestra cómo montar un segmento de Cloud Storage como volumen de almacenamiento mediante montajes de volumen de Cloud Run.

Al montar el segmento como un volumen en Cloud Run, el contenido del segmento se presenta como archivos en el sistema de archivos del contenedor. Después de montar el bucket como un volumen, puedes acceder a él como si fuera un directorio de tu sistema de archivos local. Para ello, utiliza las operaciones y bibliotecas del sistema de archivos de tu lenguaje de programación en lugar de las bibliotecas de cliente de la API de Google.

Puedes montar tu volumen como de solo lectura y también puedes especificar opciones de montaje para tu volumen.

Requisitos de memoria

Los montajes de volúmenes de Cloud Storage usan la memoria del contenedor de Cloud Run para las siguientes actividades:

  • En todo el almacenamiento en caché de Cloud Storage FUSE, Cloud Run usa el ajuste de caché de estadísticas con un tiempo de vida (TTL) de 60 segundos de forma predeterminada. El tamaño máximo predeterminado de la caché de estadísticas es de 32 MB y el de la caché de tipos es de 4 MB.

  • Al leer, Cloud Storage FUSE también consume memoria que no es de las cachés de estadísticas y tipos, como una matriz de 1 MiB por cada archivo que se lee y por cada goroutine.

  • Cuando se escribe en Cloud Storage, todo el archivo se almacena en la memoria de Cloud Run antes de que se escriba en Cloud Storage.

Limitaciones

Como Cloud Run usa Cloud Storage FUSE para montar este volumen, hay algunas cosas que debes tener en cuenta al montar un segmento de Cloud Storage como volumen:

  • Cloud Storage FUSE no proporciona control de simultaneidad para varias escrituras (bloqueo de archivos) en el mismo archivo. Cuando varios procesos de escritura intentan sustituir un archivo, se aplica el último y se pierden todos los anteriores.
  • Cloud Storage FUSE no es un sistema de archivos totalmente compatible con POSIX. Para obtener más información, consulta la documentación de FUSE de Cloud Storage.

Rutas no permitidas

Cloud Run no te permite montar un volumen en /dev, /proc o /sys, ni en sus subdirectorios.

Antes de empezar

Necesitas un segmento de Cloud Storage para montarlo como volumen.

Para obtener un rendimiento óptimo de lectura/escritura en Cloud Storage, consulta Optimizar el rendimiento del ancho de banda de la red de FUSE de Cloud Storage.

Roles obligatorios

Para obtener los permisos que necesitas para configurar los montajes de volúmenes de Cloud Storage, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Para obtener los permisos que necesita tu identidad de servicio para acceder al archivo y al segmento de Cloud Storage, pide a tu administrador que le conceda a la identidad de servicio el rol Lector de objetos de almacenamiento (roles/storage.objectViewer). Si la identidad de servicio también necesita realizar operaciones de escritura en un segmento, asigna el rol Usuario de objetos de almacenamiento (roles/storage.objectUser).

Para obtener más información sobre los roles y permisos de Cloud Storage, consulta Gestión de identidades y accesos para Cloud Storage.

Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos sobre roles de gestión de identidades y accesos de Cloud Run y permisos de gestión de identidades y accesos de Cloud Run. Si tu servicio de Cloud Run interactúa con APIs, como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad del servicio.Google Cloud Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.

Montar un volumen de Cloud Storage

Puedes montar varios contenedores en diferentes rutas de montaje. También puedes montar un volumen en más de un contenedor usando la misma ruta de montaje o rutas diferentes en los contenedores.

Si usas varios contenedores, primero especifica los volúmenes y, a continuación, los montajes de volumen de cada contenedor.

Para montar volúmenes, se necesita el entorno de ejecución de segunda generación. Cloud Run selecciona automáticamente el entorno de ejecución de segunda generación para tu servicio si no se ha configurado ningún entorno de ejecución explícitamente.

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.

  4. Haz clic en la pestaña Volúmenes.

    imagen

    • Haz clic en Añadir volumen.
    • En el menú desplegable Tipo de volumen, selecciona Segmento de Cloud Storage como tipo de volumen.
    • En el campo Nombre del volumen, introduce el nombre que quieras usar para el volumen.
    • Busca y selecciona el segmento de Cloud Storage que se va a usar para el volumen o, si quieres, crea un segmento.
    • Si quieres que el contenedor sea de solo lectura, selecciona la casilla Solo lectura.
    • Haz clic en Listo.
    • Haga clic en la pestaña Contenedor:
      • Haz clic en la pestaña Montajes de volúmenes.
      • Haz clic en Montar volumen.
      • Selecciona el volumen de almacenamiento en el menú.
      • Especifica la ruta en la que quieres montar el volumen.
      • Haz clic en Hecho.
  5. Haz clic en Crear o en Implementar.

gcloud

  • Para añadir un volumen y montarlo, sigue estos pasos:

    gcloud run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio.
    • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /mnt/my-volume.
    • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
    • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • Para montar tu volumen como volumen de solo lectura, haz lo siguiente:

    --add-volume=name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,readonly=true
  • Si usas varios contenedores, primero especifica los volúmenes y, a continuación, los puntos de montaje de volumen de cada contenedor:

    gcloud run services update SERVICE \
    --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 va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Haga los cambios necesarios.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME

    Haz los cambios siguientes:

    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /mnt/my-volume.
    • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
    • IS_READ_ONLY: True para que el volumen sea de solo lectura o False para permitir escrituras.
    • BUCKET_NAME: el nombre del segmento de Cloud Storage.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de Terraform:

  resource "google_cloud_run_v2_service" "default" {
    name     = "SERVICE"
    location = "REGION"

    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        gcs {
          bucket = google_storage_bucket.default.name
          read_only = IS_READ_ONLY
        }
      }
    }
  }

  resource "google_storage_bucket" "default" {
    name     = "BUCKET_NAME"
    location = "REGION"
  }

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio de Cloud Run.
  • REGION: la Google Cloud región.
  • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al punto de montaje del volumen.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /mnt/my-volume.
  • IS_READ_ONLY: True para que el volumen sea de solo lectura o False para permitir escrituras.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage.

Leer y escribir en un volumen

Si usas la función de montaje de volúmenes de Cloud Run, puedes acceder a un volumen montado con las mismas bibliotecas de tu lenguaje de programación que usas para leer y escribir archivos en tu sistema de archivos local.

Esto es especialmente útil si usas un contenedor que espera que los datos se almacenen en el sistema de archivos local y que utiliza operaciones normales del sistema de archivos para acceder a ellos.

En los siguientes fragmentos se presupone que se ha montado un volumen con mountPath definido como /mnt/my-volume.

Nodejs

Usa el módulo File System para crear un archivo o añadir contenido a un archivo ya creado en el volumen, /mnt/my-volume:

var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });

Python

Escribe en un archivo que se encuentra en el volumen, /mnt/my-volume:

f = open("/mnt/my-volume/sample-logfile.txt", "a")

Go

Usa el paquete os para crear un archivo nuevo que se guarde en el volumen /mnt/my-volume:

f, err := os.Create("/mnt/my-volume/sample-logfile.txt")

Java

Usa la clase Java.io.File para crear un archivo de registro en el volumen /mnt/my-volume:

import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");

Configuración de volúmenes mediante opciones de montaje

También puedes usar opciones de montaje para configurar varias propiedades del montaje de tu volumen. Las opciones de montaje disponibles te permiten configurar los ajustes de la caché, montar un directorio específico, habilitar el registro de depuración y otros comportamientos.

Especificar las opciones de montaje

Puedes especificar opciones de montaje con la CLI de Google Cloud, YAML o Terraform. Las opciones de montaje se separan con puntos y comas (;) en la CLI de Google Cloud y con comas en YAML, tal como se muestra en las siguientes pestañas:

gcloud

Para añadir un volumen y montarlo con opciones de montaje, sigue estos pasos:

gcloud beta run services update SERVICE \
    --execution-environment gen2 \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="OPTION_1=VALUE_1;OPTION_N=VALUE_N" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
  • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • OPTION_1: la primera opción de montaje. Ten en cuenta que puedes especificar tantas opciones de montaje como necesites. Cada par de opciones de montaje y valor debe estar separado por un punto y coma.
  • VALUE_1: el ajuste que quieras para la primera opción de montaje.
  • OPTION_N: la siguiente opción de montaje.
  • VALUE_N: la opción de montaje siguiente.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Haga los cambios necesarios.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME
                mountOptions: OPTION_1=VALUE_1,OPTION_N=VALUE_N

    Haz los cambios siguientes:

    • IMAGE_URL: una referencia a la imagen del contenedor que contiene el grupo de trabajadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.
    • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
    • IS_READ_ONLY: True para que el volumen sea de solo lectura o False para permitir escrituras.
    • BUCKET_NAME: el nombre del segmento de Cloud Storage.
    • OPTION_1: la primera opción de montaje. Ten en cuenta que puedes especificar tantas opciones de montaje como necesites. Cada par de opción de montaje y valor debe estar separado por una coma.
    • VALUE_1: el ajuste que quieras para la primera opción de montaje.
    • OPTION_N: la siguiente opción de montaje.
    • VALUE_N: la opción de montaje siguiente.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de Terraform:

  resource "google_cloud_run_v2_service" "default" {
    provider = google-beta
    name     = "SERVICE"
    location = "REGION"

    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        gcs {
            bucket = google_storage_bucket.default.name
            read_only = IS_READ_ONLY
            mount_options = ["OPTION_1=VALUE_1", "OPTION_N=VALUE_N", "OPTION_O"]
        }
      }
    }
  }

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio de Cloud Run.
  • REGION: la Google Cloud región.
  • IMAGE_URL: una referencia a la imagen del contenedor que contiene el grupo de trabajadores, como us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al punto de montaje del volumen.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /mnt/my-volume.
  • IS_READ_ONLY: True para que el volumen sea de solo lectura o False para permitir escrituras.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage.
  • OPTION_1: la primera opción de montaje. Ten en cuenta que puedes especificar tantas opciones de montaje como necesites. Cada par de opción de montaje y valor debe estar separado por una coma.
  • VALUE_1: el ajuste que quieras para la primera opción de montaje.
  • OPTION_N: la segunda opción de montaje, si procede.
  • VALUE_N: el ajuste de la segunda opción de montaje.
  • OPTION_O: la tercera opción de montaje, si procede. Algunas opciones de montaje no tienen ningún valor.

Opciones de montaje habituales

Las opciones de montaje se suelen usar para lo siguiente:

  • Configurar los ajustes de caché
  • Montar solo un directorio específico del segmento de Cloud Storage
  • Configurar la propiedad del volumen (uid, gid)
  • Desactivar directorios implícitos
  • Especifica los niveles de registro de depuración.

Configurar los ajustes de almacenamiento en caché

Puedes cambiar los ajustes de almacenamiento en caché de tu volumen configurando las opciones de montaje relacionadas con el almacenamiento en caché. En la siguiente tabla se muestran los ajustes y los valores predeterminados de Cloud Run :

Configuración de la caché Descripción Predeterminado
metadata-cache-ttl-secs Tiempo de vida (TTL) en segundos de las entradas de metadatos almacenadas en caché. Por ejemplo, metadata-cache-ttl-secs=120s. Para usar el archivo más actualizado, especifica el valor 0. Para usar siempre la versión almacenada en caché, especifica el valor -1. Para obtener más información, consulta Configurar la invalidación de caché. 60
stat-cache-max-size-mb Tamaño máximo en mebibytes (MiB) que puede usar la caché de estadísticas. La caché de estadísticas siempre se mantiene por completo en la memoria, lo que afecta al consumo de memoria. Especifica el valor 32 si tu carga de trabajo incluye hasta 20.000 archivos. Si tu carga de trabajo usa más de 20.000 archivos, aumenta el tamaño en valores de 10 por cada 6000 archivos adicionales, donde la caché de estadísticas usa una media de 1500 MiB por archivo.

Para permitir que la caché de estadísticas use toda la memoria que necesite, especifica un valor de -1. Para inhabilitar la caché de estadísticas, especifica el valor 0.
32
type-cache-max-size-mb Tamaño máximo en MiB por directorio que puede usar la caché de tipos. La caché de tipos siempre se mantiene por completo en la memoria, lo que afecta al consumo de memoria.

Especifica el valor 4 si el número máximo de archivos de un mismo directorio del bucket que vas a montar es de 20.000 o menos. Si el número máximo de archivos de un directorio que vas a montar es superior a 20.000, aumenta el valor en 1 por cada 5000 archivos, lo que supone una media de unos 200 bytes por archivo.

Para que la caché de tipos use toda la memoria que necesite, especifica el valor -1.

Para inhabilitar la caché de tipos, especifica el valor 0.
4

El siguiente comando de la CLI de Google Cloud define el valor de metadata-cache-ttl-secs en 120 segundos y aumenta la capacidad de la caché de estadísticas y de tipos a 52 y 7 MiB, respectivamente:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="metadata-cache-ttl-secs=120;stat-cache-max-size-mb=52;type-cache-max-size-mb=7" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
  • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.

Habilitar el registro de depuración

De forma predeterminada, Cloud Storage FUSE registra los eventos que tienen Info o más. Puede cambiar la configuración de registro con cualquiera de los siguientes niveles de gravedad de registro, que se indican en orden de menor a mayor:

  • trace
  • debug
  • info
  • warning
  • error
  • Para desactivar todos los registros, especifica el valor off.

Cuando especifica un nivel de gravedad, Cloud Storage FUSE genera registros de eventos que tienen un nivel de gravedad igual o superior al especificado. Por ejemplo, si especificas el nivel warning, Cloud Storage FUSE genera registros de advertencias y errores.

Si se define la gravedad de los registros en niveles superiores a info, el rendimiento puede verse afectado y se puede generar una gran cantidad de datos de registro, por lo que te recomendamos que lo hagas solo cuando sea necesario.

La siguiente línea de comandos activa el registro de depuración:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="log-severity=debug" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
  • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.

Inhabilitar directorios implícitos

Para que Cloud Storage se parezca más a un sistema de archivos estándar, Cloud Run habilita los directorios implícitos de forma predeterminada al montar un segmento de Cloud Storage. Puedes desactivar los directorios implícitos con la opción de montaje implicit-dirs. Si inhabilitas los directorios implícitos, puedes mejorar el rendimiento y reducir los costes, pero esto conlleva ciertas concesiones en cuanto a la compatibilidad.

La función de directorios implícitos permite a Cloud Run reconocer archivos de Cloud Storage que ya existan y cuyos nombres de archivo imiten una estructura de directorios, como /mydir/myfile.txt. Si inhabilitas los directorios implícitos, Cloud Run no podrá enumerar ni leer esos archivos.

Si desactivas los directorios implícitos, se reduce el número de solicitudes a Cloud Storage, lo que puede mejorar el rendimiento y el coste de tu aplicación. Consulta la documentación sobre archivos y directorios de Cloud Storage FUSE para obtener más información.

La siguiente línea de comandos inhabilita los directorios implícitos:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="implicit-dirs=false" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
  • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.

Montar un directorio específico de tu segmento de Cloud Storage

De forma predeterminada, Cloud Run monta todo el segmento de Cloud Storage, lo que da a los servicios de Cloud Run acceso a todo su contenido. En algunos casos, puede que solo quieras montar un directorio específico. Por ejemplo, si el contenedor contiene un gran número de archivos, montar un directorio específico puede mejorar el rendimiento.

También puedes implementar esta opción para aislar los servicios, de forma que cada uno tenga acceso a un directorio diferente del segmento de almacenamiento.

La siguiente línea de comandos especifica el directorio que se va a montar:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="only-dir=images" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
  • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.

Pon el volumen UID y GID

Usa las opciones de montaje uid y gid para cambiar el identificador de usuario y el identificador de grupo del volumen. Esto resulta útil si quieres asignar la propiedad del archivo a un usuario o grupo específico que coincida con la identidad de uno o varios contenedores en ejecución. De forma predeterminada, los volúmenes son propiedad de la raíz.

La siguiente línea de comandos define uid y gid:

gcloud beta run services update SERVICE \
    --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME,mount-options="uid=UID;gid=GID" \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
  • BUCKET_NAME: el nombre de tu segmento de Cloud Storage.
  • MOUNT_PATH: la ruta relativa en la que vas a montar el volumen. Por ejemplo, /cache.

Definir otras opciones de montaje

A continuación, se muestra la lista completa de todas las opciones de montaje compatibles con Cloud Run.

Directorio

  • implicit-dirs
  • only-dir
  • rename-dir-limit

Depuración

  • debug_fuse_errors
  • debug_fuse
  • debug_gcs
  • debug-invariants
  • debug_mutex

Caché

  • stat-cache-capacity
  • stat-cache-ttl
  • type-cache-ttl
  • enable-nonexistent-type-cache

Permisos

  • uid
  • gid
  • file-mode
  • dir-mode

Otros

  • billing-project
  • client-protocol
  • experimental-enable-json-read
  • experimental-opentelemetry-collector-address
  • http-client-timeout
  • limit-bytes-per-sec
  • limit-ops-per-sec
  • max-conns-per-host
  • max-idle-conns-per-host
  • max-retry-sleep
  • -o
  • retry-multiplier
  • sequential-read-size-mb
  • stackdriver-export-interval

Para consultar la documentación completa de las opciones de montaje admitidas, consulta las opciones de montaje de la línea de comandos de FUSE de Cloud Storage.

Ver los ajustes de montajes del volumen

Consola

  1. En la Google Cloud consola, ve a la página de servicios de Cloud Run:

    Ir a Cloud Run

  2. En la lista de servicios, haz clic en el servicio que te interese para abrir la página Detalles del servicio.

  3. Haz clic en la pestaña Volúmenes.

  4. Busca el ajuste Montajes del volumen en la página de detalles de los volúmenes.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE_NAME
  2. Busca el ajuste Volume mounts en la configuración devuelta.

Optimizar el rendimiento del ancho de banda de la red de Cloud Storage FUSE

Para mejorar el rendimiento de lectura y escritura, conecta tu servicio de Cloud Run a una red de VPC mediante VPC directa y enruta todo el tráfico saliente a través de tu red de VPC. Puedes hacerlo de cualquiera de las siguientes formas:

Tiempo de inicio de los contenedores y montajes de Cloud Storage FUSE

Usar Cloud Storage FUSE puede aumentar ligeramente el tiempo de arranque en frío de tu contenedor de Cloud Run, ya que Cloud Run inicia el montaje del volumen antes de iniciar los contenedores. El contenedor solo se iniciará si Cloud Storage FUSE se monta correctamente.

Ten en cuenta que Cloud Storage FUSE solo monta un volumen correctamente después de establecer una conexión con Cloud Storage. Cualquier retraso en la red puede influir en el tiempo de inicio del contenedor. Por lo tanto, si el intento de conexión falla, Cloud Storage FUSE no se montará y el servicio de Cloud Run no se iniciará. Además, si Cloud Storage FUSE tarda más de 30 segundos en montarse, el servicio de Cloud Run no se iniciará porque Cloud Run tiene un tiempo de espera total de 30 segundos para realizar todos los montajes.

Características de rendimiento de Cloud Storage FUSE

Si defines dos volúmenes, cada uno de ellos apuntando a un segmento diferente, se iniciarán dos procesos de Cloud Storage FUSE. Los montajes y los procesos se producen en paralelo.

Las operaciones que usan Cloud Storage FUSE se ven afectadas por el ancho de banda de la red, ya que Cloud Storage FUSE se comunica con Cloud Storage mediante la API de Cloud Storage. Algunas operaciones, como enumerar el contenido de un contenedor, pueden ser lentas si el ancho de banda de la red es bajo. Del mismo modo, leer un archivo grande puede llevar tiempo, ya que también está limitado por el ancho de banda de la red.

Cuando escribes en un segmento, Cloud Storage FUSE almacena el objeto por completo en la memoria. Esto significa que la escritura de archivos grandes está limitada por la cantidad de memoria disponible para la instancia del contenedor (el límite máximo de memoria del contenedor es de 32 GiB).

La escritura se vacía en el segmento solo cuando realizas una close o una fsync: el objeto completo se sube al segmento. La única excepción a la regla de que un objeto se vuelve a subir por completo al segmento es el caso de un archivo con contenido añadido cuando el archivo tiene 2 MiB o más.

Para obtener más información, consulta los siguientes recursos:

Borrar y quitar volúmenes y montajes de volúmenes

Puedes borrar todos los volúmenes y los puntos de montaje, o bien quitar volúmenes y puntos de montaje concretos.

Borrar todos los volúmenes y los puntos de montaje de volúmenes

Para borrar todos los volúmenes y los montajes de volúmenes de tu servicio de un solo contenedor, ejecuta el siguiente comando:

gcloud run services update SERVICE \
    --clear-volumes
    --clear-volume-mounts

Si tienes varios contenedores, sigue las convenciones de la CLI de sidecars para borrar volúmenes y montajes de volúmenes:

gcloud run services update SERVICE \
    --container=container1 \
    --clear-volumes
    -–clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    -–clear-volume-mounts

Eliminar volúmenes y montajes de volúmenes concretos

Para quitar un volumen, también debes quitar todos los montajes de volumen que lo usen.

Para quitar volúmenes o montajes de volúmenes concretos, usa las marcas remove-volume y remove-volume-mount:

gcloud run services update SERVICE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH