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 contenedores por lotes.

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

  • Menor latencia cuando se extraen imágenes grandes
  • Tiempo más rápido para comenzar la ejecución de trabajos

Antes de comenzar

  1. Si nunca antes usaste Batch, consulta 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 de Container File System mediante la ejecución del siguiente comando:

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

Limitaciones

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

  • Por lotes, solo admite la transmisión de imágenes para imágenes de contenedor que se almacenan en Artifact Registry. Si actualmente usas Container Registry para administrar tus imágenes de contenedor, puedes de transición a Artifact Registry.
  • Debes ejecutar las VMs de tu trabajo por lotes en la misma ubicación en la que almacenas tu imagen de contenedor en Artifact Registry.
  • No se admiten contenedores que usen el manifiesto de imágenes de Docker versión 2, esquema 1.
  • Cuando usas la transmisión de imágenes, 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.

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, establece el campo enableImageStreaming en true y el campo imageUri en una imagen que se almacena en una ubicación de Artifact Registry que contiene 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 región o multirregional. la ubicación de la 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 el contenedor. imagen. 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?