October 2026 release is live Read More

K8s Cluster Onboarding

Why this matters: this is the self-managed path: you're deploying Mavvrik's own appliance into your cluster via Helm, which scrapes Prometheus metrics directly rather than relying on a cloud provider's managed telemetry. Getting the Prometheus URL and script execution right here is what determines whether node and workload cost data starts flowing.

Before you start: you'll need kubectl and helm installed and configured with access to your cluster, and Prometheus already running in it.

Which clusters use this path: use this path for any self-managed Kubernetes cluster, including clusters that run on cloud virtual machines (for example, OpenShift on EC2). Managed services such as EKS, AKS and GKE have their own onboarding pages. The script in Step 3 installs the Mavvrik appliance as the Helm release dx-k8s-appliance in the mavvrik namespace.

Chart and provider: the appliance is a Helm chart published at oci://us-central1-docker.pkg.dev/cloudwiz-io/public-charts/dx-k8s-appliance. In its values, provider is set to "k8s"; leave it as "k8s" for every cluster that uses this page. Clusters onboarded this way appear on the K8s tab under Admin > Accounts > Kubernetes, with their host (for example on-prem or aws) shown in the Host Provider column. To install from the chart yourself and keep the API key in a Kubernetes Secret, see Kubernetes Secret Ref Usage.

Configuration steps

Step-1: Log in to Kubernetes Shell.

  • Ensure that kubectl and helm are installed and can access your cluster.

If Helm and kubectl are already installed, skip the steps below and proceed to Step-2.

Install kubectl

#Linux

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

chmod +x kubectl
sudo mv kubectl /usr/local/bin/

#macOS

brew install kubectl

#Windows (PowerShell)
choco install kubernetes-cli

Install Helm

#Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

#macOS
brew install helm

#Windows
choco install kubernetes-helm

Step-2: Enter the Prometheus URL in Mavvrik

  1. Capture the Prometheus URL associated with the Kubernetes cluster:

a. Enter the following URL in Mavvrik UI

http://<prometheus-server-name>.<namespace>:<prometheus-internal-port>

b. To find the Prometheus service, run the following command in Kubernetes shell

kubectl get svc -n prometheus
List Prometheus services in Kubernetes
List Prometheus services in Kubernetes
  1. In URL Replace prometheus-server-name,namespace & prometheus-internal-port with your data

Find & Enter the namespace where Prometheus service is installed

  1. Following screenshot shows the example of URL

Example Prometheus service URL
Example Prometheus service URL

Step 3: Execute the script from the Kubernetes Shell

  1. Copy the script and execute the command below provided by Mavvrik UI within the Kubernetes Shell terminal window.

Copy the Kubernetes onboarding script from Mavvrik
Copy the Kubernetes onboarding script from Mavvrik
  1. Paste in Kubernetes Shell Editor and click Enter

Run the onboarding script in the Kubernetes shell
Run the onboarding script in the Kubernetes shell
Confirm the Kubernetes appliance installation
Confirm the Kubernetes appliance installation
  1. Click on the Connect button in Mavvrik, after the running script is successfully completed.

  2. The onboarded Kubernetes cluster will be displayed with the list of All linked Nodes.

View the onboarded Kubernetes cluster and linked nodes
View the onboarded Kubernetes cluster and linked nodes

Metrics collected

The appliance scrapes the following Prometheus metrics, one hour of data at a time. Your Prometheus must expose them for cost and utilization data to appear. Cost data is refreshed once every 24 hours.

Workloads

container_cpu_usage_seconds_total
container_memory_working_set_bytes
kube_pod_container_resource_requests
kube_pod_container_resource_limits
kube_pod_owner
kube_pod_labels
kube_pod_status_phase

Nodes

kube_node_info
kube_node_status_capacity

Storage and volumes

container_fs_reads_bytes_total
container_fs_writes_bytes_total
kube_persistentvolume_info
kube_persistentvolume_created
kube_persistentvolume_capacity_bytes
kube_persistentvolumeclaim_info
kube_persistentvolumeclaim_created
kube_persistentvolumeclaim_resource_requests_storage_bytes
kube_pod_spec_volumes_persistentvolumeclaims_info
kubelet_volume_stats_used_bytes
kubelet_volume_stats_capacity_bytes

GPU (collected only for NVIDIA GPU nodes that expose these metrics through the DCGM exporter)

DCGM_FI_DEV_GPU_UTIL
DCGM_FI_DEV_MEM_COPY_UTIL
DCGM_FI_DEV_FB_USED
DCGM_FI_DEV_FB_FREE
DCGM_FI_DEV_SM_CLOCK
DCGM_FI_DEV_GPU_TEMP
DCGM_FI_DEV_POWER_USAGE
DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION

GPU monitoring (optional)

To see GPU utilization and cost for on-prem Kubernetes, your cluster needs:

  1. NVIDIA GPUs on the nodes.

  2. The NVIDIA DCGM exporter running in the cluster. The NVIDIA GPU Operator installs it, or you can deploy it separately.

  3. Your Prometheus scraping the DCGM exporter. See the kube-prometheus-stack page for how to add a scrape target.

If the DCGM exporter is not running, GPU figures show no data. CPU, memory and storage are not affected.

The appliance reads these GPU metrics from Prometheus:

Metric

What it measures

How it is collected

DCGM_FI_DEV_GPU_UTIL

GPU utilization

Average over each hour

DCGM_FI_DEV_MEM_COPY_UTIL

GPU memory copy (bandwidth) utilization

Average over each hour

DCGM_FI_DEV_FB_USED

GPU frame buffer (memory) in use

Average over each hour

DCGM_FI_DEV_FB_FREE

GPU frame buffer (memory) free

Average over each hour

DCGM_FI_DEV_SM_CLOCK

Streaming multiprocessor clock speed

Average over each hour

DCGM_FI_DEV_GPU_TEMP

GPU temperature

Average over each hour

DCGM_FI_DEV_POWER_USAGE

GPU power draw

Average over each hour

DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION

Total energy consumed by the GPU

Highest value in each hour, and in each day

GPU cost is calculated from the number of GPUs on a node and the node's GPU rate. See Configure Cluster/Node for how to set the GPU rate.

Troubleshooting

  • If the installation command fails, confirm that kubectl and Helm can access the intended cluster.

  • If the cluster does not connect, verify the Prometheus URL and rerun the command generated by Mavvrik.

  • If GPU figures show no data, confirm that the DCGM exporter is running and that Prometheus scrapes it.

FAQs

Do I need Prometheus already set up before starting this?
Yes, Prometheus needs to already be running in your cluster. This onboarding path scrapes metrics from your existing Prometheus, it doesn't install one for you.

How do I find the correct Prometheus URL if I don't already know it?
Run kubectl get svc -n prometheus in your Kubernetes shell to find the Prometheus service, then build the URL from the server name, namespace, and internal port shown in that output.