Quickstart (under 30 minutes)¶
Goal: UI login + first VM. On a laptop, start with Kind (Docker, no VLAN). On a cluster that already has Kubernetes, KubeVirt, Multus, and CDI, continue below.
If you still need to install those platform components, budget extra time and follow the full Installation guide (or run ./scripts/setup/{kubevirt,multus,cdi}.sh from a helm-charts clone).
Homelab with Argo / Longhorn
Production-shaped layouts (Gateway API, Longhorn, snapshots): Deployment topologies. Public IPs without a VLAN: Kind or Topologies — public underlay.
0. Check prerequisites (~2 min)¶
kubectl get crd virtualmachines.kubevirt.io
kubectl get ds -A | grep -i multus || kubectl get pods -A | grep -i multus
kubectl get crd datavolumes.cdi.kubevirt.io
kubectl get storageclass
You need at least one default or known StorageClass. Prefer Longhorn (or any CSI with snapshots) for real disks.
local-path labs
Fine for a first UI click. Volume snapshots will not work without CSI external-snapshotter + a VolumeSnapshotClass. Use VM snapshots on lab StorageClasses, or install Longhorn (etc.) for volume snapshots.
1. Install VirtFoundry (~5 min)¶
helm repo add virtfoundry https://virtfoundry.github.io/helm-charts
helm repo update
helm install virtfoundry virtfoundry/virtfoundry \
--version 0.5.0 \
--namespace virtfoundry-system \
--create-namespace \
--set secrets.rootPassword='change-me' \
--set secrets.jwtSecret='change-me-long-random'
Wait until pods are ready:
kubectl -n virtfoundry-system get pods -w
Optional — set the CSI snapshot class used by the Volume Snapshots UI (Longhorn example):
helm upgrade virtfoundry virtfoundry/virtfoundry -n virtfoundry-system \
--reuse-values \
--set platform.storage.snapshotClass=longhorn
Empty snapshotClass uses the cluster default VolumeSnapshotClass when one is marked default.
2. Expose the UI (~5–10 min)¶
Pick one path.
A. Port-forward (fastest)¶
kubectl -n virtfoundry-system port-forward svc/virtfoundry-ui 8080:80
Open http://127.0.0.1:8080
B. Ingress / Gateway API¶
Use your cluster’s IngressClass or Gateway + HTTPRoute. Example values and Gateway notes: Configuration, Topologies.
3. First login (~1 min)¶
- User:
root - Password: the
secrets.rootPasswordyou set (change-meabove)
4. Deploy a first VM (~10 min)¶
In the UI (or API):
- Open Templates — use a container disk template (no ISO download).
- Open Service offerings — pick a small offering (or create one).
- Create a VM from that template + offering.
- Wait until the VM is Running, then open Console (noVNC).
Networking
Full tenant VPC / Multus bridge demos need host bridges and often a public pool — Kind for a laptop, Topologies on real nodes. Container-disk VMs can still prove the control plane without a full L2 lab.
5. Sanity checks¶
kubectl -n virtfoundry-system get deploy,sts
kubectl get vm -A
API health (with port-forward or your hostname):
curl -sS http://127.0.0.1:8080/api/v1/healthz || true
Next¶
| Topic | Doc |
|---|---|
| What you can do after login | Features overview |
| Full install + why each dependency | Installation |
| Min vs production layouts | Topologies |
| Laptop (kind, no VLAN) | Kind |
| Helm values (public net, snapshots) | Configuration |
| Why VirtFoundry vs Proxmox | Why VirtFoundry |
| Traction / CNCF checklist | CNCF checklist |
Questions: GitHub Discussions.