Usa la transmisión de imágenes para reducir el tiempo de inicio del contenedor

En este documento, se describe cómo usar la transmisión de imágenes para extraer imágenes de contenedor en trabajos de contenedor por lotes.

La transmisión de imágenes permite que los trabajos por lotes se inicialicen sin esperar a que una imagen de contenedor termine de descargarse, lo que proporciona los siguientes beneficios:

  • Menor latencia cuando se extraen imágenes grandes
  • Menor tiempo para comenzar la ejecución del trabajo

Antes de comenzar

Limitaciones

La transmisión de imágenes por lotes tiene las siguientes limitaciones:

  • Batch solo admite la transmisión de imágenes para imágenes de contenedor que se almacenan en Artifact Registry. Si en la actualidad usas Container Registry para administrar tus imágenes de contenedor, puedes realizar la transición a Artifact Registry.
  • Debes ejecutar las VM de tu trabajo por lotes en la misma ubicación en la que almacenas la imagen de contenedor en Artifact Registry.
  • Los contenedores que utilizan la versión 2 del manifiesto de imagen de Docker, el esquema 1, no son compatibles.
  • Cuando usas la transmisión de imágenes, los contenedores ejecutables solo admiten los siguientes campos:
    • imageUri
    • commands
    • entrypoint
    • volumes
    • enableImageStreaming
  • No se admiten imágenes de contenedor con capas vacías o capas duplicadas.

Crea un trabajo que use la transmisión de imágenes

Para crear un trabajo de contenedor por lotes que use la transmisión de imágenes, haz lo siguiente:

Usa Google Cloud CLI o la API de REST para crear un trabajo de contenedor. Si quieres habilitar la transmisión de imágenes para un contenedor ejecutable, establece el campo enableImageStreaming en true y el campo imageUri en una imagen almacenada en una ubicación de Artifact Registry que contenga la ubicación de la VM del trabajo.

"container": {
    ...
    "enableImageStreaming": true
        }

Por ejemplo, un trabajo que usa la transmisión de imágenes tendría un archivo de configuración JSON similar al siguiente:

{
    "taskGroups": [
        {
            "taskCount": "1",
            "taskCountPerNode": "1",
            "taskSpec": {
                "runnables": [
                    {
                        "container": {
                            "imageUri": "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG",
                            "enableImageStreaming": true
                        }
                    }
                ]
            }
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "policy": {
                    "machineType": "e2-standard-4"
                }
            }
        ]
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

Reemplaza los siguientes valores:

  • LOCATION: Es la ubicación regional o multirregional del repositorio en el que se almacena la imagen, por ejemplo, us-east1 o us. La ubicación del contenedor debe ser la misma que la ubicación de las VMs del trabajo por lotes.
  • PROJECT-ID: Es el proyecto que contiene la imagen de contenedor. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio.
  • REPOSITORY: Es el nombre del repositorio en el que se almacena la imagen.
  • IMAGE por el nombre de la imagen de contenedor
  • TAG: Es la etiqueta que se aplica a la imagen.

¿Qué sigue?