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.
Cuando activas el volumen en memoria en Cloud Run, el volumen en memoria aparece como archivos en el sistema de archivos del contenedor. Después de activar el volumen en memoria, puedes acceder a él como si fuera un directorio en 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 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.
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 establece automáticamente como la mitad del tamaño total de todos los contenedores de la tarea de tu trabajo. 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. Esto puede provocar fallas inesperadas si un solo contenedor supera su propia memoria asignada mientras intenta escribir más datos en el volumen, aunque no se haya alcanzado 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.
Rutas no permitidas
Cloud Run no te permite activar un volumen en /dev,
/proc y /sys, ni en sus subdirectorios.
Roles obligatorios
Para obtener los permisos que necesitas para configurar los trabajos de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:
- Desarrollador de Cloud Run (
roles/run.developer) en el trabajo de Cloud Run - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la identidad del servicio
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu trabajo de Cloud Run interactúa con lasCloud de Confiance APIs, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta los permisos de implementación y cómo administrar el acceso.
Configura un volumen en memoria
Después de configurar un volumen en memoria para tu trabajo 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.
Console
En la consola de Cloud de Confiance by S3NS , ve a la página Trabajos de Cloud Run:
Haz clic en Implementar contenedor para completar la página de configuración de trabajo inicial. Si quieres configurar un trabajo existente, selecciona el trabajo y, luego, haz clic en Ver y editar la configuración del trabajo.
Haz clic en Contenedores, Conexiones, Seguridad para expandir la página de propiedades del trabajo.
Haz clic en la pestaña Volúmenes.
Haz clic en Volumen de activación.
Haz clic en En memoria como el tipo de volumen.
Para configurar el volumen, haz lo siguiente:
- En el campo Ruta de activación, ingresa la ruta en la que deseas activar el volumen.
- En el campo Nombre del volumen, ingresa el nombre del volumen.
- Opcional: Ingresa el Límite de tamaño y la Unidad de memoria para especificar el límite de memoria que deseas asignar al volumen. Este límite debe ser menor que la memoria total especificada para tus contenedores. Los datos almacenados en este volumen consumen la memoria reservada por el contenedor que los escribió.
- Haz clic en Guardar.
Haz clic en Crear o Actualizar.
gcloud
Para activar un volumen third_party/devsite/cloud/en/run/docs/images/nfs-volume-mount.png, haz lo siguiente:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT
Reemplaza lo siguiente:
- JOB: el nombre de tu trabajo.
- MOUNT_PATH: La ruta de acceso relativa en el sistema de archivos del contenedor en el que deseas activar este volumen, por ejemplo,
/mnt/my-volume - SIZE_LIMIT: Es 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 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
volumeMountsyvolumescomo se muestra a continuación:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: 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: Es una referencia a la imagen del contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/job:latest.- VOLUME_NAME: Cualquier nombre que desees para tu volumen. El valor VOLUME_NAME se usa para asignar el volumen a la activación de volúmenes.
MOUNT_PATH: Es la ruta de acceso relativa dentro del sistema de archivos del contenedor en el que deseas activar este volumen, por ejemplo,/mnt/my-volume.- SIZE_LIMIT: Es 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.
Crea o actualiza el servicio con el siguiente comando:
gcloud run jobs replace job.yaml
El comando
gcloud run jobs replaceusa de forma predeterminada el archivojob.yamlsi está presente.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Agrega lo siguiente a un recursogoogle_cloud_run_v2_job en tu configuración de Terraform:resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
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"
}
}
}
}
}
Reemplaza lo siguiente:
- JOB_NAME por el nombre del trabajo de Cloud Run.
- REGION por la región Cloud de Confiance . Por ejemplo,
europe-west1. IMAGE_URL: Es una referencia a la imagen del contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/job:latest.- VOLUME_NAME: Cualquier nombre que desees para tu volumen. El valor VOLUME_NAME se usa para asignar el volumen a la activación de volúmenes
- MOUNT_PATH: Es la ruta de acceso relativa dentro del sistema de archivos del contenedor en el que deseas activar este volumen, por ejemplo,
/mnt. - SIZE_LIMIT: Es el límite de memoria que deseas asignar al volumen, en MiB o GiB (especificado como Mi o Gi), por ejemplo,
128Mi. Este límite debe ser menor que la memoria total especificada para tus contenedores.
Leer y escribir en un volumen
Si usas la función de activación de volúmenes de Cloud Run, accedes a un volumen activado con las mismas bibliotecas en tu lenguaje de programación que usas para leer y escribir archivos en tu sistema de archivos local.
Esto es muy útil si usas un contenedor existente que espera que los datos se almacenen en el sistema de archivos local y usa operaciones regulares del sistema de archivos para acceder a él.
En los siguientes fragmentos, se supone una activación de volumen con una mountPath configurada como /mnt/my-volume.
Node.js
Usa el módulo del sistema de archivos para crear un archivo nuevo o agregarlo a uno existente 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 mantenido 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 mantenido 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");Cómo borrar y quitar volúmenes y activaciones de volúmenes
Puedes borrar todos los volúmenes y sus activaciones, o bien quitar volúmenes y activaciones individuales.
Borra todos los volúmenes y sus activaciones
Para borrar todos los volúmenes y sus activaciones de tu trabajo de un solo contenedor, ejecuta el siguiente comando:
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts \ --container=container1 \ --clear-volumes \ --clear-volume-mounts \ --container=container2 \ --clear-volumes \ --clear-volume-mounts
Cómo quitar volúmenes y activaciones de volúmenes individuales
Para quitar un volumen, también debes quitar todas las activaciones que lo usen.
Para quitar volúmenes o activaciones de volumen individuales, usa las marcas remove-volume y remove-volume-mount:
gcloud run jobs update JOB \ --remove-volume VOLUME_NAME --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH