Costos Kubernetes (add-on)Costos Kubernetes (add-on)

Costos Kubernetes muestra quién gasta qué dentro de sus clústeres — por clúster, namespace y workload — con los datos de facturación reales de cada nube, y detecta capacidad pagada que nadie usa. Cuesta US$35 / CLP 29.000 al mes por cuenta de nube con el add-on activo, en cualquier plan; en Enterprise viene incluido.

Costos Kubernetes mostra quem gasta o quê dentro dos seus clusters — por cluster, namespace e workload — com os dados de faturamento reais de cada nuvem, e detecta capacidade paga que ninguém usa. Custa US$35 / CLP 29.000 por mês por conta de nuvem com o add-on ativo, em qualquer plano; no Enterprise vem incluído.

Dónde está·menú lateralPosturaCostos Kubernetes·Se contrata en Ajustes → Suite Shield, con activación por cuenta.

Onde fica·menu lateralPosturaCostos Kubernetes·Contrata-se em Configurações → Suite Shield, com ativação por conta.

Qué entrega en cada nube (honesto)O que entrega em cada nuvem (honesto)

Los datos los genera su propia nube; Cloura solo los lee. Por eso el alcance difiere por proveedor y hay que decirlo tal cual:

Os dados são gerados pela sua própria nuvem; a Cloura apenas os lê. Por isso o alcance difere por provedor e é preciso dizer isso claramente:

  • AWS (EKS) — costo por namespace, workload y pod (Split Cost Allocation Data + Data Export CUR 2.0 leído vía Athena), capacidad ociosa con el UnusedCost del propio billing, labels K8s propios (equipo / centro de costo), Fargate integrado y GPU por pod si el export la trae. Latencia: ~24 horas.
  • AWS (EKS) — custo por namespace, workload e pod (Split Cost Allocation Data + Data Export CUR 2.0 lido via Athena), capacidade ociosa com o UnusedCost do próprio billing, labels K8s próprios (time / centro de custo), Fargate integrado e GPU por pod se o export a trouxer. Latência: ~24 horas.
  • GCP (GKE) — costo por namespace y workload (detailed billing export en BigQuery + GKE cost allocation), workloads sin requests afirmados por el propio Google y labels k8s-label/*. No llega a pod. Latencia: hasta 3 días.
  • GCP (GKE) — custo por namespace e workload (detailed billing export no BigQuery + GKE cost allocation), workloads sem requests afirmados pelo próprio Google e labels k8s-label/*. Não chega a pod. Latência: até 3 dias.
  • Azure (AKS) — costo por clúster (el gasto real del node resource group) y ahorro detectado por Azure Advisor sobre los nodos. El costo por namespace solo existe en el portal de Azure (Microsoft no lo expone por API): Cloura verifica la cascada de elegibilidad —tier Standard/Premium, add-on cost-analysis, oferta EA o MCA— y le deja el deep-link a la vista Kubernetes del portal.
  • Azure (AKS) — custo por cluster (o gasto real do node resource group) e economia detectada pelo Azure Advisor sobre os nós. O custo por namespace só existe no portal do Azure (a Microsoft não o expõe por API): a Cloura verifica a cascata de elegibilidade —tier Standard/Premium, add-on cost-analysis, oferta EA ou MCA— e deixa o deep-link para a vista Kubernetes do portal.
Cloura no instala nada en sus clústeres Todo es lectura de billing y APIs. Única excepción ajena a Cloura: el add-on cost-analysis de Microsoft en AKS despliega un pod gestionado (~200 MB) en su clúster — lo instala Microsoft al habilitarlo, no Cloura.
A Cloura não instala nada nos seus clusters Tudo é leitura de billing e APIs. Única exceção alheia à Cloura: o add-on cost-analysis da Microsoft no AKS implanta um pod gerenciado (~200 MB) no seu cluster — quem o instala é a Microsoft ao habilitá-lo, não a Cloura.

Activación por nube (Enablement as Code)Ativação por nuvem (Enablement as Code)

Igual que Fix-as-Code entrega el arreglo listo, estos bloques entregan la habilitación lista: usted los copia y los ejecuta en su nube — Cloura nunca escribe en ella. La misma guía aparece en la app, dentro de la sección Costos Kubernetes.

Assim como o Fix-as-Code entrega o conserto pronto, estes blocos entregam a habilitação pronta: você os copia e executa na sua nuvem — a Cloura nunca escreve nela. O mesmo guia aparece no app, dentro da seção Costos Kubernetes.

AWS · EKS

Requiere permisos de administración de Billing en la cuenta payer. Primero el paso manual: Billing → Cost Management preferences → Split Cost Allocation Data (habilitar para EKS). Luego el Data Export CUR 2.0 — en Terraform/OpenTofu:

Requer permissões de administração de Billing na conta payer. Primeiro o passo manual: Billing → Cost Management preferences → Split Cost Allocation Data (habilitar para EKS). Depois o Data Export CUR 2.0 — em Terraform/OpenTofu:

cur_export.tf
resource "aws_s3_bucket" "cur" {
  bucket = "mi-bucket-cur-cloura"   # elija un nombre propio
}

resource "aws_bcmdataexports_export" "cur2" {
  export {
    name = "cloura-cur2-k8s"
    data_query {
      query_statement = <<-SQL
        SELECT line_item_resource_id, line_item_usage_start_date, resource_tags,
               split_line_item_split_cost, split_line_item_unused_cost,
               split_line_item_split_usage, split_line_item_actual_usage,
               split_line_item_reserved_usage
        FROM COST_AND_USAGE_REPORT
      SQL
      table_configurations = {
        COST_AND_USAGE_REPORT = {
          INCLUDE_RESOURCES                   = "TRUE"
          INCLUDE_SPLIT_COST_ALLOCATION_DATA  = "TRUE"
          TIME_GRANULARITY                    = "HOURLY"
        }
      }
    }
    destination_configurations {
      s3_destination {
        s3_bucket = aws_s3_bucket.cur.bucket
        s3_prefix = "cur2"
        s3_region = "us-east-1"
        s3_output_configurations {
          output_type = "CUSTOM"
          format      = "PARQUET"
          compression = "PARQUET"
          overwrite   = "OVERWRITE_REPORT"
        }
      }
    }
    refresh_cadence { frequency = "SYNCHRONOUS" }
  }
}

Al rol de solo lectura de Cloura hay que sumarle la lectura del export (Athena/Glue y el bucket; la única escritura del contrato es el prefijo athena-results/, los resultados de la propia consulta). El asistente de conexión de la app trae la política lista para copiar en dos formatos — CLI y Terraform/OpenTofu — certificados equivalentes (mismo JSON resultante). Los datos aparecen ~24 h después.

Ao papel somente leitura da Cloura é preciso somar a leitura do export (Athena/Glue e o bucket; a única escrita do contrato é o prefixo athena-results/, os resultados da própria consulta). O assistente de conexão do app traz a política pronta para copiar em dois formatos — CLI e Terraform/OpenTofu — certificados equivalentes (mesmo JSON resultante). Os dados aparecem ~24 h depois.

grant_cloura.tf
# Add-on Costos Kubernetes: el mismo grant que la pestana CLI, como IaC.
# Politica en linea ClouraK8sCostCUR sobre el rol ClouraReadOnly, acotada por ARN:
# la UNICA escritura es athena-results/ (los resultados de la propia consulta).
variable "cur_bucket" {
  description = "Bucket del Data Export CUR 2.0 (el de cur_export.tf)"
  type        = string
}

data "aws_caller_identity" "actual" {}

locals {
  acct = data.aws_caller_identity.actual.account_id
}

resource "aws_iam_role_policy" "cloura_k8s_cost_cur" {
  name = "ClouraK8sCostCUR"
  role = "ClouraReadOnly"
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect   = "Allow"
        Action   = ["athena:StartQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults"]
        Resource = "arn:aws:athena:us-east-1:${local.acct}:workgroup/primary"
      },
      {
        Effect = "Allow"
        Action = ["glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables", "glue:GetPartitions"]
        Resource = [
          "arn:aws:glue:us-east-1:${local.acct}:catalog",
          "arn:aws:glue:us-east-1:${local.acct}:database/*",
          "arn:aws:glue:us-east-1:${local.acct}:table/*/*",
        ]
      },
      {
        Effect   = "Allow"
        Action   = ["s3:GetObject", "s3:ListBucket"]
        Resource = ["arn:aws:s3:::${var.cur_bucket}", "arn:aws:s3:::${var.cur_bucket}/*"]
      },
      {
        Effect   = "Allow"
        Action   = "s3:PutObject"
        Resource = "arn:aws:s3:::${var.cur_bucket}/athena-results/*"
      },
    ]
  })
}

GCP · GKE

terminal · gcloud
PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
SA=cloura-readonly@$PROJECT_ID.iam.gserviceaccount.com

# 1) Cost allocation por namespace/workload en cada cluster GKE
gcloud container clusters update MI_CLUSTER --region MI_REGION --enable-cost-allocation

# 2) Dataset del detailed billing export + lectura para Cloura
bq mk --dataset --location=US $PROJECT_ID:billing_export
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SA" --role="roles/bigquery.jobUser"

En Terraform, el toggle del clúster es cost_management_config { enabled = true } en google_container_cluster. Paso manual honesto (~2 clics, no automatizable): el Detailed usage cost export se activa en la consola de Billing hacia ese dataset. Al terminar, registre el dataset en el campo del conector GCP de Cloura. Latencia: hasta 3 días.

No Terraform, o toggle do cluster é cost_management_config { enabled = true } em google_container_cluster. Passo manual honesto (~2 cliques, não automatizável): o Detailed usage cost export é ativado no console de Billing para esse dataset. Ao terminar, registre o dataset no campo do conector GCP da Cloura. Latência: até 3 dias.

Azure · AKS

terminal · az-cli
az aks update --resource-group MI_GRUPO --name MI_CLUSTER \
  --tier standard --enable-cost-analysis

En Terraform: sku_tier = "Standard" y cost_analysis_enabled = true en azurerm_kubernetes_cluster. Elegibilidad: tier Standard/Premium y oferta EA o MCA (pay-as-you-go legacy y CSP no son elegibles — Cloura lo detecta y se lo dice en vez de dejar la vista vacía). Recuerde: el add-on de Microsoft despliega un pod gestionado (~200 MB) en el clúster.

