Version: 2.1.0 Date: 2026-01-30 Status: Production Ready
Comprehensive OpenShift support added to Hyper2KVM Kubernetes operator, enabling seamless deployment on OpenShift Container Platform 4.10-4.16 with native platform features.
Files Created/Modified:
helm/hyper2kvm-operator/templates/openshift-route.yaml - Route templateshelm/hyper2kvm-operator/values.yaml - Route configurationCapabilities:
Configuration:
openshift:
route:
enabled: true
host: "" # Auto-generated if empty
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirect
Usage:
# Get metrics route URL
oc get route hyper2kvm-operator-metrics -n hyper2kvm-system
# Access metrics
curl -k https://$(oc get route hyper2kvm-operator-metrics -o jsonpath='{.spec.host}')/metrics
Files Created/Modified:
helm/hyper2kvm-operator/templates/openshift-scc.yaml - SCC templatehelm/hyper2kvm-operator/templates/rbac.yaml - SCC RBAC permissionshelm/hyper2kvm-operator/values.yaml - SCC configurationCapabilities:
SCC Permissions:
allowPrivilegedContainer: true - Required for NBD/LVMallowedCapabilities: SYS_ADMIN, SYS_MODULE, SYS_RAWIOvolumes: configMap, persistentVolumeClaim, hostPath, etc.Grant SCC to ServiceAccount:
oc adm policy add-scc-to-user hyper2kvm-worker-scc \
-z hyper2kvm-worker \
-n hyper2kvm-workers
Files Created:
olm/bundle/manifests/hyper2kvm-operator.clusterserviceversion.yaml - CSVolm/bundle/metadata/annotations.yaml - Bundle metadataolm/bundle/tests/scorecard/config.yaml - Scorecard testsolm/bundle.Dockerfile - Bundle imageolm/hyper2kvm-operator.package.yaml - Package manifestolm/README.md - OLM deployment guideCapabilities:
Channels:
stable - Production releases (default)preview - Preview releasesInstallation:
# Via OperatorHub UI
1. Navigate to OperatorHub
2. Search "Hyper2KVM"
3. Click Install
# Via CLI
operator-sdk run bundle ghcr.io/ssahani/hyper2kvm-operator-bundle:v2.0.0
CSV Features:
Files Created/Modified:
helm/hyper2kvm-operator/templates/openshift-oauth-proxy.yaml - OAuth resourceshelm/hyper2kvm-operator/templates/operator-deployment.yaml - Sidecar injectionhelm/hyper2kvm-operator/values.yaml - OAuth configurationCapabilities:
Configuration:
openshift:
oauth:
enabled: true
image:
repository: quay.io/openshift/origin-oauth-proxy
tag: "4.14"
port: 8443
Access Authenticated Metrics:
# Get OpenShift token
TOKEN=$(oc whoami -t)
# Access metrics with authentication
curl -k -H "Authorization: Bearer $TOKEN" \
https://$(oc get route hyper2kvm-operator-metrics -o jsonpath='{.spec.host}')/metrics
Files Modified:
helm/hyper2kvm-operator/templates/_helpers.tpl - Detection helpershelm/hyper2kvm-operator/values.yaml - Platform configurationCapabilities:
Helper Functions:
Configuration:
openshift:
enabled: false # Manual override
autoDetect: true # Auto-detect OpenShift API
Files Modified:
helm/hyper2kvm-operator/values.yaml - Template annotations/labelsCapabilities:
Annotations:
openshift:
templateMetadata:
annotations:
openshift.io/display-name: "Hyper2KVM Operator"
openshift.io/provider-display-name: "Hyper2KVM Project"
openshift.io/documentation-url: "https://github.com/ssahani/hyper2kvm"
description: "Kubernetes operator for automated VM migration"
iconClass: "icon-openshift"
tags: "migration,vmware,kvm,virtualization"
labels:
app.kubernetes.io/part-of: "hyper2kvm"
app.openshift.io/runtime: "python"
Files Created:
olm/README.md - Disconnected deployment guidedocs/deployment/openshift-deployment-guide.md - Image mirroring instructionsCapabilities:
Image Mirroring:
# Mirror operator images
oc image mirror \
ghcr.io/ssahani/hyper2kvm:2.0.0-operator=internal-registry.example.com/hyper2kvm/operator:2.0.0 \
ghcr.io/ssahani/hyper2kvm:2.0.0-worker=internal-registry.example.com/hyper2kvm/worker:2.0.0
ImageContentSourcePolicy:
apiVersion: operator.openshift.io/v1alpha1
kind: ImageContentSourcePolicy
metadata:
name: hyper2kvm-mirror
spec:
repositoryDigestMirrors:
- mirrors:
- internal-registry.example.com/hyper2kvm
source: ghcr.io/ssahani
Features:
Access Metrics in Console:
hyper2kvm_operator_job_totalFiles Created:
docs/deployment/openshift-deployment-guide.md (3,000+ lines)olm/README.md - OLM bundle guideContent:
# Install via OpenShift Console
1. OperatorHub → Search "Hyper2KVM" → Install
2. Choose namespace: hyper2kvm-system
3. Update channel: stable
4. Update approval: Automatic
# Add repo
helm repo add hyper2kvm https://ssahani.github.io/hyper2kvm
# Install with OpenShift features enabled
helm install hyper2kvm-operator hyper2kvm/hyper2kvm-operator \
--namespace hyper2kvm-system \
--set openshift.enabled=true \
--set openshift.route.enabled=true \
--set openshift.oauth.enabled=true
# Deploy manifests
oc apply -f k8s/operator/crds/
oc apply -f k8s/operator/
Helm Templates:
helm/hyper2kvm-operator/templates/openshift-route.yaml - Route resourceshelm/hyper2kvm-operator/templates/openshift-scc.yaml - SecurityContextConstraintshelm/hyper2kvm-operator/templates/openshift-oauth-proxy.yaml - OAuth proxy resourcesOLM Bundle:
olm/bundle/manifests/hyper2kvm-operator.clusterserviceversion.yaml - CSVolm/bundle/metadata/annotations.yaml - Bundle metadataolm/bundle/tests/scorecard/config.yaml - Scorecard configolm/bundle.Dockerfile - Bundle imageolm/hyper2kvm-operator.package.yaml - Package manifestolm/README.md - OLM guideDocumentation:
docs/deployment/openshift-deployment-guide.md - Complete deployment guidedocs/deployment/OPENSHIFT_FEATURES_SUMMARY.md - This fileHelm Configuration:
helm/hyper2kvm-operator/values.yaml - Added OpenShift section (150+ lines)helm/hyper2kvm-operator/templates/_helpers.tpl - Platform detection helpershelm/hyper2kvm-operator/templates/rbac.yaml - SCC permissionshelm/hyper2kvm-operator/templates/operator-deployment.yaml - OAuth sidecar| Feature | OpenShift | Kubernetes |
|---|---|---|
| Route | ✅ | ❌ (use Ingress) |
| SCC | ✅ | ❌ (use PSP/PSS) |
| OAuth Proxy | ✅ | ❌ (use custom auth) |
| OperatorHub | ✅ | ⚠️ (OLM optional) |
| Auto-detection | ✅ | ✅ |
| Helm Chart | ✅ | ✅ |
# Validate OLM bundle
operator-sdk bundle validate olm/bundle --select-optional suite=operatorframework
# Run scorecard
operator-sdk scorecard olm/bundle
# Lint Helm chart
helm lint helm/hyper2kvm-operator
# Template Helm chart
helm template hyper2kvm-operator helm/hyper2kvm-operator \
--set openshift.enabled=true \
--debug
# Deploy to test cluster
oc new-project hyper2kvm-test
helm install test hyper2kvm-operator \
--namespace hyper2kvm-test \
--set openshift.enabled=true
# Create test job
oc apply -f k8s/operator/examples/convert-job.yaml
# Verify
oc get migrationjobs -n hyper2kvm-test
oc logs -n hyper2kvm-test -l app.kubernetes.io/name=hyper2kvm-operator
All standard operator metrics are exposed, with OpenShift integration:
hyper2kvm_operator_reconciliation_duration_secondshyper2kvm_operator_job_totalhyper2kvm_operator_job_failures_totalhyper2kvm_operator_worker_counthyper2kvm_operator_is_leaderAccess via OpenShift Console:
hyper2kvm_*Operator requires:
Operator pods: Restricted (non-root, read-only FS, no capabilities) Worker pods: Privileged (via SCC, for NBD/LVM operations)
docker build -f olm/bundle.Dockerfile -t ghcr.io/ssahani/hyper2kvm-operator-bundle:v2.1.0 olm/
docker push ghcr.io/ssahani/hyper2kvm-operator-bundle:v2.1.0
opm index add \
--bundles ghcr.io/ssahani/hyper2kvm-operator-bundle:v2.1.0 \
--tag ghcr.io/ssahani/hyper2kvm-operator-catalog:latest
operator-sdk run bundle ghcr.io/ssahani/hyper2kvm-operator-bundle:v2.1.0
operators/hyper2kvm-operator/Status: ✅ All features implemented and tested Next Release: v2.1.0 (OpenShift Support)