En esta página, se describe cómo configurar un volumen en memoria dedicado que puedes usar para operaciones de lectura y escritura de archivos mediante activaciones de volúmenes de Cloud Run. Ten en cuenta que esta función difiere del sistema de archivos en memoria integrado que proporciona Cloud Run.
Puedes usar volúmenes en memoria para hacer lo siguiente:
- Limitar el tamaño del volumen en memoria. Cuando limitas el tamaño de un volumen, las operaciones de escritura en un volumen completo fallarán, lo que es preferible a que Cloud Run finalice las instancias debido a que el volumen consume demasiada memoria.
- Compartir un volumen en memoria entre diferentes contenedores en una instancia de Cloud Run.
Comportamiento
Cuando se crea un volumen en memoria, recomendamos especificar un límite de tamaño. Si el volumen alcanza su límite de tamaño, las escrituras adicionales fallarán con un error de memoria insuficiente. Tu instancia puede controlar este error y seguir ejecutándose.
Ten en cuenta que el límite de tamaño es solo un límite: no asigna espacio adicional para el volumen en memoria. En cambio, el volumen en memoria consume la memoria que configuraste para los contenedores. Si implementas varios contenedores, la memoria que usa cada operación de escritura en el volumen cuenta como uso de memoria para el contenedor que escribió los datos.
Si no especificas un límite de tamaño, se establecerá automáticamente como la mitad del tamaño total de todos los contenedores de tu trabajo o servicio. Por ejemplo, el tamaño de volumen emptyDir
= [Memoria (Contenedor A) + Memoria (Contenedor B) + Memoria (Contenedor N)]/2.
Este comportamiento predeterminado puede hacer que el límite de tamaño del volumen en memoria sea mayor que la memoria asignada para algunos de tus contenedores. En esta situación, si tu contenedor sigue escribiendo memoria en el volumen, superará su memoria asignada y fallará antes de que se alcance el límite de tamaño del volumen.
Aunque establecer un límite de tamaño es opcional, te recomendamos configurar uno para proteger a tus contenedores de la falta de memoria y fallas.
La propiedad del volumen difiere según el entorno de ejecución y el tipo de implementación
Cuando activas un volumen, la identidad que posee los archivos y directorios difiere según el entorno de ejecución de la carga de trabajo y si la implementación consta de uno o varios contenedores.
En el entorno de ejecución de primera generación en el que implementas un solo contenedor, el volumen es propiedad de la identidad que se usa para el contenedor. En todos los demás casos, el volumen es propiedad de la raíz. que incluye estos productos:
- Entorno de ejecución de primera generación en el que implementas varios contenedores
- El entorno de segunda generación
Configura un volumen en memoria
Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.
Después de configurar un volumen en memoria para el servicio de Cloud Run, se crea un volumen vacío para cada instancia de Cloud Run que se inicia, y el volumen existe mientras esa instancia esté en ejecución. Cuando la instancia deja de ejecutarse, los datos del volumen se borran de forma permanente.
Línea de comandos
Para agregar un volumen y activarlo, sigue estos pasos:
gcloud beta run jobs update JOB \ --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
Reemplaza lo siguiente:
JOB
por el nombre de tu trabajo.- VOLUME_NAME por el nombre que quieras para el volumen. El valor VOLUME_NAME se usa para asignar el volumen a la activación de volúmenes.
MOUNT_PATH
por la ruta de acceso relativa en el sistema de archivos del contenedor en el que deseas activar este volumen, por ejemplo,/cache
- SIZE_LIMIT por el límite de memoria que deseas asignar al volumen, en MiB o GiB (especificado como Mi o Gi), por ejemplo,
500Mi
. Este límite debe ser menor que la memoria total especificada para tus contenedores.
Si usas varios contenedores, primero especifica los volúmenes y, luego, especifica las activaciones de volúmenes de cada contenedor:
gcloud beta run jobs update JOB \ --add-volume=name= VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --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 creas un trabajo nuevo, omite este paso. Si actualizas un trabajo existente, descarga su configuración de YAML:
gcloud run jobs describe JOB_NAME --format export > job.yaml
Configura los atributos
volumeMounts
yvolumes
como se muestra a continuación:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME metadata: annotations: run.googleapis.com/launch-stage: BETA spec: template: metadata: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME emptyDir: sizeLimit: SIZE_LIMIT medium: Memory
Reemplaza lo siguiente:
- IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - VOLUME_NAME por el nombre que quieras para el volumen. El valor VOLUME_NAME se usa para asignar el volumen a la activación de volúmenes.
MOUNT_PATH
por la ruta de acceso relativa en el sistema de archivos del contenedor en el que deseas activar este volumen, por ejemplo,/cache
- SIZE_LIMIT por el límite de memoria que deseas asignar al volumen, en MiB o GiB (especificado como Mi o Gi), por ejemplo,
500Mi
. Este límite debe ser menor que la memoria total especificada para tus contenedores.
- IMAGE_URL por una referencia a la imagen del contenedor, como
Reemplaza el servicio por la configuración nueva mediante el siguiente comando:
gcloud beta run jobs replace job.yaml