KVTools · for VMware admins
An RVTools equivalent for KubeVirt.
I size most migrations from an RVTools export: one workbook, a tab per concern, a row per VM. Once the VMs run on Harvester or OpenShift Virtualization, there is no RVTools to run. KVTools builds the same kind of workbook from a KubeVirt cluster.
Run it
# macOS or Linux, with Homebrew $ brew install coulof/tap/kvtools $ kvtools
No Homebrew? Download the archive for your platform from the releases page.
That writes kvtools_<cluster>_<timestamp>.xlsx in the current directory. It needs read access to the cluster and nothing else.
Tab by tab
The names line up on purpose. The contents describe KubeVirt objects, so a datastore becomes a StorageClass and VMware Tools becomes the QEMU guest agent.
| RVTools | KVTools | What you get |
|---|---|---|
| vInfo | kvInfo | Power state, node, guest OS, firmware and boot, TPM, uptime |
| vCPU | kvCPU | Sockets, cores, threads, CPU model, dedicated placement, NUMA, requests and limits |
| vMemory | kvMemory | Guest RAM, requests, limits, launcher overhead, hugepages |
| vDisk | kvDisk | PVCs, DataVolumes, StorageClass, volume mode, bus, CSI driver |
| vPartition | kvPartition | Guest filesystems, capacity, free %, from the guest agent |
| vNetwork | kvNetwork | Interfaces, Multus networks, binding mode, MACs, IPs |
| vCD | kvCD | CD-ROMs, ISOs, container disks |
| vSnapshot | kvSnapshot | VM and volume snapshots, readiness, age |
| vTools | kvGuestAgent | QEMU guest agent status, version, hostname, kernel |
| vHost | kvNode | Physical cores, allocatable, allocated vCPU and RAM, overcommit ratio |
| vDatastore | kvStoragePool | StorageClasses, provisioners, reclaim policy, bound PVC totals |
| vHealth | kvHealth | 16 rules, below |
| — | kvHardware | PCI passthrough, GPU and vGPU, SR-IOV NICs |
The mapping is for people. Tools that parse RVTools exports will not read a KVTools workbook.
Using both during a migration
Run RVTools on the source before the cutover and KVTools on the target after. Put vInfo next to kvInfo and you have a VM-by-VM check that everything arrived, with the same CPU and memory shape.
Then run kvtools health. Migrated VMs often keep vSphere settings that KubeVirt handles differently:
- HLTH-001 live migration expected, but the disk is ReadWriteOnce
- HLTH-002
host-passthroughCPU model, which limits where the VM can move - HLTH-007 running VM with no guest agent, so no IPs or filesystems reported
- HLTH-015 the installer ISO is still attached
For several clusters, kvtools merge a.xlsx b.xlsx -o all.xlsx builds one workbook.
Questions
Which platforms?
Anything running KubeVirt: Harvester and SUSE Virtualization, OpenShift Virtualization, upstream. Optional CRDs like CDI, snapshots or Multus are skipped if they are missing.
Air-gapped clusters?
Yes. One static binary, no network calls beyond the Kubernetes API.
What about live performance?
That is KVTop, the esxtop side of the family.