Choosing Live Migration vs Cold Migration in Harvester: A Decision Guide
Decide between Harvester live migration and cold migration by reviewing storage, CPU, network constraints, trade‑offs, and a step‑by‑step validation guide.
20 Jun 2026, 11:00 UTC

Problem Statement
In a production environment running virtual machines (VMs) on Harvester, you often need to move workloads between nodes. The key decision is whether to use live migration (zero‑downtime) or cold migration (power‑off/on). Each approach has infrastructure requirements and operational trade‑offs that must be weighed against your service availability goals.
Decision Factors
When selecting a migration strategy, consider the following constraints:
- Storage Support: Live migration requires a shared storage backend that exposes
ReadWriteMany(RWM) access, such as NFS or Ceph RBD. - CPU Compatibility: Source and destination nodes must expose the same CPU feature set or use a common baseline via KubeVirt’s CPU passthrough.
- Network Capacity: Migrating memory and live state demands high, low‑latency network throughput; typically >1 Gbps per VM.
- Downtime Tolerance: Cold migration pauses the VM for the duration of the power cycle, which may be unacceptable for critical workloads.
- Operational Complexity: Live migration requires additional monitoring and fallback logic, whereas cold migration is straightforward.
Supported Migration Options in Harvester
| Option | Prerequisites | Typical Use‑Case |
|---|---|---|
| Live Migration (KubeVirt) | Shared RWM storage, matching CPU features, 1 Gbps+ network, Harvester v1.1.0+ | Zero‑downtime workload mobility, rolling upgrades, maintenance windows |
| Cold Migration (Power‑off/on) | Any storage type, no CPU sync needed, minimal network | Non‑critical VMs, infrastructure changes that require reboot, disaster recovery |
| Snapshot‑Based Migration (VM snapshot + copy) | Storage that supports snapshots, optional RWM | Quick copy for backup or cloning, not true migration |
Trade‑Off Analysis
- Downtime: Live migration does not stop the VM; cold migration does pause it until the new node boots.
- Network Load: Live migration can saturate the network; cold migration only uses bandwidth for the disk copy.
- CPU Feature Mismatch: Live migration fails if CPU feature sets differ; cold migration is immune.
- Complexity & Monitoring: Live migration requires monitoring of migration progress and fallback logic; cold migration is a single command.
- Storage Overhead: Live migration needs RWM storage; cold migration works with any storage type.
Concrete Implementation & Validation
1. Verify Prerequisites
- Check Harvester version:
kubectl version --short | grep Server→ should be v1.1.0 or newer. - Confirm StorageClass supports RWM:
kubectl get storageclass sc-name -o yaml | grep accessModes→ should listReadWriteMany. - Ensure nodes share CPU features: run
kubectl get node -o jsonpath='{.items[*].status.nodeInfo.architecture}'andkubectl get node -o jsonpath='{.items[*].status.nodeInfo.kernelVersion}'to compare. - Verify network bandwidth: use a simple throughput test (e.g.,
iperf3 -son destination,iperf3 -c dest-ipfrom source).
2. Perform a Test Live Migration via UI
Navigate to VMs → select a running VM → click Migrate. Choose the target node and confirm. Observe the progress bar. During migration, open a terminal on the VM (e.g., ssh user@vm-ip) and run ping -c 10 gateway-ip to confirm network connectivity remains intact.
3. Perform a CLI Live Migration
# Run from a pod with the Harvester CLI installed
kubectl exec -it -n harvester cli-pod -- \
virtctl migrate vm-name \
--dest-node dest-node-name \
--dry-run=false
Check logs for migration finished status:
kubectl logs -n harvester cli-pod | grep "migration finished"
4. Fallback to Cold Migration
If live migration fails due to CPU or storage mismatch, Harvester will fall back to cold migration automatically. To force cold migration, use:
kubectl exec -it -n harvester cli-pod -- \
virtctl migrate vm-name \
--dest-node dest-node-name \
--live=false
5. Validate Post‑Migration State
- Confirm the VM is running on the destination node:
kubectl get vm vm-name -o jsonpath='{.status.nodeName}'. - Verify uptime:
ssh user@vm-ip uptimeshould show continuous uptime without restart. - Check disk integrity:
df -hshould report the same storage capacity as before.
Limitations & Practical Checks
- Live migration is not supported on Harvester < 1.1.0. Verify before proceeding.
- RWM storage may introduce performance overhead; monitor I/O during migration with
iostaton the VM. - Network interruptions can pause migration; ensure at least two NICs with link aggregation if possible.
- CPU feature mismatches are silent failures; always confirm node compatibility beforehand.
Conclusion
Use live migration when zero downtime is essential and your infrastructure meets the shared storage, CPU, and network requirements. For environments with limited resources or when downtime is acceptable, cold migration remains a reliable fallback. By following the validation steps above, you can confidently choose the right migration strategy for your Harvester cluster.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.