En esta página se describe cómo configurar un volumen dedicado en memoria que puedes usar para leer y escribir archivos mediante los montajes de volumen de Cloud Run. Ten en cuenta que esta función es diferente del sistema de archivos en memoria integrado que proporciona Cloud Run.
Cuando montas el volumen en memoria en Cloud Run, el volumen en memoria se muestra como archivos en el sistema de archivos del contenedor. Una vez que hayas montado el volumen en memoria, podrás acceder a él como si fuera un directorio de tu sistema de archivos local, mediante las operaciones y bibliotecas del sistema de archivos de tu lenguaje de programación.
Puedes usar volúmenes en memoria para lo siguiente:
- Limita el tamaño del volumen en memoria. Si limitas el tamaño de un volumen, las escrituras en un volumen completo fallarán, lo que es preferible a que Cloud Run termine las instancias porque el volumen consuma demasiada memoria.
- Compartir un volumen en memoria entre diferentes contenedores en una instancia de Cloud Run. Cuando Cloud Run se amplía a varias instancias de un grupo de trabajadores, cada grupo de trabajadores tendrá su propio volumen en memoria compartido por todos los contenedores de ese grupo de trabajadores. Este volumen está disponible para todos los contenedores cuando Cloud Run se amplía para gestionar el tráfico.
Comportamiento
Cuando crees un volumen en memoria, te recomendamos que especifiques un límite de tamaño. Si el volumen alcanza su límite de tamaño, las escrituras posteriores fallarán con un error de falta de memoria. Tu instancia puede gestionar este error y seguir ejecutándose.
Ten en cuenta que el límite de tamaño es solo eso: no asigna espacio adicional a tu volumen en memoria. En su lugar, el volumen en memoria consume la memoria que hayas configurado para tus contenedores. Si implementas varios contenedores, la memoria usada por cada escritura en el volumen se contabiliza como uso de memoria del contenedor que escribió los datos.
Si no especificas un límite de tamaño, se asignará automáticamente a la mitad del tamaño total de todos los contenedores de tu trabajo o servicio. Por ejemplo, el tamaño del volumen emptyDir
= [Memoria (Contenedor A) + Memoria (Contenedor B) + Memoria (Contenedor N)]/2.
Este comportamiento predeterminado puede provocar que el límite de tamaño del volumen en memoria sea superior a la memoria asignada a algunos de tus contenedores. Esto puede provocar fallos inesperados si un contenedor supera su propia memoria asignada al intentar escribir más datos en el volumen, aunque no se haya alcanzado el límite de tamaño del volumen.
Aunque no es obligatorio definir un límite de tamaño, te recomendamos que lo hagas para proteger tus contenedores de que se queden sin memoria y fallen.
Rutas no permitidas
Cloud Run no te permite montar un volumen en /dev
,
/proc
y /sys
, ni en sus subdirectorios.
Roles obligatorios
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 grupo de trabajadores de Cloud Run interactúa con APIs deGoogle Cloud , como las bibliotecas de cliente de Cloud, consulta la guía de configuración de identidades de servicio. 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.
Configurar un volumen en memoria
Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.
Después de configurar un volumen en memoria para tu servicio de Cloud Run, se crea un volumen vacío para cada instancia de Cloud Run que se inicia, y el volumen existe mientras se ejecuta esa instancia. Cuando la instancia deja de ejecutarse, los datos del volumen se eliminan de forma permanente.
Configura un montaje de volumen en memoria con la Google Cloud consola, la CLI de Google Cloud o Terraform.
Consola
En la Google Cloud consola, ve a Cloud Run:
Selecciona Grupos de trabajadores en el menú y haz clic en Implementar contenedor para configurar un nuevo grupo de trabajadores. Si vas a configurar un grupo de trabajadores que ya existe, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.
Si vas a configurar un grupo de trabajadores, rellena la página inicial del grupo de trabajadores y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del grupo de trabajadores.
Haz clic en la pestaña Volúmenes.
- En Volúmenes, haz clic en Añadir volumen.
- En el desplegable Tipo de volumen, selecciona En memoria.
- En el campo Nombre del volumen, introduce el nombre que quieras usar para el volumen.
- Haz clic en Listo.
- Haz clic en la pestaña Contenedor.
- Haz clic en la pestaña Montajes de volúmenes.
- Haz clic en Montar volumen.
- Selecciona el volumen en memoria del menú.
- Especifica la ruta en la que quieres montar el volumen.
- Haz clic en Montar volumen.
- En Volúmenes, haz clic en Añadir volumen.
Haz clic en Crear o en Implementar.
gcloud
Para añadir un volumen y montarlo, sigue estos pasos:
gcloud beta run worker-pools update WORKER_POOL \ --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH
Haz los cambios siguientes:
- WORKER_POOL: el nombre del grupo de trabajadores.
- VOLUME_NAME: el nombre que quieras darle al volumen. El valor VOLUME_NAME se usa para asignar el volumen al montaje del volumen.
- MOUNT_PATH: la ruta relativa dentro del sistema de archivos del contenedor en la que quieres montar este volumen. Por ejemplo,
/mnt/my-volume
. - SIZE_LIMIT: el límite de memoria que quieres asignar al volumen, en MiB o GiB (especificado como Mi o Gi). Por ejemplo,
500Mi
. Este límite debe ser inferior a la memoria total especificada para tus contenedores.
Si usas varios contenedores, primero especifica los volúmenes y, a continuación, especifica los montajes de volumen de cada contenedor:
gcloud beta run worker-pools update WORKER_POOL \ --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
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Para especificar un solo contenedor, volumen y montaje de volumen:
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"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT"
}
}
}
}
Haz los cambios siguientes:
- SERVICE_NAME: el nombre de tu servicio de Cloud Run.
- REGION: la región Google Cloud , por ejemplo,
europe-west1
. - IMAGE_URL: 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 montaje del volumen.
- MOUNT_PATH: la ruta relativa dentro del sistema de archivos del contenedor en el que quieras montar este volumen. Por ejemplo,
/mnt/my-volume
. - SIZE_LIMIT: el límite de memoria que quieres asignar al volumen, en MiB o GiB (especificado como Mi o Gi). Por ejemplo,
500Mi
. Este límite debe ser inferior a la memoria total especificada para tus contenedores.
Para especificar varios contenedores, volúmenes y montajes de volúmenes, haz lo siguiente:
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"
}
}
containers {
image = "IMAGE_URL_2"
volume_mounts {
name = "VOLUME_NAME_2"
mount_path = "MOUNT_PATH_2"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT"
}
}
volumes {
name = "VOLUME_NAME_2"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT_2"
}
}
}
}
Haz los cambios siguientes:
- SERVICE_NAME: el nombre de tu servicio de Cloud Run.
- REGION: la región Google Cloud , por ejemplo,
europe-west1
. - IMAGE_URL, IMAGE_URL_2: 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, VOLUME_NAME_2: el nombre que quieras darle al volumen. Este valor se usa para asignar el volumen al montaje del volumen.
- MOUNT_PATH y MOUNT_PATH_2: la ruta relativa dentro del sistema de archivos del contenedor en el que quieras montar este volumen. Por ejemplo,
/mnt/my-volume
. - SIZE_LIMIT, SIZE_LIMIT_2: el límite de memoria que quieres asignar al volumen, en MiB o GiB (especificado como Mi o Gi). Por ejemplo,
500Mi
. Este límite debe ser inferior a la memoria total especificada para tus contenedores.
Ver la configuración de las variables de entorno del grupo de trabajadores
En la Google Cloud consola, ve a Cloud Run:
Haz clic en Grupos de trabajadores para ver la lista de grupos de trabajadores implementados.
Haz clic en el grupo de trabajadores que quieras examinar para que se muestre su panel de detalles.
Haz clic en la pestaña Contenedores para ver la configuración de los contenedores del grupo de trabajadores.
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 conservado 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");
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 grupo de trabajo de un solo contenedor, ejecuta el siguiente comando:
gcloud beta run worker-pools update WORKER_POOL \ --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 beta run worker-pools update WORKER_POOL \ --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 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