NEW Introducing vMetal: turn your GPU racks into a cloud platform →
Alpha Open source billing controller

Usage-based billing for AI Clouds running vCluster or vMetal

Meter tenant clusters to the second, keep a durable, verifiable ledger, and ship reconcilable usage to Stripe, Metronome, Lago, or your own pipeline.

New in v0.2: Stripe and Metronome, a verifiable ledger, vCluster Private Nodes, and DCGM through your own Prometheus. See it on GKE with shared and private GPUs →

Invoice preview
team-gpu-prod
April 2026 · 8x H100 dedicated
$34,582.50
GPU hours · H100 7,680
CPU core-hours 92.1k
Memory GB-hrs 368k
Storage GB-hrs 14.4k
Network egress 842 GB

Ships to your billing backend

vBilling is the pipe, not the billing engine. Meter tenant clusters once and route events to whichever billing adapter you run.

vCluster vMetal vBilling Lago Metronome Stripe Webhook / Custom

Three steps to tenant billing

vBilling collects usage and ships it to your billing adapter. Your adapter handles pricing, plans, and invoicing. You stay in control of what anything costs.

01 · Choose

Choose Billing Platform

Pick the billing backend you already run: Stripe, Metronome (with Stripe for payments), Lago, or your own pipeline through a signed webhook. Send to several at once.

02 · Configure

Configure Pricing & Packaging

Define metrics, plans, and per-unit rates in your billing platform. vBilling never decides what anything costs. Your platform team owns the price sheet.

03 · Connect

Connect vBilling Adapter

Deploy vBilling and point it at your backend. Tenant clusters are auto-discovered, and usage starts flowing from the next closed window.

Everything you need to bill tenants

vBilling meters shared and dedicated GPU capacity, commits it to a durable ledger, and delivers it to every billing backend you run, exactly once.

inventory_2

Durable, verifiable ledger

Each window is fsynced to a hash-chained ledger before delivery. Restarts and outages are backfilled: no usage lost, nothing billed twice.

hub

Stripe, Metronome, Lago, webhook

Fan out to several destinations at once. Each has its own cursor, so a billing API outage never blocks your data platform feed.

balance

Reconciliation

Recompute any day from the ledger and compare it with what Stripe or Metronome recorded, dead letters accounted for.

memory_alt

GPU SKU-aware

Detects H100, L40S, A100 and more from node labels. Stripe gets a meter per SKU; Metronome and Lago price on the sku dimension.

grid_view

Fractional GPUs

MIG slices and time-sliced GPUs are metered at their fraction, so shared GPUs can be sold by the slice.

health_and_safety

Fair metering

No charges for image pulls, provisioning, sleeping clusters, or GPU time on unhealthy nodes. Downtime is recorded as an audit trail.

admin_panel_settings

Dedicated nodes

Bill whole bare-metal nodes by SKU or instance type, without double-billing the pods that run on them.

dns

vCluster Private Nodes

GPU machines that join a tenant cluster directly are read through its own API, with a read-only kubeconfig vCluster exports, and billed whole. Auto Nodes and Standalone too.

monitoring

Bring your own Prometheus

DCGM GPU utilization from any Prometheus, Thanos or Mimir, MIG instances included, or from vCluster Platform fleet observability.

functions

Billable metrics in PromQL

Define your own metrics in PromQL, such as inference tokens or GPU energy in kWh, and bill them like built-in usage.

desktop_cloud

Capacity types

Every event carries on-demand, spot, preemptible or reserved, so your billing platform applies the discount and quantities stay physical.

block

Billing-state enforcement

Stripe dunning and Metronome spend alerts label, annotate, or soft-suspend tenant clusters through an admission policy.

input

Ingest API

Push inference tokens, Slurm accounting, or storage usage into the same durable pipeline as collector events.

public

Regions and sovereignty

One vBilling per control plane cluster: every event, ledger record and billing state stays in its region.

autorenew

Auto-discovery

Finds tenant clusters and vCluster Platform projects. Customers, meters and metrics are created in your backend automatically.

How the pieces fit together

vBilling runs as a controller in your Control Plane Cluster. It watches tenant clusters, collects capacity and usage metrics, and streams events to the billing adapter you choose.

