Skip to content

VMware to SUSE Virtualization (Harvester) Migration Guide ​

How to migrate virtual machines from VMware vSphere to SUSE Virtualization (Harvester / KubeVirt) using Coriolis.


1. Strategy & Appliance Sizing ​

Live Replicas (Transfer) Before Deployment ​

Do not run a one-off cold migration on production disks. Copying multi-terabyte disks while the VM is powered down forces hours of avoidable downtime.

Use the two-stage approach instead:

  1. Transfer (live baseline & incremental syncs): Create a Coriolis Replica while the VM runs on VMware. Coriolis takes a snapshot, reads Changed Block Tracking (CBT) metadata, and copies baseline disks to Harvester persistent volumes (PVCs). Subsequent syncs can be executed periodically leading up to the maintenance window, copying only changed blocks.
  2. Deployment (OS morphing): Deploy the replica with Shutdown Source Instance enabled. Coriolis powers off the VMware VM, copies the final disk delta, injects VirtIO drivers and cloud-init, and boots the VM on Harvester.

Appliance Sizing & Placement ​

Deploy the Coriolis Appliance on Harvester or in a separate management cluster, not on the source VMware cluster you are decommissioning.

  • vCPU: 4 cores (8 cores for 4+ concurrent disk transfers)
  • Memory: 8 GB RAM (16 GB for high concurrency)
  • Disk: 40 GB NVMe or fast SSD
  • Network: 10 GbE interface with access to both management and migration VLANs

2. Download & License Activation via SCC ​

Step 1: Download the Appliance Image ​

Download the Coriolis virtual appliance directly from the SUSE Customer Center:
https://scc.suse.com/download_coriolis_software

The download portal provides the image directly in the correct format for your platform. Import the downloaded image into Harvester under Images to launch the appliance VM.

Step 2: Get the Appliance ID ​

  1. Boot the Coriolis VM.
  2. In the serial console:
    • Option 2 displays the initial admin password.
    • Option 4 configures a static IP if the network has no DHCP.
  3. Open https://<appliance-ip> in a browser and log in.
  4. Click the user icon (top right) ➔ About Coriolis.
  5. Copy the Appliance ID (UUID).

Step 3: Generate the Key in SCC ​

  1. Log in to SUSE Customer Center (SCC).
  2. Under your Coriolis subscription, click Generate License Key.
  3. Paste the Appliance ID.
  4. Copy the generated license key.
  5. In the Coriolis UI, open About Coriolis ➔ Add License ➔ paste the key and save.

3. Network Flux Matrix ​

Open these network paths before running migrations:

SourceDestinationProtocol & PortPurposeNotes
Coriolis ApplianceVMware vCenterTCP 443Inventory querying, snapshot managementRequires vSphere Read + Snapshot permissions.
Coriolis ApplianceAll ESXi HostsTCP 902Disk block transfer via NFC / OpenVixDiskLibCritical: vCenter returns ESXi hostnames as FQDNs. Coriolis must resolve every ESXi FQDN via DNS or /etc/hosts.
Coriolis ApplianceHarvester VIP / APITCP 443Kubernetes and KubeVirt API callsAuthenticated with the downloaded Harvester kubeconfig.
Coriolis ApplianceWorker VMs (Minions)TCP 22Worker orchestration and OS morphingTemporary workers boot on the Harvester migration network.
Coriolis ApplianceWorker VMs (Minions)TCP 5566Fast disk data streaming to destination PVCsRecommended protocol (data_transfer_mechanism = HTTPS).
Coriolis ApplianceWorker VMs (Minions)TCP 5986Windows worker orchestrationRequired only when using a Windows worker for Windows OSMorphing.
Appliance & WorkersDNS & NTPUDP 53 / UDP 123Hostname lookup and clock syncClock skew breaks TLS and API tokens.

ESXi Host FQDN Resolution

vCenter delegates NFC disk streams to whichever ESXi host runs the VM, returning the host's FQDN rather than its IP. If the Coriolis Appliance cannot resolve that FQDN, disk transfers will fail immediately on port 902. If internal DNS does not resolve ESXi hostnames, add them to /etc/hosts on the Coriolis Appliance.


4. DHCP & Migration Network Requirements ​

During disk copy and OS morphing, Coriolis spins up temporary worker VMs in Harvester. These workers attach target PVCs, format filesystems, install drivers, and receive data streams over TCP 22 (SSH) and TCP 5566 (HTTPS).

Having an active DHCP server on the migration network (migr_network) is strongly recommended so ephemeral workers automatically receive IP addresses upon booting.

Static IP Template Alternative

If DHCP is not possible on the migration network, a custom template image with a preconfigured static IP address must be created beforehand. Note that when using a static IP template, only one transfer task can run at a time per template (or multiple templates with unique IP addresses must be maintained).

Dedicated Migration VLAN ​

  • Create a dedicated VLAN in Harvester (via Network Attachment Definition).
  • Run a DHCP service on this VLAN with enough pool addresses for concurrent transfers (1 worker per active disk copy).
  • Ensure the Coriolis Appliance can reach this subnet on ports 22 and 5566.

Preserving Static IPs ​

Coriolis can carry over static IPs to Harvester:

  • VMware Tools must be running on the source VM so Coriolis can read the network config before cutover.
  • Check Preserve Static IPs in the deployment settings.

