Cluster cost management

Cluster cost management provides insights into cluster resource usage. GitLab provides an example kubecost-cost-model project that uses GitLab’s Prometheus integration and Kubecost’s cost-model to provide cluster cost insights within GitLab:

Example dashboard

Configure cluster cost management

To get started with cluster cost management, you need Maintainer permissions in a project or group.

  1. Clone the kubecost-cost-model example repository, which contains minor modifications to the upstream Kubecost cost-model project:
    • Configures your Prometheus endpoint to the GitLab-managed Prometheus. You may need to change this value if you use a non-managed Prometheus.
    • Adds the necessary annotations to the deployment manifest to be scraped by GitLab-managed Prometheus.
    • Changes the Google Pricing API access key to GitLab’s access key.
    • Contains definitions for a custom GitLab Metrics dashboard to show the cost insights.
  2. Connect GitLab with Prometheus, depending on your configuration:
    • If Prometheus is already configured, navigate to Settings > Integrations > Prometheus to provide the API endpoint of your Prometheus server.
    • For GitLab-managed Prometheus, navigate to your cluster’s Details page, select the Applications tab, and install Prometheus. The integration is auto-configured for you.
  3. Set up the Prometheus integration on the cloned example project.
  4. Add the Kubecost cost-model to your cluster:
    • For non-managed clusters, deploy it with GitLab CI/CD.
    • To deploy it manually, use the following commands:

      kubectl create namespace cost-model
      kubectl apply -f kubernetes/ --namespace cost-model
      

To access the cost insights, navigate to Operations > Metrics and select the default_costs.yml dashboard. You can customize this dashboard.

Customize the cost dashboard

You can customize the cost dashboard by editing the .gitlab/dashboards/default_costs.yml file or creating similar dashboard configuration files. To learn more, read about customizing dashboards in our documentation.

Available metrics

Metrics contain both instance and node labels. The instance label will be deprecated in a future version.

  • 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 gigabyte of memory on this node.
  • node_total_hourly_cost - Total node cost per hour.
  • container_cpu_allocation - Average number of CPUs requested/used over the previous minute.
  • container_gpu_allocation - Average number of GPUs requested over the previous minute.
  • container_memory_allocation_bytes - Average bytes of RAM requested/used over the previous minute.
  • pod_pvc_allocation - Bytes provisioned for a PVC attached to a pod.
  • pv_hourly_cost - Hourly cost per GB on a persistent volume.

Some examples are provided in the kubecost-cost-model repository.