Control Plane Cluster
─────────────────────────────────────────────
 
tenant cluster team-alpha · private · 4x A100
tenant cluster team-beta · private · 2x L40S
tenant cluster team-gpu · private · 8x H100
 
vBilling Controller
Go binary · StatefulSet with a durable ledger, one per control plane cluster
Choose → Configure → Connect
 
↓ Usage events (HTTP) ↓
 
Billing Adapter
Lago · Stripe · Metronome · Custom
Plans & pricing · Subscriptions · Invoices
 
─────────────────────────────────────────────

Up and running in 3 steps

Pick your billing adapter below. Each tab walks through deploy, install, and pricing for that platform.

What you'll need. vBilling works with open-source vCluster out of the box. Platform API discovery and other advanced capabilities require a vCluster Free account (free for small teams) or vCluster Enterprise.
1

Deploy Lago

Spin up the open-source billing engine with Docker Compose. UI at :8081, API at :3000 (vBilling's own dashboard uses :8080).

# Clone vBilling and start Lago
git clone https://github.com/vClusterLabs-Experiments/vbilling.git
cd vbilling/deploy/lago
openssl genrsa 2048 > lago_rsa.key
echo "LAGO_RSA_PRIVATE_KEY=$(base64 -i lago_rsa.key | tr -d '\n')" > .env
docker compose --env-file .env up -d
2

Install vBilling

Deploy the controller via Helm. Point it at your Lago instance; the API key stays in a Secret.

kubectl create namespace vbilling-system
kubectl -n vbilling-system create secret generic vbilling-lago --from-file=api-key=./lago-api-key
helm upgrade --install vbilling deploy/helm/vbilling --namespace vbilling-system \
  --set adapters='{lago}' \
  --set lago.apiURL=http://lago-api:3000 \
  --set lago.existingSecret=vbilling-lago
3

Configure pricing

vBilling creates a skeleton plan with $0 pricing. Set your rates in the Lago UI or API.

# In Lago UI → Plans → vCluster Standard
# Set prices per metric:
CPU Core-Hours          $0.065
Memory GB-Hours         $0.009
GPU Hours (H100)        $4.50
Storage GB-Hours        $0.0002
Network Egress GB       $0.09
Node Hours              $25.00
LoadBalancer Hours      $0.025

Default events, zero manual tagging

Collected automatically from the Kubernetes API, metrics-server, and Prometheus. Custom sources and transforms extend the defaults without forking vBilling.

Metric Source Granularity
Node hoursNode watchPer dedicated node
CPU core-hoursNode capacityFull node capacity
Memory GB-hoursNode capacityFull node capacity
GPU hours (by SKU) H100 / A100 / T4Node labelsPer GPU SKU
GPU utilizationDCGM via PrometheusPer GPU %
Storage GB-hoursPVC sizesPer PVC
Network egress GBCNI / PrometheusPer tenant
LoadBalancer hoursService countPer LB service
Control plane hourstenant cluster watch1 per cluster

Built for AI Clouds

If you run an AI cloud on Kubernetes, vBilling gives you the billing pipe, without forcing a billing backend on you.


AI Clouds give each customer a tenant cluster with dedicated GPU nodes. vBilling detects the hardware, meters node capacity by GPU SKU, and streams events into whichever billing adapter you run.

  • Shared, fractional (MIG, time-sliced) and dedicated GPUs, metered to the second
  • SKU, region and capacity-type dimensions priced in your billing platform
  • No charges for provisioning, image pulls, or unhealthy hardware
  • Durable ledger, backfill and reconciliation: metering held to financial-data standards
  • Stripe, Metronome, Lago or a webhook: keep your existing billing backend
Get started View on GitHub
AI Cloud billing flow
──────────────────────────────
Customer signs up
↓
Platform provisions tenant cluster + private nodes (8x H100)
↓
vBilling auto-discovers detects dedicated nodes
↓
Meters every 60s window, per hour: 8 GPU-hours (H100) 96 CPU core-hours 1 TiB memory-hours
↓
Stripe / Metronome / Lago rate and invoice
↓
Payment webhooks → billing state → Paid $