5. Prerequisites Checklist ​

VMware vSphere ​

  • [ ] CBT Enabled: ctkEnabled = true on all disks. Disks must be Dependent (Independent disks and RDMs do not support CBT incremental syncs).
  • [ ] Filesystem Free Space: Ensure enough free space on the VM /boot and / filesystems (at least 15–20% or 1–2 GB free). The morphing step mounts these partitions to install VirtIO drivers, rebuild initramfs/initrd, and set up qemu-guest-agent. If either partition is full, morphing fails.
  • [ ] VMware Tools: Running and reporting IP/OS details to vCenter.
  • [ ] No Old Snapshots: Delete orphaned snapshots before enabling CBT or taking the baseline replica.

Harvester Destination ​

  • [ ] Harvester Version: 1.7, 1.8, 1.9 (or SUSE Virtualization).
  • [ ] Target Namespace: Created (e.g. workload-migration).
  • [ ] Storage Class: harvester-longhorn (or other if non-default) active with sufficient free capacity.
  • [ ] KubeConfig Exported: Downloaded from the Harvester UI (Support ➔ Download KubeConfig).
  • [ ] Worker Images Uploaded: See the Temporary worker image documentation for image setup details.
    • Linux: Cloud image (e.g. openSUSE-Leap-15.6.x86_64-NoCloud.qcow2) labeled harvesterhci.io/os-type: linux.
    • Windows: Windows Server image with VirtIO/VMDP drivers and Cloudbase-Init (see the Harvester Windows VM creation guide), labeled harvesterhci.io/os-type: windows.
    • UEFI VMs: If migrating UEFI guests, ensure the worker image has the annotation vm.boot/firmware: uefi.

6. Execution Steps ​

Step 1: Register Cloud Endpoints in Coriolis ​

  1. Go to Endpoints ➔ New Endpoint.
  2. VMware Source Endpoint: Select provider vmware_vsphere, enter vCenter host, port 443, and credentials.
  3. SUSE Virtualization Destination Endpoint: Select provider suse_virtualization, paste the Harvester kubeconfig YAML.

Step 2: Create the Minion Pool ​

To eliminate the overhead of provisioning temporary worker VMs on demand during transfers, configure a Minion Pool on the SUSE Virtualization destination:

  1. Go to Minion Pools ➔ New Minion Pool.
  2. Select the SUSE Virtualization endpoint and designate your migration network VLAN and worker image.
  3. For sizing guidelines and pool management, refer to the Coriolis Minion Pools Operations and Usage Guide.

Step 3: Transfer (Baseline & Incremental Syncs) ​

  1. Go to Replicas ➔ New Replica.
  2. Choose the VMware source endpoint and SUSE Virtualization destination endpoint.
  3. Select the VMs from the vCenter inventory.
  4. Set destination parameters:
    • Namespace: Target namespace (e.g. workload-migration)
    • Storage Class: harvester-longhorn (or other if non-default)
    • Migration Network: The DHCP-enabled migration VLAN
    • Network Mapping: Map VMware Port Groups to Harvester VM Networks
  5. Open Advanced migration settings to select the specific migration worker image (see Specify advanced migration settings).
  6. Click Create and Execute. The initial baseline transfer copies disk data while the VM runs uninterrupted.
  7. Leading up to the cutover window, trigger periodic incremental syncs by selecting the Replica and clicking Actions ➔ Execute Replica.

Step 4: Deployment (OS Morphing) ​

During the maintenance window:

  1. Select the Replica and click Deploy Replica.
  2. Check Shutdown Source Instance to shut down the VMware VM before pulling final deltas.
  3. Check Preserve Static IPs if keeping current addresses.
  4. Select the worker image.
  5. Click Deploy.

Coriolis shuts down the source VM, runs the final CBT delta sync, clones replica volumes to production PVCs, boots the temporary morphing worker to inject VirtIO drivers, and starts the permanent VM on Harvester.


7. Verification ​

After deployment completes:

  1. Harvester Console: Open the VM in Harvester and click Console. Confirm the OS boots without kernel panics or missing root disk errors.
  2. Drivers & Agent:
    • Linux: Run systemctl status qemu-guest-agent. Disks should show as /dev/vda or /dev/sda using VirtIO.
    • Windows: Check Device Manager for missing drivers under Storage controllers or Network adapters.
  3. Networking: Verify the VM has its assigned IP and can reach the default gateway and DNS.

Quick Reference ​

ItemValue
Download Portalhttps://scc.suse.com/download_coriolis_software
Harvester Versions1.7, 1.8, 1.9 (or SUSE Virtualization)
Appliance Sizing4 vCPU, 8 GB RAM, 40 GB NVMe, 10 GbE
Transfer PatternLive incremental replicas (Transfer) + final Deployment (OS Morphing)
Data PortTCP 5566 (HTTPS to worker) or TCP 22 (SSH fallback)
VMware PortTCP 902 (NFC to all ESXi FQDNs)
Windows Worker PortTCP 5986 (WinRM)
Worker SubnetDedicated VLAN with active DHCP (strongly recommended)
Source Pre-reqsCBT enabled (ctkEnabled=true), VMware Tools running, 15%+ free on /boot and /