Configura activaciones de volúmenes en memoria para trabajos

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

  1. 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
  2. Configura los atributos volumeMounts y volumes 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 formato LOCATION-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.
  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud beta run jobs replace job.yaml