Kubecost allows you to export pricing data to Prometheus and then write custom queries for cost insights. Below are instructions for accomplishing this and a set of example queries to get you started.
After deploying the Kubecost model (see README for more info on installation), configure Prometheus to scrape the /metrics
endpoint exposed by Kubecost. Below is a sample scrape config:
- job_name: kubecost
honor_labels: true
scrape_interval: 1m
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- < address of cost-model service> # example: <service-name>.<namespace>:<port>
Below are a set of sample queries that can be run after Prometheus begins ingesting Kubecost data:
Monthly cost of top 5 containers
topk( 5,
container_memory_allocation_bytes* on(instance) group_left() node_ram_hourly_cost / 1024 / 1024 / 1024 * 730
+
container_cpu_allocation * on(instance) group_left() node_cpu_hourly_cost * 730
)
Hourly memory cost for the default namespace
sum(
avg(container_memory_allocation_bytes{namespace="default"}) by (instance) / 1024 / 1024 / 1024
*
on(instance) group_left() avg(node_ram_hourly_cost) by (instance)
)
Monthly cost of currently provisioned nodes
sum(node_total_hourly_cost) * 730
Note: metrics today have both instance and node labels. The instance label will be deprecated in a future version.
Metric | Description |
---|---|
node_cpu_hourly_cost | Hourly cost per vCPU on this node |
node_gpu_hourly_cost | Hourly cost per GPU on this node |
node_ram_hourly_cost | Hourly cost per Gb of memory on this node |
node_total_hourly_cost | Total node cost per hour |
kubecost_load_balancer_cost | Hourly cost of a load balancer |
kubecost_cluster_management_cost | Hourly management fee per cluster |
pv_hourly_cost | Hourly cost per GP on a persistent volume |
node_gpu_count | Number of GPUs available on node |
container_cpu_allocation | Average number of CPUs requested/used over last 1m |
container_gpu_allocation | Average number of GPUs requested over last 1m |
container_memory_allocation_bytes | Average bytes of RAM requested/used over last 1m |
pod_pvc_allocation | Bytes provisioned for a PVC attached to a pod |