This document provides a deep dive into Everpure's integration with Red Hat Migration Toolkit for Virtualization.
Everpure and Red Hat have collaborated extensively to optimize the migration process from VMware environments to OpenShift using the Migration Toolkit for Virtualization (MTV). MTV leverages the forklift project to accelerate migrations from virtualization platforms to KubeVirt. This whitepaper describes the strategic rationale, decision framework, technical architecture, step-by-step migration workflow, and Day 2 operations for organizations managing this transition.
For further reading and reference refer to the following documentation.
This document provides a technical deep dive into the migration process, focusing on:
- End-to-end migration architecture
- Execution workflows using MTV
- Performance optimization using FlashArray offload capabilities
- Measured migration outcomes from lab validation
The goal is to enable predictable, scalable, and efficient migration while preserving existing storage investments on FlashArray.
Migration Objective and Scope
The objective of this migration is to transition virtual machine workloads from VMware vSphere to Red Hat OpenShift Virtualization while preserving the existing Everpure FlashArray storage investment and maintaining data availability throughout the transition.
- Migration of VM workloads from ESXi to KubeVirt on worker nodes
- iSCSI, NVMe/TCP, and Fibre Channel transport validation
- Forklift (MTV) with Everpure XCopy Offload
- VMware and OpenShift coexistence
- Day 2 operations (monitoring, DR, backup, scaling)
Role of Everpure in Accelerating Migration
- VMware and OpenShift share the same FlashArray
- Enables hardware-assisted data movement using XCopy offload (VMFS)
-
Enables full offload of the migration to the array with volume copy (vVols and RDMs)
- Eliminates dependency on host-based data transfer (VDDK bottlenecks)
- Reduces CPU, memory, and network utilization during migration
- Provides consistent storage performance across source and target environments
- Portworx creates volumes via FlashArray API
- Portworx maps them to OpenShift nodes
- Portworx presents storage via multipath
Key Outcomes and Performance Highlights
- Significant reduction in migration time using FlashArray offload
- Improved scalability for VM migrations
- Consistent performance across different VM sizes and storage types
- Reduced infrastructure overhead during migration execution
Migration Architecture Overview
This section describes the complete technical architecture of the migration — the source VMware environment, the target OpenShift Virtualization platform, the FlashArray storage integration, the migration tooling, and the end-to-end data flow.
Source Environment: VMware vSphere
The source environment is a standard VMware vSphere deployment in which ESXi hosts run virtual machine workloads under vCenter management. Storage is provided by Everpure FlashArray, accessed by ESXi hosts via iSCSI or Fibre Channel. Datastores are configured as VMFS or vVols, both backed directly by FlashArray volumes. Currently the xcopy and vol copy offload is a SCSI and Block only integration.
vCenter as the Migration Source
MTV connects to vCenter as the source provider. It uses the vCenter inventory API to discover VMs, their disk configurations, network port group assignments, and datastore mappings. When XCopy Offload is configured, Forklift also retrieves the FlashArray volume identifiers corresponding to the VMware datastores, enabling it to issue the correct XCOPY commands to FlashArray.
Target Platform: OpenShift Virtualization
OpenShift Virtualization extends Red Hat OpenShift with KubeVirt to enable virtual machines to run as Kubernetes-native workloads. VMs are defined as Kubernetes Custom Resources (VirtualMachine objects) and scheduled alongside containerised pods on RHCOS worker nodes.
KubeVirt and the virt-launcher Architecture
Each running VM in OpenShift Virtualization is backed by a virt-launcher pod on the worker node. This pod runs a QEMU/KVM process that provides hardware-accelerated virtualisation. From the Kubernetes scheduler's perspective, a VM is a pod with specific resource requests — it is scheduled, monitored, evicted, and rescheduled using the same mechanisms as any other Kubernetes workload.
RHCOS Worker Nodes and MachineConfig
All OpenShift worker nodes run RHCOS (Red Hat CoreOS), an immutable operating system managed by the Machine Config Operator (MCO). Direct OS modifications are not persistent — all configuration must be applied via MachineConfig objects, which the MCO applies via a controlled rolling reboot process.
This is the key difference from VMware ESXi host configuration. In VMware, a storage administrator configures iSCSI initiators or FC HBAs directly on each host. In OpenShift, the equivalent configuration is declared in a MachineConfig manifest and applied automatically to all worker nodes in the pool.
| VMware Concept | OpenShift Equivalent | Configuration Mechanism |
|---|---|---|
| ESXi iSCSI software initiator | iscsid.service on RHCOS | MachineConfig — 99-worker-iscsi-pure |
| ESXi NVMe/TCP VMkernel port | nvme-tcp kernel module on RHCOS | MachineConfig — 99-worker-nvme-tcp-pure |
| FC HBA driver on ESXi | FC HBA driver auto-loaded by RHCOS kernel | MachineConfig — multipath.conf + udev rules |
| VMkernel multipath | dm-multipath on RHCOS | MachineConfig — multipathd.service enabled |
Storage Architecture: FlashArray Integration
FlashArray serves as the unified storage backend for both environments simultaneously throughout the migration. Storage integration operates at two levels: the management plane (Portworx communicates with the FlashArray REST API for volume lifecycle operations) and the data plane (worker nodes connect via iSCSI, NVMe/TCP, or FC for block I/O).
Management Plane: Portworx with FlashArray REST API
- Portworx connects to FlashArray using an API token stored in the px-pure-secret Kubernetes Secret.
- When a PVC is created, Portworx calls the FlashArray REST API to provision a new volume of the requested size.
- Portworx automatically creates a host object on FlashArray for each worker node, using the node's IQN, NQN, or WWPN as the identity, and adds the host to the managed host group.
- When a PVC is deleted, Portworx disconnects and deprovisions the FlashArray volume via the REST API.
Data Plane: Worker Node with FlashArray SAN Transport
- The data plane connection depends on the chosen SAN transport. All three transports result in the same logical device at the Portworx layer — a dm-multipath block device — but differ in how the connection is established and verified.
Migration Tooling: Migration Toolkit for Virtualization (MTV / Forklift)
Forklift orchestrates VM migrations through a set of Kubernetes Custom Resources (CRs). Each migration is defined declaratively — the engineer creates YAML manifests describing the source, the target, and the mapping between them, then applies them to the cluster. Forklift's controller reads these CRs and executes the migration.
| Component | Function/Description |
|---|---|
| Provider | Defines the vCenter source connection (URL + credentials) |
| NetworkMap | Maps VMware port groups to OpenShift networks |
| StorageMap | Maps VMware datastores to OpenShift StorageClasses (+ XCopy config) |
| Plan | Selects VMs to migrate and references NetworkMap + StorageMap |
| Migration | Triggers execution of a Plan |
XCopy Offload vs. VDDK: Architecture Difference
| Characteristic | Standard VDDK path | XCopy Offload path |
|---|---|---|
| Data movement | ESXi → network → OpenShift worker node | FlashArray internal clone (SCSI XCOPY command) |
| Network traffic | Full disk content (e.g., 300 GB for a 500 GB VM) | Metadata only — under 1 MB regardless of disk size |
| Worker CPU usage | High — read, transfer, and write all on worker | Minimal — XCOPY offloaded to FlashArray controller |
| VDDK image required | Yes, for VDDK-based migration flows | Not required for storage-offload-based paths if VDDK is not being used |
| StorageMap config | Standard destination storage mapping | Includes offload plugin configuration such as offloadPlugin.vsphereXcopyConfig |
| Disk provisioning mode | Can affect transfer characteristics | Offload path is less dependent on host-side transfer mechanics |
| RDM support | Needs workload-specific validation | Needs workload-specific validation |
Test Environment and Lab Setup
Infrastructure Overview (Compute, Network, Storage)
| Layer | Everpure Engineering Lab |
|---|---|
| VMware hosts | 4x Cisco UCS-B200-M6 (bare-metal ESXi) |
| OpenShift workers | 4x Cisco UCS-B200-M6 (bare-metal RHCOS) |
| Storage | FlashArray//XL and FlashArray//X |
| Transport (validated) | iSCSI and SCSI-FC |
| Migration tooling | Forklift + XCopy Offload Forklift + Vol Copy Offload |
| OpenShift version | 4.19.11 |
| Portworx | PX-CSI |
VMware Source Configuration
| Component | Specification |
|---|---|
| vCenter version | 8.0.3, build 24022515 |
| ESXi version | 8.0.3, build 24674464 |
| Host hardware | 3x Cisco UCS-B200-M6 |
| CPU per host | 48 CPUs — Intel Xeon E5-2650 v4 @ 2.20 GHz |
| Memory per host | 383.89 GB |
| Storage NICs | 2x 25 Gb/s per host |
| Datastore types tested | VMFS, vVols and RDMs (both backed by FlashArray) |
OpenShift Cluster Configuration
| Component | Specification |
|---|---|
| OpenShift version | 4.19.11 |
| Kubernetes version | Aligned with OCP 4.19 |
| Worker hardware | 4 x Cisco UCS-B200-M6 |
| Worker CPU | 48 CPUs — Intel Xeon E5-2650 v4 @ 2.20 GHz |
| Worker memory | 383.89 GB |
| Worker storage NICs | 2x 25 Gb/s |
| Worker OS | RHCOS (immutable) |
| Forklift | Migration Toolkit for Virtualization 2.9.5 |
FlashArray Configuration
| Component | Engineering Lab |
|---|---|
| Model | FlashArray//XL and FlashArray//X |
| Purity version | 6.10.3 |
| Management network | 2 x 1 Gb/s per controller |
| Data network | 2 x 25 Gb/s iSCSI per controller |
| Host objects (OpenShift) | ocp-workers — managed by Portworx |
| Datastores | VMFS and vVol datastores for test VMs |
| API user for Portworx | px-portworx — Storage Admin role |
Network Topology and Connectivity
SCSI-FC
iSCSI
Test Workload Profiles
Three VM profiles were used in the engineering lab migration testing. Each profile exercises different aspects of the migration tooling — disk count, disk size, OS type, and data density. All test VMs were created by cloning from pre-built base images using standard VMware cloning operations.
| Profile | CPUs | Memory | Disks | Total Disk Size | Data Used | Data Generation |
|---|---|---|---|---|---|---|
| Windows Server 2025 | 8 | 16 GB | 1x 100 GB | 100 GB | 50 GB | ~25 GB random (dd), ~6 GB apps, ~19 GB OS |
| Multi-Disk Rocky Linux 10 | 1 | 2 GB | 3x 16 GB | 48 GB | 21 GB | ~8 GB random per data disk |
| Large-Disk Rocky Linux 10 | 2 | 8 GB | 1x 500 GB | 500 GB | 305 GB | ~300 GB random data (dd) |
Random data was generated using:
dd if=/dev/urandom of=/mnt/disk1/random_file.img bs=1G count=<N>
For shared RDM testing, 6 instances of the Large-Disk Linux VM were deployed with two 1 TB shared RDM volumes configured in physical compatibility mode with multi-writer sharing — representing a clustered application with shared storage.
| Shared RDM configuration | Specification |
|---|---|
| RDM volumes | 2x 1 TB |
| Sharing mode | Multi-writer |
| Compatibility mode | Physical |
| Data used per RDM | ~700 GB random data |
| VMs sharing the RDMs | 6x Large-Disk Linux VMs |