Get hyper2kvm operator running on OpenShift in 5 minutes!
oc CLI installed and logged incluster-admin role (for installation)stableA specific namespacehyper2kvm-systemAutomatic# Check installation
oc get csv -n hyper2kvm-system
# Check operator pod
oc get pods -n hyper2kvm-system
oc apply -f - <<EOF
apiVersion: hyper2kvm.io/v1alpha1
kind: MigrationJob
metadata:
name: my-first-migration
namespace: hyper2kvm-system
spec:
operation: inspect
image:
path: /data/input/vm-disk.vmdk
format: vmdk
artifacts:
output_path: /data/output
EOF
Done! π
# Login to OpenShift
oc login <cluster-url>
# Add Helm repo
helm repo add hyper2kvm https://ssahani.github.io/hyper2kvm
helm repo update
# Install operator
helm install hyper2kvm-operator hyper2kvm/hyper2kvm-operator \
--namespace hyper2kvm-system \
--create-namespace \
--set openshift.enabled=true \
--set openshift.route.enabled=true \
--set openshift.oauth.enabled=true
# Check all resources
oc get all -n hyper2kvm-system
# Check routes
oc get routes -n hyper2kvm-system
git clone https://github.com/ssahani/hyper2kvm.git
cd hyper2kvm
# Build operator and worker images
./scripts/build-operator-images.sh 2.1.0
# Build OLM bundle
./scripts/build-olm-bundle.sh 2.1.0
# Login to OpenShift
oc login <cluster-url>
# Deploy via Helm
./scripts/deploy-to-openshift.sh 2.1.0 helm
# OR deploy via OLM
./scripts/deploy-to-openshift.sh 2.1.0 olm
./scripts/test-openshift-deployment.sh hyper2kvm-system
# Get metrics route
METRICS_ROUTE=$(oc get route hyper2kvm-operator-metrics -n hyper2kvm-system -o jsonpath='{.spec.host}')
# Access with OpenShift OAuth token
curl -k -H "Authorization: Bearer $(oc whoami -t)" https://$METRICS_ROUTE/metrics
oc logs -n hyper2kvm-system -l app.kubernetes.io/name=hyper2kvm-operator -f
Navigate to: Workloads β MigrationJobs
oc apply -f - <<EOF
apiVersion: hyper2kvm.io/v1alpha1
kind: MigrationJob
metadata:
name: inspect-vmdk
namespace: default
spec:
operation: inspect
image:
path: /data/vm-disk.vmdk
format: vmdk
priority: 50
EOF
oc apply -f - <<EOF
apiVersion: hyper2kvm.io/v1alpha1
kind: MigrationJob
metadata:
name: convert-vmdk
namespace: default
spec:
operation: convert
image:
path: /data/vm-disk.vmdk
format: vmdk
checksum: sha256:abc123...
artifacts:
output_path: /data/output
output_format: qcow2
compress: true
priority: 75
timeout: 2h
EOF
oc apply -f - <<EOF
apiVersion: hyper2kvm.io/v1alpha1
kind: MigrationJob
metadata:
name: fix-windows-vm
namespace: default
spec:
operation: offline_fix
image:
path: /data/windows-server.vmdk
format: vmdk
parameters:
inject_virtio: true
fix_network: true
artifacts:
output_path: /data/output
output_format: qcow2
priority: 100
EOF
# Watch all jobs
oc get migrationjobs --watch
# Get job details
oc describe migrationjob <job-name>
# Check job logs
oc logs -n hyper2kvm-workers -l job-name=<job-name>
helm upgrade hyper2kvm-operator hyper2kvm/hyper2kvm-operator \
--namespace hyper2kvm-system \
--set operator.replicaCount=3 \
--set operator.leaderElection.enabled=true \
--set webhook.replicaCount=2
helm upgrade hyper2kvm-operator hyper2kvm/hyper2kvm-operator \
--namespace hyper2kvm-system \
--set openshift.route.host=hyper2kvm.apps.example.com \
--set openshift.route.tls.termination=edge
# Mirror images to internal registry
oc image mirror \
ghcr.io/ssahani/hyper2kvm:2.1.0-operator=internal-registry.example.com/hyper2kvm/operator:2.1.0 \
ghcr.io/ssahani/hyper2kvm:2.1.0-worker=internal-registry.example.com/hyper2kvm/worker:2.1.0
# Create ImageContentSourcePolicy
oc apply -f - <<EOF
apiVersion: operator.openshift.io/v1alpha1
kind: ImageContentSourcePolicy
metadata:
name: hyper2kvm-mirror
spec:
repositoryDigestMirrors:
- mirrors:
- internal-registry.example.com/hyper2kvm
source: ghcr.io/ssahani
EOF
# Deploy with custom registry
helm install hyper2kvm-operator hyper2kvm/hyper2kvm-operator \
--namespace hyper2kvm-system \
--set operator.image.repository=internal-registry.example.com/hyper2kvm/operator \
--set worker.image.repository=internal-registry.example.com/hyper2kvm/worker
# Check pod status
oc describe pod -n hyper2kvm-system -l app.kubernetes.io/name=hyper2kvm-operator
# Check logs
oc logs -n hyper2kvm-system -l app.kubernetes.io/name=hyper2kvm-operator
# Check events
oc get events -n hyper2kvm-system --sort-by='.lastTimestamp'
# Check SCC assignment
oc get pod <worker-pod> -o yaml | grep openshift.io/scc
# Grant SCC manually
oc adm policy add-scc-to-user hyper2kvm-worker-scc \
-z hyper2kvm-worker \
-n hyper2kvm-workers
# Check route
oc get route -n hyper2kvm-system
# Check route status
oc describe route hyper2kvm-operator-metrics -n hyper2kvm-system
# Recreate route
oc delete route hyper2kvm-operator-metrics -n hyper2kvm-system
oc apply -f helm/hyper2kvm-operator/templates/openshift-route.yaml
helm uninstall hyper2kvm-operator -n hyper2kvm-system
oc delete project hyper2kvm-system
# WARNING: This deletes all MigrationJobs!
oc delete crd migrationjobs.hyper2kvm.io
oc delete crd jobtemplates.hyper2kvm.io
Need Help?