No Terraform: sku_tier = "Standard" e cost_analysis_enabled = true em azurerm_kubernetes_cluster. Elegibilidade: tier Standard/Premium e oferta EA ou MCA (pay-as-you-go legado e CSP não são elegíveis — a Cloura detecta isso e avisa em vez de deixar a vista vazia). Lembre-se: o add-on da Microsoft implanta um pod gerenciado (~200 MB) no cluster.

Limitaciones, tal cualLimitações, como são

  • Los datos de costo llegan con la latencia del billing de cada nube (~24 h en AWS, hasta 3 días en GCP); no es telemetría en vivo.
  • Os dados de custo chegam com a latência do billing de cada nuvem (~24 h na AWS, até 3 dias no GCP); não é telemetria ao vivo.
  • Azure no expone el costo por namespace por API: Cloura entrega el costo por clúster y el camino al portal, no promete lo que Microsoft no da.
  • O Azure não expõe o custo por namespace por API: a Cloura entrega o custo por cluster e o caminho para o portal, não promete o que a Microsoft não dá.
  • Cuando una fuente no se puede leer (permiso, export recién creado), Cloura lo dice y no afirma nada: nunca inventa un cero.
  • Quando uma fonte não pode ser lida (permissão, export recém-criado), a Cloura avisa e não afirma nada: nunca inventa um zero.
  • Fargate factura por recursos aprovisionados, no por uso: su "uso real" puede diferir de lo facturado y así se muestra.
  • O Fargate fatura por recursos provisionados, não por uso: seu "uso real" pode diferir do faturado e é assim que aparece.