Header Ads

Como ativar o proxy de dependência do GitLab para imagens do Docker

O GitLab tem um proxy de dependência integrado que armazena em cache as imagens do Docker upstream. Anteriormente um recurso premium, o Dependency Proxy foi de código aberto e disponibilizado para todas as versões do GitLab em novembro de 2020 como parte do GitLab 13.6.

O Dependency Proxy se comporta como um cache pull-through para imagens Docker armazenadas no Docker Hub. Configurar o Dependency Proxy pode acelerar seus pipelines e ajudá-lo a permanecer dentro dos limites de taxa do Docker.

Habilitando o proxy de dependência

A disponibilidade do Dependency Proxy é controlada por uma configuração no nível da instância. Habilitar o Dependency Proxy requer que o GitLab seja reconfigurado. Isso causará um breve período de inatividade.

Para ativar o recurso, adicione a seguinte linha ao arquivo de instalação &’ s /etc/gitlab/gitlab. rb:

gitlab_rails & # 91; " dependency_proxy_enabled " & # 93; = verdadeiro

Salve o arquivo e execute o seguinte comando em seu terminal:

 sudo gitlab-ctl reconfigure 

As instruções acima são para instalações GitLab Omnibus. Se você instalou da fonte, o proxy de dependência deve ser habilitado em seu arquivo config / gitlab. yml.

Usando o proxy de dependência

Dependency Proxy só funciona com grupos GitLab. No momento, você não pode usá-lo com projetos pessoais autônomos.

O recurso é normalmente usado em scripts de pipeline de CI. Ao fazer referência a uma imagem em um pipeline, prefixe o nome do Docker Hub da imagem com a variável CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX. Esta variável é resolvida automaticamente para o URL do proxy de dependência para seu grupo GitLab ativo.

 imagem: $ / nodejs: mais recente 

Este pipeline executará seu trabalho em um nodejs: último contêiner. A imagem será obtida por meio do proxy de dependência. As execuções subsequentes do pipeline não precisarão atingir o Docker Hub, a menos que a imagem upstream realmente mude.

Você também pode acessar o Proxy de dependência manualmente, fora do GitLab CI. Você deve se autenticar com o login do docker primeiro. Você precisará usar seu nome de usuário e senha do GitLab ou seu nome de usuário e um token de acesso pessoal.

 login do docker gitlab. example. com - nome de usuário nome de usuário - senha da senha 

Depois de autenticado, você pode fazer pull do docker usando o proxy de dependência GitLab. Substitua example-group no URL abaixo pelo nome do grupo que você deseja usar. A imagem extraída será armazenada em cache no proxy de dependência desse grupo.

 docker pull gitlab. example. com/example-group/dependency_proxy/containers/nodejs:latest

Se você também usa o Container Registry do GitLab (para armazenar imagens que você cria), observe que o Dependency Proxy é totalmente separado e tem um URL diferente. Enquanto o Container Registry é normalmente exposto em seu próprio subdomínio (por exemplo, registry. example. com), o Dependency Proxy é acessado por meio do mesmo nome de host que a IU da Web do GitLab.

Como funciona o proxy de dependência

O Dependency Proxy se apresenta como outro registro do Docker. Quando quiser usar o proxy, faça o login do docker nele e, em seguida, faça o pull do dock normalmente.

Se o Proxy de dependência já armazenou a imagem em cache, ele &’ a retornará diretamente sem usar o Docker Hub. Caso contrário, a imagem é extraída do Docker Hub, armazenada em cache no proxy e retornada ao Docker CLI.

O GitLab tentará entrar em contato com o Docker Hub para cada pull do docker, mesmo se uma imagem em cache estiver disponível. Isso ocorre porque o proxy deve verificar se a imagem foi atualizada no Docker Hub.

Este procedimento não afeta a limitação de taxa do Docker. O Docker permite solicitações freeHEAD para comparar versões de manifesto de imagem. Se o Docker indicar que a imagem em cache está desatualizada, o GitLab puxará a versão nova (incorrendo em um limite de taxa atingido). Caso contrário, a imagem em cache será retornada, sem adicionar à contagem de limite de taxa do Docker Hub.

