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

Neste documento, descrevemos como usar o streaming de imagens para extrair imagens de contêiner em jobs de contêiner do Batch.

O streaming de imagens permite que os jobs do Batch sejam inicializados sem esperar que o download de uma imagem de contêiner seja concluído, 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, leia Começar a usar o Batch e ative o serviço 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 tiver feito 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 de serviço para incluir containerfilesystem.googleapis.com.

Limitações

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

  • O Batch só é compatível com o streaming de imagens para imagens de contêiner armazenadas no Artifact Registry. Se você usa o Container Registry para gerenciar imagens de contêiner, faça a transição para o Artifact Registry.
  • Execute as VMs do job do Batch 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 compatíveis.
  • Ao usar o streaming de imagem, os executáveis de contêineres só são compatíveis 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 use o streaming de imagens

Crie um job de contêiner do Batch que use 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 imagens 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 contenha 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 a este:

{
    "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 em lote.
  • PROJECT-ID: o projeto que contém a imagem do contêiner. Se o ID do projeto contiver 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