Usar o streaming de imagem para reduzir o tempo de inicialização do contêiner

Este documento descreve como usar o streaming de imagens para extrair imagens de contêiner em jobs de contêiner em lote.

O streaming de imagens permite que os jobs do Batch sejam inicializados sem esperar que uma imagem do contêiner termine o download, o que oferece os seguintes benefícios:

  • Latência reduzida ao extrair imagens grandes
  • Tempo mais rápido para iniciar a execução do job

Antes de começar

  1. Se você nunca usou o Batch, consulte Começar a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e usuários.
  2. Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:

    Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

    Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

  3. Se você ainda não fez isso, ative a API Container File System executando o seguinte comando:

    gcloud services enable containerfilesystem.googleapis.com
    
  4. Se as imagens de contêiner estiverem protegidas pelo VPC Service Controls, atualize o perímetro do serviço para incluir containerfilesystem.googleapis.com.

Limitações

O streaming de imagens em lote tem as seguintes limitações:

  • O lote só oferece suporte ao streaming de imagens para imagens de contêiner que são armazenadas no Artifact Registry. Se você usa o Container Registry para gerenciar suas imagens de contêiner, faça a transição para o Artifact Registry.
  • É necessário executar as VMs do job em lote no mesmo local em que você armazena a imagem do contêiner no Artifact Registry.
  • Contêineres que usam o manifesto de imagem do Docker versão 2, esquema 1 não são aceitos.
  • Quando você usa o streaming de imagem, os executáveis de contêineres são compatíveis apenas com os seguintes campos:
    • imageUri
    • commands
    • entrypoint
    • volumes
    • enableImageStreaming
  • Imagens de contêiner com camadas vazias ou duplicadas não são aceitas.

Criar um job que usa o streaming de imagens

Crie um job de contêiner do Batch que usa o streaming de imagens fazendo o seguinte:

Use a Google Cloud CLI ou a API REST para criar um job de contêiner. Para ativar o streaming de imagem em um contêiner executável, defina o campo enableImageStreaming como true e o campo imageUri como uma imagem armazenada em um local do Artifact Registry que contém o local da VM do job.

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

Por exemplo, um job que usa o streaming de imagens teria um arquivo de configuração JSON semelhante ao seguinte:

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

Substitua os seguintes valores:

  • LOCATION: o local regional ou multirregional do repositório em que a imagem está armazenada, por exemplo, us-east1 ou us. O local do contêiner precisa ser o mesmo das VMs do job do lote.
  • PROJECT-ID: o projeto que contém a imagem do contêiner. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • REPOSITORY: o nome do repositório em que a imagem está armazenada.
  • IMAGE: o nome da imagem do contêiner.
  • TAG: a tag aplicada à imagem.

A seguir