Volúmenes en memoria (servicios)

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.

Esta función difiere del sistema de archivos en memoria integrado que proporciona Cloud Run, que no limita la memoria que consumen las escrituras de archivos en memoria. Con los volúmenes en memoria, puedes limitar la cantidad de memoria que se puede consumir.

Comportamiento

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 existe mientras esa instancia esté en ejecución. Cuando la instancia deja de ejecutarse, los datos del volumen se borran de forma permanente.

Si especificas un límite para un volumen en memoria y luego excedes ese límite cuando escribes en el volumen, obtendrás un error de memoria insuficiente, que podrás controlar, y la instancia continuará ejecutándose. Si no especificas un límite de tamaño de volumen y, luego, excedes el límite de memoria de la instancia cuando escribes en el volumen, la instancia fallará.

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

Casos de uso

​ Los casos de uso para un volumen en memoria incluyen la asignación de espacio temporal o puntos de control a un procesamiento largo para evitar fallas.

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.

Si especificas un límite de tamaño de memoria para el volumen, la memoria se asigna desde la memoria que usan todos los contenedores individuales en la instancia que acceden a este volumen. Si especificas un tamaño de volumen en la memoria que es mayor que la suma total de toda la memoria usada por los contenedores en la instancia, el volumen se establece de forma predeterminada en la suma total que usan los contenedores.

Si no especificas un límite de tamaño de memoria para un volumen, puedes exceder el límite de memoria de la instancia y hacer que la instancia falle.

Si usas el volumen en memoria como un volumen compartido en una implementación de varios contenedores sin especificar un límite de tamaño en la memoria, la mitad del total de la memoria de la instancia disponible se asigna para el volumen compartido. Por ejemplo, el tamaño de volumen emptyDir = [Memoria (Contenedor A) + Memoria (Contenedor B) + Memoria (Contenedor N)]/2.

Consola

  1. Ir a Cloud Run

  2. Haz clic en el servicio que deseas configurar.

  3. Haz clic en la pestaña YAML.

  4. Configura los atributos volumeMounts y volumes como se muestra a continuación:

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
      annotations:
        run.googleapis.com/launch-stage: BETA
        name: SERVICE
      spec:
        template:
          metadata:
          spec:
            containers:
            - image: IMAGE_URL
              volumeMounts:
              - mountPath: PATH
                name: VOLUME_NAME
            volumes:
            - name: VOLUME_NAME
              emptyDir:
                sizeLimit: SIZE_LIMIT
                medium: Memory

    replace

    • SERVICE por el nombre del servicio de Cloud Run
    • 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 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PATH por la ruta de acceso relativa al volumen, por ejemplo, /cache.
    • VOLUME_NAME por el nombre que deseas usar para el volumen en memoria.
    • 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.
  5. Haz clic en Guardar e implementar nueva revisión.

YAML

Puedes descargar y ver las configuraciones del servicio existente mediante el comando gcloud run services describe --format export, que genera resultados limpios en formato YAML. Luego, puedes modificar los campos que se describen a continuación y subir el YAML modificado mediante el comando gcloud run services replace. Asegúrate de modificar los campos tal como se indica en la documentación.

  1. Para ver y descargar la configuración, ejecuta el siguiente comando:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Configura los atributos volumeMounts y volumes como se muestra a continuación:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     annotations:
      run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - mountPath: PATH
              name: VOLUME_NAME
          volumes:
          - name: VOLUME_NAME
            emptyDir:
              sizeLimit: SIZE_LIMIT
              medium: Memory

    Reemplaza lo siguiente:

    • SERVICE por el nombre del servicio de Cloud Run
    • 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 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PATH por la ruta de acceso relativa al volumen, por ejemplo, /cache.
    • VOLUME_NAME por el nombre que deseas usar para el volumen en memoria.
    • 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 run services replace service.yaml