Skip to content
NewFinOps, Kubernetes and AI, on one platform
Book a demo
UnitVane docs
API referenceReleases

Architecture

What runs in your clusters, what runs in the hub, and how data moves between them.

Who does what

From infrastructure to an approved change

  1. 01

    Collect

    The read-only agent sends cluster snapshots. Billing exports or rate cards provide the cost basis.

    Agent + billing

  2. 02

    Allocate

    The hub assigns cost to workloads and teams, separates shared and idle spend, and reconciles the totals.

    KubeOn hub

  3. 03

    Review

    A proposal brings together the saving, evidence, risk and patch. An authorized reviewer records a decision.

    Your reviewers

  4. 04

    Apply + verify

    Merge the pull request, or let KubeOn apply the change where you granted write access. The saving is then measured.

    Your pipeline or KubeOn

Read-only by default. KubeOn changes a cluster only where you grant write access, feature by feature.

Read the workflow
On this page

Components

ComponentWhere it runsWhat it does
AgentEach cluster, as a CronJobLists the Kubernetes API read-only, reads usage from metrics-server and optionally Prometheus, sends one snapshot per hour to KubeOn
Snapshot storageKubeOn, a bucket per organizationHolds the gzipped NDJSON snapshots the agent sends. The agent cannot send them anywhere else
APIHubServes the app and the REST API, enforces roles and team scope
WorkerHubIngests snapshots and billing, allocates, reconciles, computes savings and proposals
SchedulerHub, single replicaRuns the job chain on time; a single replica so no job fires twice
DatabasePostgreSQL 16Allocations, ownership, budgets, proposals and the audit log
Cache and brokerRedis 7 with TLSJob queue and precomputed views

Data flow

  1. On the hour, the agent lists nodes, namespaces, workloads, pods, PersistentVolumes, PVCs and services, 500 objects per page.
  2. It reads current pod usage from metrics.k8s.io and, if prometheus.url is set, the last full hour of CPU, memory and volume usage.
  3. It sends one gzipped snapshot on an upload link KubeOn issues for your organization. The first line records the schema version, row counts per kind, collection errors, agent version and peak memory.
  4. KubeOn ingests the snapshot as soon as the upload completes. A snapshot whose rows do not match its header is rejected, and the job reports the failure.
  5. Daily (06:00 UTC by default) the hub reads billing. The last 3 days are re-read because providers restate recent line items.
  6. The hub allocates each cluster-day that has both usage and billing, reconciles it to the bill, and repairs any day in the last 7 once late data arrives. Older days, up to 92 back, are re-run from Data health.
  7. Savings are recomputed every 30 minutes; change proposals are regenerated daily.
  8. Budgets, alert rules and anomalies are evaluated hourly at :50.

Network paths

Every connection starts inside your environment and goes out. The hub never opens a connection to a cluster's API server, and the agent exposes nothing.

FromToPortPurpose
AgentKubernetes API (in cluster)443Read-only list and watch
AgentPrometheus (in cluster, optional)9090Usage history
Agentapp.kubeon.io, and KubeOn's storage unless kubeon.directUpload is false443Send the snapshot
HubBilling APIs (Athena, Blob Storage, BigQuery)443Read billing
HubSlack, Teams, SMTP, webhooks443 / 587Notifications you configure

Identity

The agent authenticates to KubeOn with its cluster's token. The token can only send that cluster's data into your organization, and you revoke it in Settings > Integrations. The agent needs no cloud identity: no IAM role, workload identity or storage credentials in your accounts. It cannot read, list or delete snapshots.

Need help with this guide?Contact support