Usar el streaming de imágenes para reducir el tiempo de inicio de los contenedores

En este documento se describe cómo usar el streaming de imágenes para extraer imágenes de contenedor en trabajos de contenedor de Batch.

La transmisión de imágenes permite que las tareas de Batch se inicialicen sin esperar a que se termine de descargar una imagen de contenedor, lo que ofrece las siguientes ventajas:

  • Latencia reducida al extraer imágenes grandes
  • Tiempo más rápido para iniciar la ejecución de la tarea

Antes de empezar

  1. Si no has usado Batch antes, consulta el artículo Empezar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
  2. Para obtener los permisos que necesitas para crear un trabajo, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

  3. Si aún no lo has hecho, habilita la API Container File System ejecutando el siguiente comando:

    gcloud services enable containerfilesystem.googleapis.com
    
  4. Si tus imágenes de contenedor están protegidas por Controles de Servicio de VPC, actualiza tu perímetro de servicio para incluir containerfilesystem.googleapis.com.

Limitaciones

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

  • El procesamiento por lotes solo admite la transmisión de imágenes para las imágenes de contenedor que se almacenan en Artifact Registry. Si actualmente usas Container Registry para gestionar tus imágenes de contenedor, puedes migrar a Artifact Registry.
  • Debes ejecutar las VMs de tu trabajo de Batch en la misma ubicación en la que almacenes tu imagen de contenedor en Artifact Registry.
  • No se admiten los contenedores que usan la versión 2, esquema 1 del manifiesto de imagen Docker.
  • Cuando usas el streaming 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 duplicadas.

Crear una tarea que use la transmisión de imágenes

Crea un trabajo de contenedor de Batch que use el streaming de imágenes haciendo lo siguiente:

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

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

Por ejemplo, un trabajo que use 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"
    }
}

Sustituye los siguientes valores:

  • LOCATION: la ubicación regional o multirregional del repositorio en el que se almacena la imagen, como us-east1 o us. La ubicación del contenedor debe ser la misma que la de las VMs de la tarea de Batch.
  • PROJECT-ID: el proyecto que contiene la imagen del contenedor. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con ámbito de dominio.
  • REPOSITORY: el nombre del repositorio en el que se almacena la imagen.
  • IMAGE: el nombre de la imagen del contenedor.
  • TAG: la etiqueta aplicada a la imagen.

Siguientes pasos