Connecting a Kubernetes cluster
Deploy the DigiUsher Kubernetes agent with Helm and connect cluster metrics to DigiUsher.
Overview
Connecting a cluster brings your Kubernetes spend into DigiUsher alongside your cloud bills. You get cost broken down by namespace, workload, and team, a clear view of the capacity you're paying for but not using, and rightsizing signals for over-provisioned workloads.
To collect this, you install a lightweight agent in your cluster with Helm. Connecting takes a few minutes: create a Kubernetes data source in DigiUsher to get an install token, then run two Helm commands. From there the agent streams metrics on its own and your cluster costs start showing up in DigiUsher.
What gets installed
The digiusher-k8s-agent chart installs two small workloads and nothing else — no kube-state-metrics, and no in-cluster time-series database to run, scale, or pay for.
| Component | Type | What it does |
|---|---|---|
agent | StatefulSet (1 pod) | Receives metrics from vmagent, watches the Kubernetes API to build object metadata in-process, writes the data to a persistent volume, and uploads it to DigiUsher. |
vmagent | Deployment (1 pod) | Scrapes each node's kubelet (cAdvisor and /metrics endpoints), plus optional GPU and node exporters when present, and forwards the metrics to the agent. |
Both workloads run as a non-root user with a read-only root filesystem, drop all Linux capabilities, and cannot escalate privileges — so the agent is safe to run in locked-down and regulated clusters.
Prerequisites
| Requirement | Details |
|---|---|
| Helm | Helm must be installed locally. See the Helm documentation if you need to install it. |
| Kubernetes access | Use a kubeconfig context with permission to create namespaces, workloads, services, service accounts, config maps, secrets, and persistent volume claims, plus the cluster-scoped ClusterRole and ClusterRoleBinding the agent uses to read object metadata. |
| DigiUsher access | You need permission to create a Kubernetes data source in DigiUsher. |
| Outbound access | The agent must be able to reach https://app.digiusher.com/api/v3. |
| Storage | The agent creates a 20Gi persistent volume claim and vmagent creates a 30Gi claim by default. Both sizes are configurable. |
Keep the default namespace
Install the chart in the digiusher-k8s namespace unless DigiUsher support
instructs you to customize the chart. The agent's default configuration
references services in this namespace.
Connect your cluster
Connecting has two halves: you create the data source in DigiUsher, which hands you a ready-to-run Helm command, then you run that command in your cluster.
Create the Kubernetes data source
- Open the DigiUsher app.
- Go to Connectors, grouped under System.
- Click Add Source.
- Select Kubernetes and click continue.
- Enter a Display Name for the cluster — this is how the cluster appears throughout DigiUsher, so use something you'll recognize (for example,
prod-eks-us-east). - Continue to the confirmation step and click Save Data Source.
When you save, DigiUsher shows the full helm repo add and helm install commands with your token already filled in. Copy them and run them in your cluster — the steps below are the same commands, with a bit of context.
You can come back to this anytime
These commands stay available on the connector's page in DigiUsher, so you don't need to keep a copy outside the cluster.
Add the DigiUsher Helm repository
helm repo add digiusher https://digiusher.github.io/helm-charts
helm repo updateConfirm the chart is available:
helm search repo digiusherInstall the agent
Replace <insert_api_token> with your token.
helm install digiusher-k8s-agent digiusher/digiusher-k8s-agent \
--set agent.env.digiusher_k8s_api_token=<insert_api_token> \
--namespace digiusher-k8s \
--create-namespaceHelm stores the token in a Kubernetes secret named digiusher-k8s-agent-api-token (key K8S_API_TOKEN). If you'd rather not pass it on the command line, put it in a values file and install with -f values.yaml.
Confirm it's running
Check that the release deployed and both workloads are healthy:
helm status digiusher-k8s-agent --namespace digiusher-k8s
kubectl get pods --namespace digiusher-k8sYou should see the agent and vmagent pods reach Running. Once they do, the agent begins uploading on its own — your cluster's costs appear in DigiUsher after the first upload and processing cycle completes, with no further action needed.
What you can configure
The defaults are tuned to run on clusters of any size, so most teams install the chart exactly as shown above. These are the settings worth knowing about:
- Match your chargeback tags. The agent collects the
team,cost-center, andownerpod annotations so DigiUsher can attribute cost by those. If your org tags workloads with different keys, setagent.informers.annotationKeysto your own comma-separated list. - GPU and node-level metrics come for free. If your cluster runs an NVIDIA dcgm-exporter or a node-exporter, the agent discovers and scrapes them automatically — adding GPU cost and node-consolidation analysis with nothing to configure. Set
vmagent.dcgm.enabledorvmagent.nodeExporter.enabledtofalseto opt out. - Locked-down clusters. If you can't create cluster-scoped roles, have an administrator pre-create the agent's
ClusterRoleandClusterRoleBindingand install with--set agent.rbac.create=false. - Large or high-cardinality clusters. The defaults carry clusters well into the thousands of nodes. If you do hit memory pressure as you scale,
vmagentis the lever — see the sizing notes below.
For anything beyond a flag or two, put your overrides in a values file and install or upgrade with -f values.yaml.
What DigiUsher collects
The agent collects only what DigiUsher needs to allocate and rightsize cost — Kubernetes object metadata and resource usage. The agent builds object metadata in-process from the Kubernetes API, while vmagent scrapes usage metrics from each node.
| Source | Examples of collected data |
|---|---|
| Agent (Kubernetes API) | Namespaces, nodes, pods, deployments, daemonsets, replica sets, statefulsets, jobs, cronjobs, services, endpoints, persistent volumes, persistent volume claims, storage classes, resource quotas, horizontal pod autoscalers, and pod disruption budgets — plus the pod annotations configured for cost allocation |
| cAdvisor (via vmagent) | Container CPU usage, memory usage, network receive bytes, and network transmit bytes |
| kubelet (via vmagent) | Persistent volume used, capacity, and available bytes |
| dcgm-exporter (optional) | GPU utilization metrics, when an NVIDIA dcgm-exporter is present |
| node-exporter (optional) | Node CPU, memory, filesystem, disk, and network metrics for node-consolidation analysis, when a node-exporter is present |
The optional exporters are enabled by default and have no effect on clusters where they aren't installed — vmagent simply finds no targets to scrape.
Upgrade the agent
Refresh the Helm repository and upgrade the release:
helm repo update
helm upgrade digiusher-k8s-agent digiusher/digiusher-k8s-agent \
--set agent.env.digiusher_k8s_api_token=<insert_api_token> \
--namespace digiusher-k8sIf you installed with a custom values file, include the same file on upgrade:
helm upgrade digiusher-k8s-agent digiusher/digiusher-k8s-agent \
-f values.yaml \
--namespace digiusher-k8sUninstall the agent
To remove the DigiUsher Kubernetes agent from the cluster:
helm uninstall digiusher-k8s-agent --namespace digiusher-k8sIf you no longer need the namespace and any remaining resources in it, remove the namespace separately:
kubectl delete namespace digiusher-k8sDeleting the namespace removes all resources inside it
Only delete the digiusher-k8s namespace if it is dedicated to the DigiUsher
agent.
Troubleshooting
| Issue | What to Check |
|---|---|
| Helm cannot find the chart | Run helm repo add digiusher https://digiusher.github.io/helm-charts and helm repo update, then retry helm search repo digiusher. |
| Pods are not starting | Run kubectl describe pod <pod-name> --namespace digiusher-k8s and check image pull, scheduling, persistent volume, and resource errors. |
| Token secret is missing | Confirm the install command included --set agent.env.digiusher_k8s_api_token=<insert_api_token>. |
| Agent cannot send data | Confirm cluster egress allows https://app.digiusher.com/api/v3. |
| No Kubernetes data appears in DigiUsher | Confirm both pods in digiusher-k8s are running, then wait for the first upload and processing cycle to complete. |
Please contact the DigiUsher Support Team at support@digiusher.com if you have any questions or face any issues.
DigiUsher Documentation