Pular para conteúdo

💰 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

  1. Menu: SavingsBudgets
  2. Criar novo budget:
  3. Name: Monthly Cluster Budget
  4. Amount: \/mês
  5. 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 -- df -h /var/configs

Limpar dados antigos (se necessário)

kubectl exec -n kubecost -- rm -rf /var/configs/db/cost-model/ETL*
\\


💰 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

  1. Revisar semanalmente: Savings → Right-sizing
  2. Aplicar labels: \ eam\, \nv\, \cost-center\ para granularidade
  3. Budget alerts: Configurar para cada namespace crítico
  4. Exportar relatórios: Mensal para stakeholders
  5. Integrar com Azure: Validar custos reais vs estimados

❌ Evitar

  1. Ignorar recomendações de right-sizing (perda de economia)
  2. Não usar labels (análise superficial)
  3. Deletar PVCs antigos sem backup (perda de histórico)