Stage 1 — Visual LearningVM-to-Kubernetes Migration Platform

Stage 1 — From VMware VM to Kubernetes-Managed VM

Look first. Turn on Learning Mode only if you want a short explanation under each picture.

1A – 1G: DONE (PASS) 1H: TARGET DESIGN (H1 – H10 PASS) 1I: I1 – I5 PASS, COMPLETED — 2026-10-01

This page explains Stages 1A to 1H. Its diagrams show the state after Stage 1H, when the Kubernetes target was still a design. Stage 1I later built that design on a temporary single-node kubeadm cluster on AWS EC2, migrated the VM to KubeVirt, validated it and destroyed the target. See the Stage 1I visual guide.

DONE / PROVEN (solid) DESIGN (dashed) FUTURE (dotted) RISK / FAILURE COMPONENT NOT TESTED
LEVEL 1

Understand the story

Stop after this level and you already know what Stage 1 accomplished.
01

The big picture

DONE 1A-1GDESIGN 1HFUTURE
Stage 1 big picture: VMware Workstation, ESXi, legacy-source-vm, VMDK, cold acquisition, conversion workbench, qemu-img and virt-v2v, KVM/QEMU, bootable VM, KubeVirt target (design), Kubernetes VM and modernization (future).

Stage 1 moved step by step from the VMware world into the KVM world, and stopped at the edge of the Kubernetes world. 1A to 1G happened in the lab: the disk was copied cold, converted and booted under KVM. 1H is a design on paper. Running it on Kubernetes and modernizing it come later. 1B is a side branch that taught the KVM building blocks.

03

Stage 1 map: eight steps, one story

DONE1H DESIGN
Click a stage for a 20-second summary
Eight cards 1A to 1H, each with WHY, WHAT, PROVED and NEXT.

Each card answers four questions. Every step removes one unknown the next step depends on. It starts with "is the host stable?" and ends with "what should the target look like?".

02

Three worlds: what changes, what stays

VMware + KVM: PROVENKUBERNETES: DESIGN
Three columns VMware, KVM/QEMU and Kubernetes, all ending in the same Ubuntu plus nginx guest.

The manager changes from ESXi, to KVM plus QEMU, to Kubernetes plus KubeVirt. The virtual hardware changes from VMware devices to VirtIO. The guest does not change: the same Ubuntu and nginx, still a VM.

LEVEL 2

Understand the components

What exists, and what a VM is made of.
04

Our actual lab

DOCUMENTED STATE (README)AWS: DESIGN ONLY AT 1H
Windows 11 runs VMware Workstation, which runs nested ESXi with legacy-source-vm, kvm-learning-01 and conversion-host-01; golden artifact on Windows; AWS target design only.

Everything runs on one laptop, three layers deep. There are three VMs with separate jobs: source (legacy-source-vm, running), learning (kvm-learning-01, off after 1H, later used as the Stage 1I jump host) and conversion (conversion-host-01, running). The golden disk copy lives on Windows, outside VMware. The AWS target did not exist at the end of Stage 1H; Stage 1I built it temporarily and then destroyed it.

05

What is a VM? More than a disk

COMPONENTSRISK: NETPLAN
Generic VM parts mapped to legacy-source-vm on VMware.

A VM has virtual CPU, memory, firmware, NIC, disk and a guest OS. Only the disk bytes are copied. Everything else is re-created on the target, so any guest setting tied to VMware hardware becomes a risk.

06

VMDK anatomy

OBSERVED 1D
The .vmx, .nvram and VMDK (descriptor plus flat extent with GPT, EFI partition and ext4 root) and what happens to each.

The .vmx is reference only and the .nvram is not carried. The VMDK is a small text descriptor plus a 40 GiB data file that holds the real guest disk: GPT, an EFI partition and ext4 root. That data file is locked while the VM runs.

13

KubeVirt mental model

CONCEPT / DESIGN AT 1H — DEPLOYED IN 1I
VirtualMachine to VMI to virt-launcher Pod to QEMU to KVM to guest, with CDI filling a PVC used as the VM disk.

CDI puts the disk into a PVC (import or upload, stored raw). KubeVirt runs the VM: VirtualMachine, then VMI, then a virt-launcher Pod with QEMU on KVM. The PVC is where one hands over to the other. CDI never runs the VM.

LEVEL 3

Understand what actually changed

The mechanics behind each lesson.
07

Why a cold copy?

OBSERVED 1D + 1E
Running VM locks its disk; cold copy sequence with three matching SHA256 hashes; 10.5 minutes downtime, 40 GiB, 148 MiB/s.

While the VM runs, its disk cannot even be read, and snapshots are not allowed. So: shut down, copy, and hash three times. Matching hashes prove the copy is exact and the source was not touched. The numbers are lab observations, not benchmarks.

08

Protect the golden artifact

