NVIDIA vGPU Manager: build, integrated registry, and ClusterPolicy (OpenShift Virtualization)
This note validates a common on-cluster workflow against NVIDIA’s published steps, then records that workflow when Quay (or another external registry) is not used and images land in the integrated OpenShift image registry instead.
Primary NVIDIA reference: NVIDIA GPU Operator with OpenShift Virtualization — Building the vGPU Manager image and Creating a ClusterPolicy.
Related workspace guide: Using the integrated OpenShift container image registry.
End-to-end workflow (integrated registry)
1. Download the vGPU Manager .run
- NVIDIA Licensing Portal → Software Downloads → Driver downloads → Linux KVM complete vGPU package for the Product Version you intend to support.
- Unzip and locate
NVIDIA-Linux-x86_64-*-vgpu-kvm.run(or the AIE variant renamed per NVIDIA).
2. Clone NVIDIA’s build context and copy the installer
Change into the vgpu-manager subdirectory for your OS line (NVIDIA’s OpenShift example historically used vgpu-manager/rhel8; confirm the right path for your OCP / RHCOS generation):
3. Point the build at the integrated registry and RHCOS
Set VERSION to the vGPU software / driver version from the portal (NVIDIA’s examples look like 510.73.06; use your shipped version string).
Set OS_TAG to rhcos4.<minor> matching your OpenShift workers (NVIDIA documents this pattern).
Set PRIVATE_REGISTRY to the registry host and namespace prefix you will push to. For the integrated registry, that is commonly the external route hostname (for pushes from your workstation) plus project path, for example:
default-route-openshift-image-registry.apps.<cluster-base>/<project>
…where <project> is often nvidia-gpu-operator or a dedicated images project. See using-integrated-openshift-registry.md for login and push mechanics.
Example (illustrative only — adjust host, project, and versions):
Build and push using podman or docker as in NVIDIA’s doc:
Use a meaningful tag (here ${VERSION}-${OS_TAG}) so ClusterPolicy and support tickets stay unambiguous.
4. Reference the image from in-cluster pulls
Operands pull using the in-cluster registry DNS (typically image-registry.openshift-image-registry.svc:5000/<project>/vgpu-manager:<tag>). Your ClusterPolicy vgpuManager.repository / image / version (or equivalent fields) must match how your installed GPU Operator version assembles the pull spec. Always confirm with:
Conceptually you are wiring repository + image + version so they resolve to the same image you pushed (often image: vgpu-manager, version: tag string like 510.73.06-rhcos4.15 if that is what you pushed).
5. Update ClusterPolicy (operator already installed)
Generate or export the example ClusterPolicy, then merge at least:
spec.sandboxWorkloads.enabled: truespec.sandboxDevicePlugin.enabled: truespec.vgpuManager.enabled: truewithrepository,image,version, andimagePullSecretsif your registry requires themspec.vgpuDeviceManager.enabled: true
NVIDIA’s JSON-oriented example is in Creating a ClusterPolicy for the GPU Operator using the CLI. If a ClusterPolicy already exists, prefer oc get clusterpolicy -o yaml, edit, and oc apply.
6. Verify
When the vGPU Manager and sandbox operands are healthy and nodes are labeled, continue with NVIDIA’s HyperConverged mediated device steps and VM attachment.
Common pitfalls
- Wrong
vgpu-managersubdirectory orOS_TAGfor your RHCOS line → build succeeds but driver mismatches the node OS. ClusterPolicyfields do not match the pushed tag →ImagePullBackOffon daemonsets or operator-managed pods.- Image in project A, operands in
nvidia-gpu-operatorwithoutsystem:image-puller(or a pull secret) → pull forbidden across namespaces. - Enabling
vgpuManagerbefore the image exists → transient failures; enable or point after push.