Utiliser le streaming d'images pour réduire le temps de démarrage du conteneur

Ce document explique comment utiliser le streaming d'images pour extraire des images de conteneurs vers des jobs de conteneurs Batch.

Le streaming d'images permet aux jobs par lot de s'initialiser sans attendre la fin du téléchargement d'une image de conteneur, ce qui offre les avantages suivants:

  • Latence réduite lors de l'extraction d'images volumineuses
  • Accélération de l'exécution des tâches

Avant de commencer

Limites

Le streaming d'images par lot présente les limites suivantes:

  • Batch n'est compatible qu'avec le streaming d'images pour les images de conteneurs stockées dans Artifact Registry. Si vous utilisez actuellement Container Registry pour gérer vos images de conteneurs, vous pouvez passer à Artifact Registry.
  • Vous devez exécuter les VM de votre job par lot au même emplacement que celui où vous stockez votre image de conteneur dans Artifact Registry.
  • Les conteneurs qui utilisent le fichier manifeste 2 de l'image Docker (schéma 1) ne sont pas compatibles.
  • Lorsque vous utilisez un streaming d'images, les conteneurs exécutables n'acceptent que les champs suivants :
    • imageUri
    • commands
    • entrypoint
    • volumes
    • enableImageStreaming
  • Les images de conteneurs contenant des couches vides ou en double ne sont pas acceptées.

Créer un job qui utilise le streaming d'images

Créez une tâche de conteneur par lot qui utilise le streaming d'images en procédant comme suit:

Utilisez Google Cloud CLI ou l'API REST pour créer une tâche de conteneur. Pour activer le streaming d'images pour un conteneur exécutable, définissez le champ enableImageStreaming sur true et le champ imageUri sur une image stockée dans un emplacement Artifact Registry contenant l'emplacement de la VM du job.

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

Par exemple, une tâche qui utilise le streaming d'images dispose d'un fichier de configuration JSON semblable à celui-ci:

{
    "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"
    }
}

Remplacez les valeurs suivantes :

  • LOCATION: emplacement régional ou multirégional du dépôt où l'image est stockée, par exemple us-east1 ou us. L'emplacement du conteneur doit être identique à celui des VM du job par lot.
  • PROJECT-ID: projet contenant l'image de conteneur. Si l'ID du projet contient le signe deux-points (:), consultez la section Projets à l'échelle du domaine.
  • REPOSITORY: nom du dépôt dans lequel l'image est stockée.
  • IMAGE : nom de l'image du conteneur.
  • TAG: tag appliqué à l'image.

Étapes suivantes