Este repositório contém a configuração para implementar o Kubernetes Descheduler no AWS EKS usando Terraform e Helm. O Descheduler roda como um CronJob, redistribuindo automaticamente os pods para otimizar a alocação no cluster.
O Kubernetes Descheduler ajuda a melhorar a distribuição dos pods dentro do cluster. O Kubernetes escalona pods apenas no momento da criação, mas não os redistribui caso a infraestrutura mude. O Descheduler roda periodicamente e desaloca pods que estão mal distribuídos, permitindo que o agendador (scheduler) os posicione de forma mais eficiente.
Benefícios do Descheduler:
✅ Melhor balanceamento de carga → Evita sobrecarga de alguns nós e subutilização de outros.
✅ Otimização de custos → Usa os recursos do cluster de forma eficiente.
✅ Maior estabilidade → Reduz gargalos e melhora a disponibilidade dos serviços.
✅ Ajuste contínuo → Diferente do kube-scheduler, que só age no deploy inicial, o Descheduler melhora a alocação ao longo do tempo.
Antes de rodar esta configuração, certifique-se de que possui:
- AWS CLI configurado e autenticado.
- kubectl instalado e conectado ao cluster EKS.
- Terraform 1.3+ instalado.
- Helm 3+ instalado.
A configuração utiliza:
✅ AWS EKS como cluster Kubernetes.
✅ Terraform para gerenciar a infraestrutura.
✅ Helm para instalar o Kubernetes Descheduler.
✅ CronJob para rodar o Descheduler periodicamente.
📁 terraform/
│── 📄 provider.tf # Configuração dos providers AWS, EKS e Helm
│── 📄 variables.tf # Definição de variáveis para customização
│── 📄 main.tf # Código principal do Terraform para criar o Descheduler
│── 📄 outputs.tf # Exibe informações úteis após a execução
│── 📄 terraform.tfvars # Valores personalizados (opcional)
│── 📄 README.md # Documentação completa do projeto
git clone https://github.com/ddias00/Descheduler.git
cd kubernetes-descheduler-terraform- Edite o arquivo terraform.tfvars para personalizar a configuração
terraform init
terraform plan
terraform apply -auto-approvekubectl get cronjobs -n kube-systemNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
descheduler */30 * * * * False 0 10m 15m
kubectl logs -l app.kubernetes.io/name=descheduler -n kube-systemI0228 10:15:23.738325 1 descheduler.go:53] Running descheduler strategies
I0228 10:15:24.341267 1 remove_duplicates.go:72] Evicting pod xyz-123 from node ip-10-0-1-45terraform destroy -auto-approve