Header Ads

Como coletar o lixo do GitLab Container Registry para liberar armazenamento

O Container Registry do GitLab oferece um local conveniente para armazenar suas imagens do Docker. Com o tempo, o Container Registry pode consumir seu espaço em disco conforme mais camadas são adicionadas. Veja como liberar armazenamento removendo material redundante.

O Container Registry permite armazenar imagens Docker junto com o código-fonte do seu projeto. Se você estiver mantendo imagens grandes em seu registro, poderá descobrir que o custo de armazenamento rapidamente supera as suas expectativas. O GitLab retém cada camada indefinidamente, mesmo depois de se tornar redundante.

Definindo uma política de limpeza

A primeira etapa para recuperar seu espaço de armazenamento é configurar uma política de limpeza do Container Registry. As políticas de limpeza são aplicadas individualmente a cada projeto. Isso significa que você pode personalizar o período de retenção de acordo com cada base de código.

Visite seu projeto no GitLab e clique no link “ Configurações ” link na barra lateral. Mude para o “ CI / CD ” e expanda a categoria “ Limpar tags de imagem ” seção perto da parte inferior da página.

Alterne o botão “ Ativado ” para a posição ligado para ativar a Política de Limpeza. Em seguida, escolha quando executar a política – “ todos os dias ” é um bom padrão.

A próxima seção, “ Manter essas tags ”, permite que você defina as tags que a Política de limpeza deixará sozinhas. As duas opções, “ manter o mais recente ” e “ manter as tags correspondentes ”, são independentes umas das outras. Você pode escolher manter dev e nightly, complementado pelas cinco tags mais recentes. A última tag é sempre incluída, além de quaisquer tags definidas.

A seção a seguir, “ Remover essas tags ”, define a lista de permissões de tags a serem removidas. As tags que não correspondem ao padrão regex não serão tocadas. Ajuste a opção “ Remover tags anteriores a ” valor para definir a vida útil máxima de cada tag, antes de ser limpo. Quando terminar, clique no botão verde “ Salvar ” botão.

Usando a API

Aplicar políticas de limpeza por meio da IU da web pode se tornar rapidamente tedioso. Em vez disso, use a API se estiver mudando vários projetos.

 curl --request PUT --header 'Content-Type: application / json; charset = UTF-8' --header "PRIVATE-TOKEN: < access_token >" --data-binary '{"container_expiration_policy_attributes": {"cadence": "1month", "enabled": true, "keep_n": 1, "former_than": "14d", "name_regex": "", "name_regex_delete" : ". *", "name_regex_keep": "mais recente '" https://gitlab. example. com/api/v4/projects/"

Você precisará gerar um token de acesso da API acessando a página de seu Perfil no GitLab. Use o token como < access_token > no comando acima. Ajuste o URL para apontar para o seu projeto – seu ID pode ser encontrado na página do projeto no GitLab.

Executar o comando acima aplicará uma política de limpeza do registro que é executada todos os meses e limpa as imagens com mais de 14 dias. A última tag, e a mais recente (keep_n), serão retidas; todos os outros serão elegíveis para remoção (. *).

Efeitos da Política de Limpeza

A Política de Limpeza lida com a desmarcação de imagens com base nos critérios que você definir. As tags serão excluídas do registro do contêiner. Eles não serão mais exibidos na tela do Container Registry do seu projeto e não poderão ser extraídos por clientes Docker.

No entanto, desmarcar uma imagem não é o mesmo que excluí-la. A Política de limpeza não recicla dados, então você ainda pode ver um alto uso de armazenamento, mesmo depois de podar as tags fora de uso.

Isso ocorre porque as camadas de imagem permanecem em seu servidor GitLab, armazenadas em cache para referência futura. Para remover os dados definitivamente, você deve executar o procedimento de coleta de lixo do Container Registry.

Coleta de lixo

Executar a coleta de lixo excluirá todas as camadas da imagem que não estão vinculadas a uma tag. Isso resultará na remoção das imagens que não foram marcadas por sua política de limpeza. Ele também pode descartar camadas antigas que se tornaram redundantes quando você empurrou uma nova versão de uma tag.