Essas características tornam o Proxy de dependência ideal para pipelines de CI. Ao fazer login no proxy, você pode puxar o docker com segurança em cada execução do pipeline, sem atingir o limite de taxa do Docker Hub.

Definindo configurações de proxy de dependência

O proxy de dependência pode usar uma quantidade substancial de armazenamento com o tempo. Você está armazenando imagens em cache do Docker Hub; essas imagens podem ser muito grandes, dependendo do que você está usando.

O GitLab permite que você personalize o local de armazenamento. Defina a configuração dependency_proxy_storage_path em /etc/gitlab/gitlab. rb se quiser usar uma unidade de armazenamento dedicada.

gitlab_rails & # 91; " dependency_proxy_storage_path " & # 93; = " / mnt / my-storage-drive "

As instalações de origem devem definir a propriedade storage_path na seção dependency_proxy de config / gitlab. yml.

Você também pode armazenar suas imagens em cache em um serviço de armazenamento de objetos como o Amazon S3. Aqui está um exemplo de configuração Omnibus em /etc/gitlab/gitlab. rb:

gitlab_rails & # 91; " dependency_proxy_object_store_enabled " & # 93; = verdadeiro   # Este é o nome do intervalo S3 gitlab_rails & # 91; " dependency_proxy_object_store_remote_directory " & # 93; = " gitlab-dependency-proxy "   gitlab_rails & # 91; " dependency_proxy_object_store_connection " & # 93; = & # 123; " provedor " = > " AWS & quot ;, " região " = > " eu-west-1 & quot ;, " aws_access_key_id " = > " AWS_ACCESS_KEY_ID & quot ;, " aws_access_key_id " > " AWS_SECRET_ACCESS_KEY " & # 125;

Para melhorar o desempenho, o GitLab armazenará as imagens em cache localmente e depois as enviará para o S3 em segundo plano. Se você preferir fazer upload diretamente para S3, defina a configuração dependency_proxy_object_store_direct_upload como true.

Você deve reconfigurar o GitLab (sudo gitlab-ctl reconfigure) após fazer alterações nas configurações de armazenamento. O Dependency Proxy irá então armazenar imagens em cache usando sua nova configuração.

Liberando armazenamento

O GitLab nunca exclui os dados do proxy de dependência em cache. Você pode visualizar o conteúdo de um cache de grupos selecionando Pacotes & Registros > Proxy de dependência em sua barra lateral. Esta tela permite habilitar ou desabilitar o Dependency Proxy para o grupo e ver o tamanho total dos dados armazenados. No entanto, você não pode usar a IU para limpar blobs antigos.

Se você precisa liberar armazenamento, você deve usar a API GitLab. Há um único ponto de extremidade que permite limpar todos os dados do proxy de dependência armazenados para um grupo específico.

Crie um token de acesso pessoal clicando em seu perfil no canto superior direito, clicando em “ Tokens de acesso ” na barra lateral esquerda e adicionando um novo token de acesso com o escopo da API.

Em seguida, use curl para excluir o cache de proxy de dependência de um grupo:

 curl --request EXCLUIR - cabeçalho "TOKEN PRIVADO: < Token de acesso >" https://gitlab. example. com/api/v4/groups//dependency_proxy/cache

Para encontrar o ID do seu grupo, visite a página inicial do grupo que deseja limpar. O ID do grupo será mostrado ao lado de seu nome.

Conclusão

Ativar o proxy de dependência é uma etapa simples que melhora a resiliência de seus pipelines. Se o Docker Hub ficar inativo, o proxy ainda fornecerá ao pipeline versões de imagens em cache.

O Dependency Proxy também ajuda você a se manter dentro dos limites de taxa do Docker Hub. Você só precisará extrair imagens do Docker Hub quando elas realmente forem alteradas. Para uma equipe ativa executando muitos pipelines a cada dia, isso pode ajudá-lo a evitar a necessidade de fazer upgrade para um plano premium do Docker Hub.

Nenhum comentário