Limpeza de Recursos K3s

Este script instala e configura um sistema automatizado de limpeza K3s que ajuda a manter seu cluster K3s removendo containers parados e imagens não utilizadas.

📋 O que ele faz

O script de instalação configura:

  • Um script de limpeza em /usr/local/bin/k3s-cleanup.sh
  • Um cron job configurável (padrão: diariamente às 2:00 AM)
  • Registro de logs em /var/log/k3s-cleanup.log
  • Configuração de logrotate para gerenciar retenção de logs (padrão: 7 dias)
  • Usa o caminho completo /usr/local/bin/k3s para compatibilidade com cron

O processo de limpeza:

  • ✅ Remove containers parados (estado Created/Exited)
  • ✅ Remove imagens não utilizadas para liberar espaço em disco
  • ✅ Mostra uso de disco antes e depois da limpeza
  • ✅ Registra todas as operações com timestamps

🚀 Instalação Rápida

Execução direta com padrões (2:00 AM diariamente, retenção de logs de 7 dias)

curl -fsSL https://eliasmeireles.com.br/tools/k8s/install-k3s-cleanup.sh | sudo bash

Execução direta com opções personalizadas

# Download e execução com agendamento personalizado (ex: a cada 6 horas)
curl -fsSL https://eliasmeireles.com.br/tools/k8s/install-k3s-cleanup.sh | sudo bash -s -- -s '0 */6 * * *'

# Com retenção de logs personalizada (16 dias)
curl -fsSL https://eliasmeireles.com.br/tools/k8s/install-k3s-cleanup.sh | sudo bash -s -- -lk 16

# Com agendamento e retenção de logs personalizados
curl -fsSL https://eliasmeireles.com.br/tools/k8s/install-k3s-cleanup.sh | sudo bash -s -- -s '0 */6 * * *' -lk 16

Instalação manual

# Download do script
wget https://eliasmeireles.com.br/tools/k8s/install-k3s-cleanup.sh

# Tornar executável
chmod +x install-k3s-cleanup.sh

# Executar com padrões (2:00 AM diariamente, retenção de 7 dias)
sudo ./install-k3s-cleanup.sh

# Com agendamento personalizado
sudo ./install-k3s-cleanup.sh -s '0 */6 * * *'

# Com retenção de logs personalizada
sudo ./install-k3s-cleanup.sh -lk 16

# Com agendamento e retenção de logs personalizados
sudo ./install-k3s-cleanup.sh -s '0 */6 * * *' -lk 16

# Mostrar ajuda
sudo ./install-k3s-cleanup.sh -h

📋 Requisitos

  • Privilégios root: O script deve ser executado como root ou com sudo
  • K3s instalado: O script requer que o K3s esteja instalado em /usr/local/bin/k3s
  • Serviço cron: Para agendamento automatizado (geralmente pré-instalado na maioria dos sistemas)

🛠️ Opções de Linha de Comando

FlagForma LongaDescriçãoPadrão
-s--scheduleExpressão de agendamento cron0 2 * * * (2:00 AM diariamente)
-lk--log-keepDias para manter logs7
-h--helpMostrar mensagem de ajuda-

🔧 Uso

Após a Instalação

O script configura automaticamente um cron job diário, mas você também pode executá-lo manualmente:

# Executar limpeza manualmente
sudo /usr/local/bin/k3s-cleanup.sh

# Ver logs de limpeza
sudo tail -f /var/log/k3s-cleanup.log

# Verificar cron jobs atuais
crontab -l | grep k3s-cleanup

Operações de Limpeza Manual

Se você precisar de mais controle, pode usar comandos crictl do K3s diretamente:

# Listar todos os containers
sudo k3s crictl ps -a

# Remover containers parados específicos
sudo k3s crictl rm <container-id>

# Listar todas as imagens
sudo k3s crictl images

# Remover imagens não utilizadas
sudo k3s crictl rmi --prune

📊 Monitoramento

Verificar Uso de Disco

# Antes da limpeza
df -h | grep mnt

# Ver histórico de limpeza
sudo grep "Disk usage" /var/log/k3s-cleanup.log

Ver Logs

# Ver logs recentes de limpeza
sudo tail -20 /var/log/k3s-cleanup.log

# Ver todos os logs de limpeza
sudo cat /var/log/k3s-cleanup.log

# Seguir logs em tempo real
sudo tail -f /var/log/k3s-cleanup.log

# Ver logs rotacionados (comprimidos)
sudo zcat /var/log/k3s-cleanup.log.1.gz

# Verificar configuração do logrotate
cat /etc/logrotate.d/k3s-cleanup

⚙️ Configuração

