Overview¶
What banlieue does, in one sentence: it gives you a single Kubernetes-native API for describing virtual machines, then dispatches each VM to whichever hypervisor backend you've plugged in — vSphere today, libvirt and (eventually) Proxmox, or one you write yourself — without your manifest ever changing shape.
This page is the fundamentals: what banlieue is, what it does, and how the pieces fit together at a single glance. For the reasoning behind these choices, see Why banlieue?. For the wiring, see Architecture.
The fundamental idea¶
There are three actors:
| Actor | What they do |
|---|---|
| User | Writes one VirtualMachine YAML. Runs kubectl apply. That's it. |
| banlieue controller | Watches VirtualMachines, resolves their refs, creates a backend-specific infrastructure CR, and mirrors status back. |
| Provider controller | Watches its infrastructure CR and talks to a real hypervisor (vSphere / Proxmox / libvirt / …). |
Everything happens through the Kubernetes API. There is no second protocol, no RPC, no message bus. CRDs are the messages. The K8s API server is the bus.
High-level diagram¶
Three rules to remember when reading the diagram:
- Solid arrows are reads/writes against the K8s API. That's the only form of communication between any two controllers.
- Dashed arrows are watches or references — they exist in the data, not on a network wire.
- The user only ever interacts with the top-left box. Everything else is plumbing they shouldn't have to see.
Current state vs. the diagram:
VSphereMachineis the only infrastructure CR that exists and is reconciled today.ProxmoxMachineandLibvirtMachine(and their provider controllers) are the design target —banlieue-provider-libvirttoday only registers hosts and imports images (no VM lifecycle yet), and there is no Proxmox provider at all. See Project status.
A 10-second walkthrough¶
-
The user writes:
-
The banlieue controller sees it, looks up
db-prod-largeandubuntu-22-04, matchesplacement.providerSelectoragainst the availableProviderCRs to pick one, and creates aVSphereMachinecarrying the resolved spec. -
The vSphere provider controller sees the new
VSphereMachine, talks to vCenter, provisions the VM, and writes status (Ready=true, addresses, provider ID) back onto theVSphereMachine. -
The banlieue controller sees that status and mirrors it onto
VirtualMachine.statusso the user cankubectl get vm db-prod-01and seeREADY=true.
If the user later changes placement.providerSelector to match a different
Provider, the same sequence happens — but now that Provider's backend
controller picks up the work, on the same Kubernetes API, with the same
status contract. (Today this is only exercisable across two vSphere
Providers; a cross-backend swap needs a working infrastructure CR/reconciler
on both sides — see Project status.)
What "fundamentally" buys you¶
Because everything below the user's CR is uniform and pluggable:
- Swap a backend by changing one field (
placement.providerSelector). - Mix backends in one cluster — prod on vSphere, dev on libvirt, edge on
Proxmox (once its provider ships) — addressed by the same
kind: VirtualMachine. - Add a new backend by writing a provider once; every existing
VirtualMachinebecomes deployable there with no manifest change. - Audit, RBAC, GitOps, OPA, dashboards, etc. all work the same way they work for any Kubernetes resource — no special tooling.
These properties are not features bolted onto banlieue. They are consequences of two design choices: the abstraction principle and the CRD-only contract. If you only have time to read two pages of Why banlieue?, read those.
What banlieue is not¶
- Not a hypervisor — it does not run VMs, it drives existing hypervisors.
- Not Kubevirt — VMs do not run as pods on K8s nodes.
- Not CAPI — banlieue's
VirtualMachineis not aclusterv1.Machine; the two coexist and even share providers, but banlieue's user-facing API is independent. - Not generic — it is opinionated about one contract (VMs), not a framework for modelling arbitrary resources.
See Comparisons and Non-goals for the full version.
Where to go from here¶
- Why banlieue? — the long-form argument.
- Architecture — the wiring, watches, and reconcile flow in depth.
- Provider Model — what a provider looks like and how to write one.
- Guides — install the controller and the vSphere provider on a real cluster.