virtscale
Virtscale / platform

The platform is the contract.
The contract is the cap.

Nine primitives, one region, one substrate version live at a time. Every workload runs inside a capacity envelope you commit to monthly. The orchestrator reads that envelope before it provisions anything, and refuses past it. The rest of this page is what sits behind that single rule.

substrate7.2 · 2026-01-30
regionnl-ams-1 · Amsterdam
clusterprod-eu-a · operational
primitives9 · all GA
uptime 60d99.978%
01 · The contract

Three numbers, signed before any vCPU spins.
The rest of the platform reads from these.

read by the policy gate
on every provisioning call
01 quota

Monthly committed capacity.

vCPU, RAM, block storage, object storage. Pay-as-committed, in EUR. Resize on 30 days' notice with a co-signed addendum.

100vCPU · 480GiB
example envelope · acme-tickets
02 cap

Signed overage allowance.

How far above quota the autoscaler may grow before it refuses. Three plain choices: +5%, +10%, +20%. Higher cap, higher reserved headroom on our side.

+10%
selected · signed 2025-11-02
03 refusal

What happens past the cap.

Provisioning calls return HTTP 429. The autoscaler does not grow the pool. The org owner receives an email within 30 seconds. The audit ledger gets a refusal line.

429 + mail
not negotiable at 03:14
02 · Primitives

Nine things we operate.
Versioned, documented, on-call.

all GA as of substrate 7.2
2026-01-30
01 · core

Capped autoscale

policy gate · OneFlow

The policy gate sits between Prometheus and OneFlow. It reads the contract on every provisioning call, projects post-scale usage against the envelope, and either calls oneflow.scale() or returns 429. p50 trip-to-settled across prod-eu-a is 52 seconds; p99 is 71. 2,184 events fired in the trailing 30 days; none escalated to us.

triggerCPU · queue depth · p99 latency
cooldown90 s default · per-pool override
refusal429 · ledger line · mail org owner
02 · compute

Cloud VMs

KVM · libvirt · OpenNebula 7.2

Templated KVM domains on warm hosts. Two sizing families: general (1:4 vCPU:GiB) and compute (1:2). Per-vCPU NUMA pinning available on opt-in. Boot disk on Ceph RBD, ephemeral local NVMe on the larger sizes.

sizesvs.s (1/4) → vs.4xl (64/256)
provisionp50 14 s · p99 38 s
snapshotRBD COW · per-pool retention
03 · orchestration

Managed Kubernetes

k8s 1.30 · Cilium 1.19 · CSI Ceph

Opinionated clusters. One CNI (Cilium with BGP), one ingress (HAProxy via gateway-api), one CSI (Ceph). Diverging from the defaults requires an ADR, not a ticket. Cluster autoscaler reads the same envelope as VM autoscale.

control planeHA · 3 etcd · separate hosts
node poolsper-zone · drain-and-replace upgrades
cnicilium 1.19 · eBPF · BGP
04 · storage

Object & block storage

Ceph Reef 18.2.4 · RGW · RBD

One Ceph cluster behind everything. S3-compatible object via RGW, block via RBD, filesystem via CephFS when asked. Three-replica across zones a/b/c, weekly scrub, monthly deep scrub. EC pools available on request.

replication3× across zones · min_size 2
object apiS3 v4 · STS · IAM-style policies
durability11 nines (modelled) · 0 incidents
05 · network

Networking & load balancing

Cilium BGP · HAProxy 2.8 LTS

VIPs are BGP-announced from Cilium directly to our ToR switches; HAProxy 2.8 LTS terminates ingress and reloads through the runtime API with zero dropped connections. Each org gets a VRF; multi-tenant routing is enforced in eBPF, not in DNS.

edge asAS208147 · two upstreams
vipsBGP · /32 per service
tlsACME · in-cluster issuer · 90d
06 · edge

DDoS protection

always-on · L3/L4

L3/L4 mitigation at the edge, included on every plan, not a separately billed add-on. ACL surface is small and documented; rate limits are per-VIP and tunable per org. L7 protection is on the roadmap (ETA Q4 2026).

capacity~600 Gbps scrubbing
syn floodcookie · per-VIP
visibilityper-org dashboard · /edge
07 · observability

Per-org Prometheus

ADR-0028 · owned by you

No managed observability tier behind a markup. We supply scrape configs for the substrate, a Prometheus per org, and the alertmanager templates we run for ourselves. Retention and routing are yours to decide.

scrapesubstrate · vm · k8s · ceph · haproxy
retentioncustomer-defined · default 30 d
grafanaoptional · per-org instance
08 · tenancy

Per-org VRF & keys

no shared fate

No shared control planes. Per-org VRF for network, per-org Ceph user with a private set of pools, per-org Prometheus, per-org Kubernetes if you opt in. The blast radius of a noisy neighbour is the noisy neighbour.

networkVRF · per org
storagecephx user · per-pool capability
secretsper-org KMS root · ed25519 signed
09 · api

One signed API surface

REST + gRPC · open spec

Everything the console does, the API does — including the contract endpoints. No private verbs, no internal-only endpoints. Every response carries a signed request-id you can quote back to us. SDKs in Go and Python, a Terraform provider, and a CLI (virtscale).

protocolsREST (JSON) · gRPC · webhooks
authOAuth2 device flow · API tokens
specOpenAPI 3.1 · published

Send us the shape of the workload.

vCPU, RAM, storage, the region you need, one paragraph on the failure modes you care about. We reply with a quota, a cap, and a substrate version. First reply is from the on-call engineer who would operate it.