Modificar Agendamento Cron e Retenção de Logs

Você pode alterar o agendamento e a retenção de logs executando o script de instalação novamente:

# Alterar apenas o agendamento
sudo ./install-k3s-cleanup.sh -s '0 */6 * * *'

# Alterar apenas a retenção de logs
sudo ./install-k3s-cleanup.sh -lk 30

# Alterar ambos agendamento e retenção de logs
sudo ./install-k3s-cleanup.sh -s '0 */6 * * *' -lk 16

# O script irá:
# 1. Remover a entrada existente do crontab
# 2. Criar uma nova entrada com o agendamento atualizado
# 3. Atualizar configuração do logrotate

Exemplos de Agendamento

sudo ./install-k3s-cleanup.sh -s '0 2 * * *'      # Diariamente às 2:00 AM (padrão)
sudo ./install-k3s-cleanup.sh -s '0 */6 * * *'    # A cada 6 horas
sudo ./install-k3s-cleanup.sh -s '30 3 * * *'     # Diariamente às 3:30 AM
sudo ./install-k3s-cleanup.sh -s '0 1 * * 0'      # Semanalmente aos domingos às 1:00 AM
sudo ./install-k3s-cleanup.sh -s '0 3 1 * *'      # Mensalmente no dia 1 às 3:00 AM

Exemplos de Retenção de Logs

sudo ./install-k3s-cleanup.sh -lk 7     # Manter logs por 7 dias (padrão)
sudo ./install-k3s-cleanup.sh -lk 16    # Manter logs por 16 dias
sudo ./install-k3s-cleanup.sh -lk 30    # Manter logs por 30 dias

Edição Manual do Crontab

Alternativamente, você pode editar o crontab diretamente:

# Editar crontab
sudo crontab -e

# Modificar o agendamento na entrada k3s-cleanup

Desabilitar Limpeza Automática

# Remover do crontab
sudo crontab -e
# Deletar a linha contendo k3s-cleanup.sh

🔍 Solução de Problemas

Problemas Comuns

Script falha com “k3s command not found”

# Verificar se k3s está instalado no local esperado
ls -la /usr/local/bin/k3s

# Se k3s estiver em outro lugar, criar um symlink
sudo ln -s $(which k3s) /usr/local/bin/k3s

# O script usa o caminho completo /usr/local/bin/k3s para compatibilidade com cron

Erros de permissão negada

# Garantir que o script tenha as permissões corretas
sudo chmod +x /usr/local/bin/k3s-cleanup.sh

# Verificar propriedade do arquivo
ls -la /usr/local/bin/k3s-cleanup.sh

Cron job não está executando

# Verificar se o serviço cron está executando
sudo systemctl status cron

# Iniciar serviço cron se necessário
sudo systemctl start cron
sudo systemctl enable cron

Logs não estão rotacionando

# Verificar configuração do logrotate
cat /etc/logrotate.d/k3s-cleanup

# Testar logrotate manualmente
sudo logrotate -d /etc/logrotate.d/k3s-cleanup

# Forçar logrotate
sudo logrotate -f /etc/logrotate.d/k3s-cleanup

Verificação

# Testar o script de limpeza manualmente
sudo /usr/local/bin/k3s-cleanup.sh

# Verificar se o cron job está agendado
sudo crontab -l | grep k3s-cleanup

# Verificar se o arquivo de log existe e é gravável
ls -la /var/log/k3s-cleanup.log

🗑️ Desinstalação

Para remover o sistema de limpeza:

# Remover o script
sudo rm /usr/local/bin/k3s-cleanup.sh

# Remover do crontab
sudo crontab -e
# Deletar linhas contendo k3s-cleanup

# Remover configuração do logrotate
sudo rm /etc/logrotate.d/k3s-cleanup

# Remover arquivos de log (opcional)
sudo rm /var/log/k3s-cleanup.log*

📝 Notas

  • O script é projetado para ser seguro e removerá apenas containers parados e imagens não utilizadas
  • Todas as operações são registradas com timestamps para fins de auditoria
  • O script inclui tratamento de erros e sairá com segurança se o K3s não estiver disponível
  • O uso de disco é mostrado antes e depois da limpeza para rastrear economia de espaço
  • Usa o caminho completo /usr/local/bin/k3s para garantir que os cron jobs funcionem corretamente
  • Re-executar o script de instalação substituirá a entrada existente do crontab com a nova configuração
  • O logrotate gerencia automaticamente os arquivos de log, comprimindo logs antigos e removendo-os após o período de retenção
  • Todas as opções suportam formas curtas (-s, -lk) e longas (--schedule, --log-keep)
  • Use -h ou --help para ver todas as opções disponíveis