A coleta de lixo deve ser chamada manualmente por meio da interface de linha de comando do GitLab. Conecte-se ao seu servidor GitLab por SSH e execute o seguinte comando:

 sudo gitlab-ctl registry-garbage-collect 

O processo de coleta de lixo será executado. Todas as tags não utilizadas em seu Container Registry serão recicladas. A coleta de lixo procura imagens não marcadas em toda a sua instância do GitLab.

Supondo que você deixe a política de limpeza ser executada primeiro, você verá uma redução saudável no uso de armazenamento. Se for a primeira vez que executa a coleta de lixo em uma instalação do GitLab usada com frequência, você pode ter recuperado vários gigabytes de espaço.

Removendo manifestos e camadas não marcados

Você pode recuperar ainda mais espaço instruindo a coleta de lixo a também remover manifestos de imagem não marcados e camadas não referenciadas. Esta é uma operação mais destrutiva, embora normalmente seja o que você espera ver.

 sudo gitlab-ctl registry-garbage-collect -m 

Adicionar o sinalizador -m excluirá qualquer camada não associada diretamente a um manifesto de imagem marcado. Isso resulta na perda de camadas em cache e etapas intermediárias de construção.

Por padrão, o Docker e o GitLab Container Registry retêm todas as camadas criadas, mesmo se não forem mais referenciadas. Isso significa que você sempre pode recuperar uma camada previamente conhecida usando seu identificador exclusivo endereçável por conteúdo, mesmo se não possuir mais uma tag.

É por isso que a remoção dessas camadas não está habilitada por padrão. Você precisa estar ciente das implicações antes de executar o comando, pois isso pode ter consequências graves em alguns fluxos de trabalho. No entanto, usar a opção -m geralmente é desejável – isso irá liberar muito mais espaço em disco e não deve ter nenhum efeito colateral se você apenas referenciar imagens usando nomes de tag.

Executando a coleta de lixo em uma programação

As políticas de limpeza são executadas automaticamente na frequência que você configurou. A coleta de lixo não é configurada por padrão, e é por isso que uma primeira execução pode oferecer uma redução dramática na utilização do armazenamento.

Para executar a coleta de lixo de acordo com uma programação, você precisará adicionar o comando ao crontab do seu sistema. Crie um arquivo /etc/cron.d/registry-garbage-collection com o seguinte conteúdo para executar a coleta de lixo toda segunda-feira às 2h:

 SHELL = / bin / sh PATH = / usr / local / sbin: / usr / local / bin: / sbin: / bin: / usr / sbin: / usr / bin 0 2 * * 1 root gitlab-ctl registry-garbage-collect 

Limitações da coleta de lixo

O tempo necessário para realizar a coleta de lixo dependerá da quantidade de dados que há para excluir. A coleta de lixo requer que o serviço Container Registry seja interrompido enquanto está em execução. Isso significa que seus usuários não conseguirão extrair ou enviar imagens até que o processo seja concluído.

Você pode reduzir o impacto do tempo de inatividade alternando o registro para o modo somente leitura, executando o comando e voltando para leitura / gravação. O registro pode permanecer em execução, mas os usuários não conseguirão enviar imagens. Além disso, a troca de modos requer que o GitLab seja “ reconfigurado ” (sudo gitlab-ctl reconfigure), que pode causar tempo de inatividade dependendo de como sua instalação está configurada.

Você precisa editar as seguintes linhas em /etc/gitlab/gitlab. rb:

 registro ['armazenamento'] = {'manutenção' = > {'somente leitura' = > {'ativado' = > verdadeiro}}} 

Execute sudo gitlab-ctl reconfigure e, em seguida, use um dos comandos de coleta de lixo. Quando terminar, desative o modo somente leitura alterando a linha habilitada em seu gitlab. rb de volta para falsa e reconfigure o GitLab novamente.

Nenhum comentário