💰 Kubecost — FinOps for Kubernetes
🎯 Visão Geral
Kubecost fornece análise de custos em tempo real para Kubernetes, mostrando:
- Custo por namespace
- Custo por workload (deployment, statefulset)
- Recomendações de otimização
- Alocação de recursos vs utilização real
📦 Deployment
\\yaml
Namespace: kubecost
Deployment: kubecost-cost-analyzer
Image: gcr.io/kubecost1/cost-model:prod-2.8.6
Replicas: 1
Status: 1/1 Running
Resources:
CPU Request: 200m
Memory Request: 55Mi
\\
💾 Storage
Persistent Volume Claims
| Nome | Size | StorageClass | Status |
|---|---|---|---|
| kubecost-cost-analyzer | 32Gi | default (Azure Disk) | Bound |
| kubecost-prometheus-server | 32Gi | default (Azure Disk) | Bound |
Total Storage: 64Gi
🌐 Acesso
Via Port-Forward
\\ash
kubectl port-forward -n kubecost svc/kubecost-cost-analyzer 9090:9090
\\
Acesse: http://localhost:9090
📊 Dashboards Principais
1. Cost Allocation
- Custo por namespace: Quanto cada equipe/aplicação gasta
- Custo por deployment: Drill-down até pod individual
- Custo por label: Agregação customizada (env, team, app)
2. Savings
- Idle Resources: Recursos alocados mas não utilizados
- Right-Sizing: Recomendações de CPU/Memory
- Abandoned Resources: PVCs sem pod associado
3. Assets
- Nodes: Custo individual por node
- Disks: Custo de storage (Azure Managed Disks)
- Network: Egress e load balancers
4. Reports
- Allocation Report: Custo histórico por período
- Efficiency Report: Utilização vs alocação
- Namespace Report: Comparativo entre namespaces
💡 Otimizações Identificadas
Recursos Ociosos (~15% detectado)
\\yaml
Namespace: observability
- Grafana: CPU request 100m, uso médio 20m (80% idle)
- Prometheus: Memory request 2Gi, uso médio 1.2Gi (40% idle)
Namespace: kubecost
- Cost-analyzer: CPU request 200m, uso médio 80m (60% idle)
\\
Potencial economia: ~\/mês ajustando requests
Right-Sizing Recomendado
| Workload | Request Atual | Uso Médio | Recomendação |
|---|---|---|---|
| grafana | 100m CPU | 20m | 50m |
| prometheus | 2Gi RAM | 1.2Gi | 1.5Gi |
| cost-analyzer | 200m CPU | 80m | 100m |
🔍 Queries Úteis
Custo por Namespace (último mês)
- Menu: Allocations
- Filtro: Aggregate by Namespace
- Window: Last 30 days
Top 10 Deployments Mais Caros
- Menu: Allocations
- Aggregate by: Controller
- Sort: Total Cost (descending)
Idle Cost Analysis
- Menu: Savings
- Seção: Cluster Idle Cost
- Ver: Idle CPU, Idle RAM
📈 Integração com Azure Cost Management
Reconciliação de Custos
Kubecost pode importar custos reais do Azure para comparar com estimativas.
Configurar Azure Billing Integration
\\yaml
Valores do Helm (values.yaml)
kubecostProductConfigs:
cloudIntegrationJSON: |
{
"azure": {
"subscriptionID": "e8fa95c6-0b02-4ace-8fe7-45378ef9921f",
"tenantID": "0aba7354-7884-4fbc-96a4-fb6fe0cc1158",
"clientID": "
"clientSecret": "
"storageAccount": "
}
}
\\
Após configuração:
- Custos reais aparecem em Assets → Cloud Costs
- Reconciliação automática entre estimado vs real
🚨 Alertas de Custo
Configurar Budget Alert
- Menu: Savings → Budgets
- Criar novo budget:
- Name: Monthly Cluster Budget
- Amount: \/mês
- Notification: Email quando > 80%
Spike Detection
- Detecta aumentos súbitos de custo (> 20% em 24h)
- Notifica via webhook (Slack, Teams, email)
🔧 Troubleshooting
Dashboard vazio
\\ash
Verificar Prometheus está coletando métricas
kubectl logs -n kubecost deployment/kubecost-cost-analyzer -f
Testar scrape do Prometheus
kubectl port-forward -n kubecost svc/kubecost-prometheus-server 9090:80
Acesse: http://localhost:9090/targets
\\
Custos não aparecem
\\ash
Verificar node pricing
kubectl logs -n kubecost deployment/kubecost-cost-analyzer | grep "pricing"
Forçar re-fetch de preços
kubectl delete pod -n kubecost -l app=cost-analyzer
\\
PVC cheio
\\ash
Ver uso de disco
kubectl exec -n kubecost
Limpar dados antigos (se necessário)
kubectl exec -n kubecost
\\
💰 Custos do Kubecost
| Recurso | Custo Mensal (USD) |
|---|---|
| Storage (2x32Gi) | ~\ |
| CPU/Memory overhead | ~\ |
| Total | ~\/mês |
ROI: Economias identificadas (>\/mês) pagam o custo do Kubecost.
📊 Métricas Prometheus Expostas
Kubecost expõe métricas customizadas:
\\promql
Custo por namespace
sum(kubecost_namespace_cost) by (namespace)
Custo total do cluster
sum(kubecost_cluster_cost)
Idle CPU cost
sum(kubecost_idle_cpu_cost)
\\
Usar no Grafana: Criar dashboards customizados de custo.
💡 Best Practices
✅ Recomendações
- Revisar semanalmente: Savings → Right-sizing
- Aplicar labels: \ eam\, \nv\, \cost-center\ para granularidade
- Budget alerts: Configurar para cada namespace crítico
- Exportar relatórios: Mensal para stakeholders
- Integrar com Azure: Validar custos reais vs estimados
❌ Evitar
- Ignorar recomendações de right-sizing (perda de economia)
- Não usar labels (análise superficial)
- Deletar PVCs antigos sem backup (perda de histórico)