Header Ads

Como limpar contêineres e imagens antigos em seu cluster do Kubernetes

Um cluster Kubernetes ativo pode acumular contêineres e imagens antigos. Garantir que os recursos descartados sejam removidos quando redundantes ajuda a liberar recursos nos nós do seu cluster. Veja como abordar a coleta de lixo no Kubernetes.

Imagens de contêiner

O Kubernetes tem um sistema de coleta de lixo integrado que pode limpar imagens não utilizadas. São gerenciados pelo Kubelet, o processo de trabalho do Kubernetes que é executado em cada nó.

O Kubelet monitora automaticamente as imagens não utilizadas e as removerá periodicamente. As decisões de exclusão são feitas avaliando o uso do disco da imagem e a hora em que ela foi usada pela última vez. Uma imagem grande que não foi usada por uma semana geralmente será limpa antes de uma pequena que foi usada ontem.

Você pode personalizar quando a coleta de lixo é executada especificando os limites alto e baixo para o uso do disco. Uso de disco acima do “ alto ” limite acionará a coleta de lixo. O procedimento tentará reduzir o uso do disco para o nível “ baixo ” limite.

Os limites são definidos usando dois sinalizadores Kubelet:

  • image-gc-high-threshold – Define o limite alto; o padrão é 85%.
  • image-gc-low-threshold – Define o limite inferior; o padrão é 80%.

Essas configurações já devem estar ativas em seu cluster. O Kubelet tentará reduzir o uso do disco para 80% depois que ele ficar 85% cheio.

Você pode definir sinalizadores Kubectl em /var/lib/kubelet/kubeadm-flags. env:

 KUBELET_KUBEADM_ARGS = "- image-gc-high-threshold = 60 --image-gc-low-threshold = 50" 

Depois de editar o arquivo, reinicie o Kubectl:

 systemctl daemon-reload systemctl restart kubelet 

Limpando recipientes antigos

O Kubelet também lida com a limpeza de contêineres redundantes. Quaisquer contêineres parados ou não identificados serão candidatos à remoção.

Você pode conceder aos contêineres antigos um período de carência antes da exclusão, definindo uma idade mínima do contêiner. Sinalizadores adicionais permitem controlar o número total de contêineres inativos permitidos em um único pod e no nó:

  • contêineres mortos-máximos – Número máximo de contêineres antigos a serem retidos. Quando definido como -1 (o padrão), nenhum limite se aplica.
  • maximum-dead-containers-per-container – Defina o número de instâncias mais antigas a serem retidas por contêiner. Se um contêiner for substituído por uma instância mais recente, essas muitas versões mais antigas poderão permanecer.
  • minimum-container-ttl-duration – Período de tolerância para coleta de lixo para contêineres inativos Quando um contêiner tem tantos minutos de idade, ele se torna elegível para a coleta de lixo. O valor padrão de 0 significa que nenhum período de carência se aplica.

Você pode definir essas configurações com sinalizadores Kubelet usando o mesmo procedimento descrito acima.

Devo intervir manualmente?

Você não deve fazer esforços manuais para remover contêineres ou imagens mortos. Se o espaço em disco estiver sendo preenchido ou a coleta de lixo não parecer estar funcionando, tente ajustar os sinalizadores do Kubelet para configurações mais agressivas.

O Kubernetes alerta contra a execução da coleta de lixo externa. Não exclua recursos manualmente, usando APIs de gerenciamento de cluster ou ferramentas de terceiros. Isso corre o risco de criar um estado inconsistente que pode afetar a operação de Kubelet.

Kubelet é responsável por gerenciar os contêineres alocados para cada nó. Quando um novo contêiner for agendado, o Kubelet fará o download de sua imagem. A operação bem-sucedida do cluster depende do cumprimento das expectativas de Kubelet. Uma imagem ou contêiner ausente pode levar a problemas de Kubelet.

O futuro: despejos

As configurações descritas acima são compatíveis com as versões atuais do Kubernetes. No entanto, eles estão sendo preteridos em favor de um “ despejos ” mais robusto; sistema. Remoções são uma forma unificada de limpar os recursos do Kubernetes; eles eventualmente substituirão a coleta de lixo.

Um despejo pode ocorrer por vários motivos. Kubelet monitorará vários fatores, incluindo recursos de hardware disponíveis e configuração de usuário para períodos de retenção.

Este novo sistema facilita a remoção da coleta de lixo como um mecanismo dedicado. O mesmo processo que encerra os pods devido a um cenário de pouca memória excluirá imagens redundantes conforme o espaço em disco torna-se restrito.

Dois tipos de despejo são definidos: hard e soft. Um despejo forçado terá ação imediata para remover o recurso de destino. Não há período de carência. Um despejo suave tem um período de cortesia configurado pelo usuário; o recurso será direcionado assim que o período de carência expirar. Se a causa do despejo for resolvida durante o período de carência, como mais espaço em disco disponível, a remoção pode ser encerrada.

O sistema de despejos ainda não é totalmente compatível para limpeza de contêineres. Os sinalizadores de contêineres mortos já estão obsoletos, prontos para o futuro. Você já pode usá-lo com imagens de contêiner – defina --eviction-hard ou --eviction-soft em vez dos sinalizadores de limite.

 - eviction-hard = imagefs. available < 1Gi 

Este exemplo instrui o Kubelet a remover todas as imagens de contêiner não utilizadas se o espaço em disco disponível para armazenamento de imagens cair abaixo de 1 GB.

 - eviction-soft = imagefs. available < 1Gi --eviction-soft-grace-period = imagefs. available = 5m 

Este segundo exemplo mostra como um “ soft ” despejo pode ser usado em seu lugar. Nesse caso, as imagens não serão excluídas, a menos que o espaço em disco disponível seja inferior a 1 GB por pelo menos cinco minutos.

Resumo

O Kubernetes tem a coleta de lixo ativada por padrão. Contêineres mortos e imagens redundantes serão limpos periodicamente. A programação padrão visa o uso do disco de 80% ou menos; os contêineres são limpos de forma bastante agressiva assim que são interrompidos. Você pode usar sinalizadores Kubelet para ajustar os limites no processo.

A coleta de lixo como conceito será eventualmente removida em favor dos despejos. Os despejos têm uma configuração simplificada que se alinha melhor com outras formas de remoção de recursos. Você pode configurar despejos em seu cluster hoje. Lembre-se de que os sinalizadores de coleta de lixo não são mapeados diretamente para suas contrapartes de despejo.

Nenhum comentário