OBSERVED 1E-1G
Golden VMDK shield, protected working copy, two conversion outputs, a disposable remediated copy and throwaway boot overlays.

The golden copy is never touched. One immutable working copy feeds both conversions, and each conversion writes to a new directory. Fixes go onto a separate disposable copy. Boot tests run on throwaway overlays, and disk bytes only ever flow one way.

09

qemu-img vs virt-v2v

MOST IMPORTANTOBSERVED 1G
Path A qemu-img changes only the container; Path B virt-v2v changes the guest; both boot on KVM, neither has network.

qemu-img only repackaged the disk: the guest bytes are identical. virt-v2v changed the guest: it removed VMware Tools, rebuilt the initramfs, added a first-boot job and wrote libvirt XML. Both booted under KVM. Neither fixed netplan, so neither had a network.

10

The hardware change

OBSERVED 1GRISK
PVSCSI/sda and VMXNET3/ens192 become virtio-blk/vda and virtio-net/enp0s3; UUIDs still work, netplan breaks.

The disk moves from sda to vda, but mounts use UUIDs, so it still works. The NIC moves from ens192 to enp0s3, but netplan still asks for ens192, so it breaks. The interface name under KubeVirt is not tested yet.

11

The network failure and the lab proof

FAILURELAB PROOFADR 010 DESIGN
Before, after conversion, and lab proof network chains; do not use .31; target design uses DHCP.

After conversion the guest is healthy but unreachable. On a disposable copy, matching the NIC by driver (virtio_net) fixed it. The lab test used a static test address, 10.0.2.15, on an isolated network, and got HTTP 200 with the same page hash. DHCP is the target design (ADR 010), not what the lab test used.

12

The UEFI story

OBSERVED 1GSECURE BOOT ON: NOT TESTED
VMware .nvram not carried; OVMF fresh variable store, fallback loader BOOTX64.EFI (shim), GRUB, Ubuntu.

Firmware settings live in the VM, not on the disk. With a fresh, empty variable store, OVMF found the disk's fallback loader (BOOTX64.EFI, which is shim), then GRUB, then Ubuntu. The VMware .nvram was not needed. Secure Boot was off throughout.

14

Target network

DESIGN (ADR 008)
Masquerade on the pod network, guest 10.0.2.2, NodePort 30080 path to nginx; 192.168.50.31 not preserved.

In KubeVirt the guest sits behind its Pod (masquerade) and gets 10.0.2.2 by DHCP. Clients reach it through a NodePort Service. The old address 192.168.50.31 does not follow it; the proof of success is the same page content.

15

Target storage

DESIGN (ADR 009) — NOTHING PROVISIONED AT 1H
VMDK to qcow2 in transit to CDI upload, DataVolume, PVC, 40 GiB Block volume, KubeVirt VM; raw at rest. Design only.

The design moves the prepared qcow2 (about 2.7 GiB) to the node, uploads it through CDI, and stores it raw on a 40 GiB gp3 Block PVC. At the end of Stage 1H only the golden VMDK and the 1G virt-v2v output existed; everything else was design. Stage 1I then carried out this path, and the PVC and its EBS volume were deleted in the Gate I5 teardown.

17

What changed?

PROVEN 1GDESIGN 1H
Nine before and after cards from VMware to KVM/KubeVirt, each marked proven or design, plus what stayed unchanged.

The hypervisor, VM process, devices and firmware changes were proven under QEMU/KVM in 1G. The manager, network, VM definition and storage changes were design only at the end of 1H, and were then carried out in Stage 1I. The guest's identity and content stayed the same.

18

Migration vs modernization

MIGRATION: STAGE 1 PATHMODERNIZATION: FUTURE
Migration keeps the VM with the same Ubuntu and nginx; modernization extracts nginx into a container, Deployment and Service.

Migration keeps the whole VM and changes only its manager. Modernization takes the application out of the VM and runs it as containers. Stage 1 worked only on the migration path; modernization is a later, separate step.

FINAL FLOW

The whole pipeline in 30 seconds

16

Final full pipeline

DONEDESIGNEDFUTURE
Done band from VMware to bootable VM, designed band with KubeVirt, CDI, PVC, virt-launcher, QEMU, KVM and VM, future band native application.

Green is what the lab proved. Yellow is what Stage 1H designed; nothing is built. Grey is future work. Stage 1I later built this target on AWS, migrated the VM and removed the target again (I1 – I5 PASS, completed 2026-10-01; see the Stage 1I visual).

REMEMBER

5 things to remember

1

A VM is more than its disk.

2

KVM is the kernel virtualization engine; QEMU creates the VM.

3

Changing VMware hardware to VirtIO can break guest configuration.

4

qemu-img changes the disk container; virt-v2v can change the guest.

5

KubeVirt puts the VM lifecycle under Kubernetes.

Source of truth (this page adds no facts; the records win):