I created VirtFoundry: a Kubernetes operator on a path to CNCF Sandbox

I created VirtFoundry . It is a Kubernetes operatorvirtfoundry.io CRDs — that turns a cluster you already run into a multi-tenant private cloud: tenants, VPCs, VMs, volumes, snapshots, IAM, REST API, and a UI.

The hypervisor is KubeVirt . Source of truth is not MySQL: it is Kubernetes. The destination is a CNCF Sandbox application.

It is not a CNCF project yet. We are building the operator, charts, Terraform provider, and community so we can apply when the repo meets the maturity bar — not before.

VirtFoundry VM list

The problem I wanted to solve

If you already operate Kubernetes and still need VMs, the realistic options are:

  1. A second silo — Proxmox (or similar) beside the cluster. Two backups, two networks, two sources of truth.
  2. Raw KubeVirt YAML — an excellent hypervisor API and a terrible private-cloud product. Every tenant becomes a pile of VirtualMachine, NAD, PVC, and RBAC by hand.
  3. Full OpenStack / HCI — it works, and you now operate another cloud next to Kubernetes.

I already wrote about the CloudStack homelab path. VirtFoundry is the other path: Kubernetes-native. If you already want the cluster, you should not need a second appliance just to treat VMs as cloud resources.

KubeVirt runs the VM. It does not give you day-2 private cloud:

Architecture: operator first

The control plane is an operator. The API group is virtfoundry.io. Production store is Kubernetes only (store.driver=kubernetes) — no MySQL on the critical path.

LayerWhat it is
OperatorControllers + CRDs (Tenant, Instance, VPC, Disk, snapshots, IAM, …)
coreREST /api/v1 + React UI — clients of the same store
HelmTwo charts: virtfoundry-operator and virtfoundry (API + UI)
TerraformFirst-party provider on the Registry
RuntimeKubeVirt (VM), Multus (tenant net), CSI (disks; Longhorn in the homelab)

VirtFoundry dashboard in the homelab

The design is compose CNCF building blocks, not reinvent the hypervisor or CSI. The operator reconciles Tenant (namespace + status) and Instance (phase, IP, KubeVirt name). Other kinds already exist as CRDs; controllers close the gap over time. GitOps comes free: Helm + Argo CD, CRs as source of truth.

Recommended topology: BYO cluster, Longhorn, Gateway, tenant VPC

What you can use today

Current chart release: 0.7.0. In the homelab that already covers the demo a TOC reviewer will click: VM + volume + snapshot + UI.

VM snapshots in VirtFoundry

Per-tenant networks and VPCs

CapabilityStatus
Tenant + IAM (JWT, API keys, roles)Works
VM (deploy, start/stop, console)Works — KubeVirt
Volume + VM snapshotWorks; volume snapshots need CSI snapshot support (Longhorn, not local-path)
VPC / isolated net / public IPWorks with Multus; without Multus the UI comes up and tenant networking does not
L4 load balancer (VIP + listener)Evolving on the roadmap
SSO / billingKept out of core on purpose

Homelabs count. The three maintainers are already in ADOPTERS.md . Sandbox still needs adopters outside MAINTAINERS.md.

Honest comparison

Proxmox VE“Just KubeVirt”HarvesterVirtFoundry
ModelHypervisor applianceVM YAMLFull HCIIaaS control plane on your cluster
Multi-tenantDatacenter ACLsYou build itApplianceFirst-class tenant + IAM
GitOpsNot the productPossibleISO / HCIHelm / Argo, CRDs
Best whenISO, ZFS, PBS, no K8sA few VMs, YAML is fineYou want HCIYou already run Kubernetes and want cloud UX

Proxmox still wins if you want an ISO, PBS, ZFS datasets, or LXC as product features. Stay there. VirtFoundry is not a drop-in for those.

Harvester is HCI. VirtFoundry assumes BYO Kubernetes (kubeadm, kubespray, managed).

CloudStack remains classic IaaS — I still run it in the homelab. VirtFoundry is the cousin that lives on the same cluster as container workloads.

CNCF Sandbox: destination, not status

CNCF Sandbox has a hard checklist: full Apache-2.0, governance, CoC, security, repo age ≥ 6 months, maintainers in ≥2 organizations, and evidence the project is reusable — not a reference architecture.

Already in place:

Still open:

Do not write “CNCF project”, “we are on the landscape”, or “we already applied”. The destination is Sandbox. Status today is Apache 2.0 open source, following foundation conventions.

CRD store: kubectl get crd | grep virtfoundry.io

Try it

Docs: virtfoundry.github.io/helm-charts . Quickstart under 30 minutes. Pin the version — do not use :latest.

BASH
helm repo add virtfoundry https://virtfoundry.github.io/helm-charts
helm repo update

helm install virtfoundry-operator virtfoundry/virtfoundry-operator \
  --version 0.7.0 \
  -n virtfoundry-system --create-namespace

helm install virtfoundry virtfoundry/virtfoundry \
  --version 0.7.0 \
  -n virtfoundry-system \
  --set secrets.rootPassword='change-me' \
  --set secrets.jwtSecret='change-me'
Click to expand and see more

Order: cluster platform (KubeVirt + Multus + CSI) → operatorAPI/UI. Without Multus, VPC and public IP do not work. Without CSI snapshots, volume snapshots do not work — use VM snapshots in the lab.

Repos:

If you install in a homelab: file an issue, pick a good first issue, or open a PR on ADOPTERS.md. That weighs more than a like when the Sandbox application exists.

Canonical comparison: Why VirtFoundry . Traction checklist: CNCF-CHECKLIST.md .

Comments

Start searching

Type keywords to search

↑↓
ESC
⌘K Shortcut