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êineres 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 antes, revise Introdução ao Batch e ativar o Batch. 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, atualizar 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 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 as imagens de contêiner, é possível 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 compatíveis.
  • 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 camadas duplicadas não são aceitas.

Criar um job que use o streaming de imagens

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

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

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

Por exemplo, um job que usa streaming de imagem teria um arquivo de configuração 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 do contêiner precisa ser o mesmo que o local do VMs de jobs em lote.
  • PROJECT-ID: o projeto que contém o contêiner. imagem. 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