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 de Batch.

La transmisión de imágenes permite que los trabajos por lotes se inicialicen sin esperar a que finalice la descarga de una imagen de contenedor, 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

  1. Si nunca usaste Batch, revisa Cómo comenzar 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, pídele a tu administrador que te otorgue los siguientes roles de IAM:

    Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

  3. Si aún no lo hiciste, habilita la API del sistema de archivos de contenedor ejecutando el siguiente comando:

    gcloud services enable containerfilesystem.googleapis.com
    
  4. Si tus imágenes de contenedor están protegidas por los Controles del 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:

  • Batch 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 administrar tus imágenes de contenedor, puedes hacer la transición a Artifact Registry.
  • Debes ejecutar las VMs de tu trabajo de Batch en la misma ubicación en la que almacenas tu imagen de contenedor en Artifact Registry.
  • No se admiten los contenedores que usan la versión 2 del manifiesto de imágenes de Docker, esquema 1.
  • Cuando usas la transmisión de imágenes, los ejecutables de contenedores solo admiten los siguientes campos:
    • imageUri
    • commands
    • entrypoint
    • volumes
    • enableImageStreaming
  • No se admiten imágenes de contenedor con capas vacías o duplicadas.

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

Para crear un trabajo de contenedor de Batch 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. Para habilitar la transmisión de imágenes para un contenedor ejecutable, configura 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 de las VMs del trabajo por lotes.
  • PROJECT-ID: Es el proyecto que contiene la imagen del 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?