---
title: "NIOS-X on Red Hat OpenShift"
canonical: "https://docs.infoblox.com/space/BloxOneInfrastructure/1291321421/NIOS-X%20on%20Red%20Hat%20OpenShift"
format: markdown
---
# <span style="color: #000000">Prerequisites</span>

Infoblox recommends that you dedicate the minimum system requirements to the NIOS-X server you plan to deploy. The dedicated resources cannot be shared with or used for other non-Infoblox applications. Sharing resources will negatively affect the performance of your Infoblox services.  Before deploying a NIOS-X server and enabling Infoblox services, ensure that you prepare the deployment environment according to the requirements for the supported platforms and open all necessary ports for unrestricted outbound access. For details, see the following:

- *[NIOS-X Server Connectivity and Service Requirements](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/873660456)*
- *[Minimum System Requirements for NIOS-X Servers](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/873758806)*
- *[Supported Platforms for NIOS-X Servers](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/873693279)*

Before you start the deployment, consider the following:

- For details on sizing and system requirements, see [Minimum System Requirements for NIOS-X Servers](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/873758806).
- Ensure that your OpenShift environment meets the minimum <u>*[deployment requirements](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/873758806)*</u>.

# Downloading the QCOW2 Package for Red Hat OpenShift

1. Log in to the Infoblox Portal.
2. Go to **System > Downloads**.
3. Go to the **NIOS-X** section, click **NIOS-X Servers **drop-down and select **Download QCOW2**.

# Creating a Volume in OpenShift

Complete the following to upload the QCOW2 image and add a volume in OpenShift. You must create a volume if you choose to deploy the NIOS-X server via the OpenShift UI or via a YAML file and volume.

1. Log in to the OpenShift Container Platform web console.
2. Go to **Virtualization** > **Catalog**.
3. On the** Create New VirtualMachine** screen, click **Add volume** in the **Select volume to boot from** section.
4. On the **Add Volume** screen, complete the following to upload the QCOW2 image to be used as the bootable volume:
  - **Source type**: Choose **Volume** from the menu.
  - **Upload PVC image**: Click **Upload** and navigate to the QCOW2 file you downloaded from the Infoblox Portal.
  - **StorageClass**: Choose **gp3-cs**i from the menu .
  - **Apply optimized StorageProfile settings**: Select this check box.
  - **Disk size**: Set the disk size to **60 Gib**.
    - If you want to resize the disk, use the disk resize `user-data` file from <u>*[Appendix B: YAML and JSON Templates](https://docs.infoblox.com/space/BloxOneThreatDefense/35408412)*</u>. Skipping any of the specified values may prevent the disk from expanding, so the server cannot use the additional space.
  - **Volume name**: Enter a name for the bootable volume.
  - **Destination project**: Choose the destination project from the menu.
  - **Volume metadata Preference**: Choose **Ubuntu** from the menu.
5. Click **Save** to upload the QCOW2 image. Note that the upload time varies, depending on the connectivity speed.

Once the image is uploaded, the volume is available for use.

![image-20250320-232539.png](media://c13e0852-d164-40d1-9b6e-306156d6a292)

# UI-Based Deployment on OpenShift

> 📝 When using this deployment method, ensure that you have already created a volume using the downloaded NIOS-X image from the Infoblox Portal.

1. In the OpenShift Container Platform web console.
2. Go to **Virtualization** > **Catalog**.
3. On the **Destination Project** screen, choose the newly created volume.
4. In the **Select Instance Type** section, choose the instance type based on the resource recommendation for NIOS-X server deployments. For minimum resource requirements, see *[NIOS-X Connectivity and Service Requirements](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/873660456)*.
  
5. Click **Custom VirtualMachine**.
  
6. In the **Configuration** tab, click **Initial Run**.
7. On the **Initial Run** screen, click **Edit** next to **Cloud-init** to add the join token you created in the Infoblox Portal.
  
8. In the **Cloud-Init** dialog, do the following:
  - **Configure via**: Click **Script** to and enter the script in the text box to add the join token.
    
9. Click the **Network** tab to add network interfaces or use existing ones. You can also configure multiple network interfaces for your NIOS-X server. To do so, create the new network interfaces here by clicking **Add network interface**, and then configure them via the Infoblox Portal. For information about configuring multiple interfaces for NIOS-X servers, see *[Configuring Multiple Network Interfaces.](https://infoblox-docs.atlassian.net/wiki/spaces/BloxOneInfrastructure/pages/184582963)*
  
10. Click **Create VirtualMachine** to create the new VM.

# YAML Deployment on OpenShift

You can deploy a NIOS-X VM using YAML formatted files via OpenShift. There are two YAML deployment methods. as follows:

- Method 1: Using the downloaded NIOS-X image from the system where the image is stored
- Method 2: Using a YAML configuration file. When you use this method, ensure that the volume has already been created using the NIOS-X image.

## Method 1: YAML Deployment Sourcing NIOS-X Image on the System

1. Log in to the OpenShift Container Platform web console.
2. In the OpenShift console, go to **Virtualization** > **VirtualMachines**.
3. On the **VirtualMachine** screen, click **Create** > **With YAML** from the drop-down menu.
4. Prepare your YAML configuration and then copy and past the configuration in the editor.
5. Click **Create** to create the VM.

### Sample YAML Configuration for Sourcing NIOS-X Image from the System

The following is a sample YAML configuration for sourcing the NIOS-X image downloaded from the Infoblox Portal. Ensure that you update the configuration based on your organization’s needs and requirements. 

> 📝 The values enclosed in <> brackets within the script are sample values. You will need to replace these with the appropriate values for your configuration.

`apiVersion: kubevirt.io/v1`  
`kind: VirtualMachine`  
`metadata:`  
`  annotations:`  
`    kubevirt.io/latest-observed-api-version: v1`  
`    kubevirt.io/storage-observed-api-version: v1`  
`    name.os.template.kubevirt.io/fedora32: Fedora 31 or higher`  
`  name: <The name of your VM.>`  
`  generation: 1`  
`  namespace: default`  
`spec:`  
`  dataVolumeTemplates:`  
`    - apiVersion: cdi.kubevirt.io/v1`  
`      kind: DataVolume`  
`      metadata:`  
`        name: <The name of your volume.>`  
`      spec:`  
`        pvc:`  
`          accessModes:`  
`            - ReadWriteOnce`  
`          resources:`  
`            requests:`  
`              storage: 60Gi`  
`          storageClassName: nfs-client`  
`          volumeMode: Filesystem`  
`        source:`  
`          http:`  
`            url: >-`  
`              http://<The source IP>:8080/<The path of the downloaded QCOW2 file>`  
`  running: true`  
`  template:`  
`    metadata:`  
`      labels:`  
`        kubevirt.io/size: large`  
`        os.template.kubevirt.io/fedora32: 'true'`  
`        workload.template.kubevirt.io/desktop: 'true'`  
`    spec:`  
`      domain:`  
`        cpu:`  
`          cores: 8`  
`          sockets: 1`  
`          threads: 1`  
`        devices:`  
`          autoattachPodInterface: false`  
`          disks:`  
`            - bootOrder: 1`  
`              disk:`  
`                bus: virtio`  
`              name: rootdisk`  
`            - disk:`  
`                bus: virtio`  
`              name: cloudinitdisk`  
`          inputs:`  
`            - bus: virtio`  
`              name: tablet`  
`              type: tablet`  
`          interfaces:`  
`            - bridge: {}`  
`              model: virtio`  
`              name: nic-0`  
`            - bridge: {}`  
`              model: virtio`  
`              name: nic-1`  
`          networkInterfaceMultiqueue: true`  
`        firmware:`  
`          serial: <The serial number of your system>`  
`        resources:`  
`          requests:`  
`            memory: 16Gi`  
`      evictionStrategy: LiveMigrate`  
`      networks:`  
`        - multus:`  
`            networkName: <The network name>`  
`          name: nic-0`  
`        - multus:`  
`            networkName: <The network name>`  
`          name: nic-1`  
`      terminationGracePeriodSeconds: 180`  
`      volumes:`  
`        - dataVolume:`  
`            name: <The name of your volume>`  
`          name: rootdisk`  
`        - cloudInitNoCloud:`  
`            userData: |-`  
`              #cloud-config`  
`              host_setup:`  
`               jointoken: <The join token from the Infoblox Portal>`  
`          name: cloudinitdisk`

## Method 2: YAML Deployment Using YAML File and Volume

> 📝 When using this deployment method, ensure that you have already created a volume using the downloaded NIOS-X image from the Infoblox Portal.

### Creating a Volume in OpenShift

Complete the following to upload the QCOW2 image and add a volume in OpenShift. 

1. Log in to the OpenShift Container Platform web console.
2. Go to **Virtualization** > **Catalog**.
3. On the** Create New VirtualMachine** screen, click **Add volume** in the **Select volume to boot from** section.
4. On the **Add Volume** screen, complete the following to upload the QCOW2 image to be used as the bootable volume:
  - **Source type**: Choose **Volume** from the menu.
  - **Upload PVC image**: Click **Upload** and navigate to the QCOW2 file you downloaded from the Infoblox Portal.
  - **StorageClass**: Choose **gp3-cs**i from the menu .
  - **Apply optimized StorageProfile settings**: Select this check box.
  - **Disk size**: Set the disk size to **60 Gib**.
    - If you want to resize the disk, use the disk resize `user-data` file from <u>*[Appendix B: YAML and JSON Templates](https://docs.infoblox.com/space/BloxOneThreatDefense/35408412)*</u>. Skipping any of the specified values may prevent the disk from expanding, so the server cannot use the additional space.
  - **Volume name**: Enter a name for the bootable volume.
  - **Destination project**: Choose the destination project from the menu.
  - **Volume metadata Preference**: Choose **Ubuntu** from the menu.
5. Click **Save** to upload the QCOW2 image. Note that the upload time varies, depending on the connectivity speed.

Once the image is uploaded, the volume is available for use.

![image-20250320-232539.png](media://c13e0852-d164-40d1-9b6e-306156d6a292)

### Deploying the NIOS-X Server

1. Log in to the OpenShift Container Platform web console.
2. In the OpenShift console, go to **Virtualization** > **VirtualMachines**.
3. On the **VirtualMachine** screen, click **Create** > **With YAML** from the drop-down menu.
  - Modify the following script and enter it in the YAML editor.

> 📝 The values enclosed in <> brackets within the script are variables, depending on your configuration.

`kind: Template`

`apiVersion: template.openshift.io/v1`

`metadata:`

`name: infoblox.nios-x.medium`

`namespace: <The OpenShift namespace>`

`uid: <uniquie ID of the namespace>`

`resourceVersion: <The version of the resource>`

`creationTimestamp: <The timestamp when the namespace was created>`

`labels:`

`app.kubernetes.io/part-of: hyperconverged-cluster`

`os.template.kubevirt.io/fedora39: 'true'`

`template.kubevirt.io/version: v0.31.1`

`app.kubernetes.io/version: 4.17.4`

`template.kubevirt.io/type: vm`

`vm.kubevirt.io/template: fedora-desktop-large`

`app.kubernetes.io/component: templating`

`app.kubernetes.io/managed-by: ssp-operator`

`app.kubernetes.io/name: custom-templates`

`flavor.template.kubevirt.io/large: 'true'`

`vm.kubevirt.io/template.namespace: openshift`

`os.template.kubevirt.io/fedora40: 'true'`

`workload.template.kubevirt.io/server: 'true'`

`annotations:`

`template.kubevirt.io/provider: Infoblox`

`template.kubevirt.io/provider-url: '`https://www.infoblox.com`'`

`template.kubevirt.io/containerdisks: |`

http://quay.io/containerdisks/fedora:latest` `

http://quay.io/containerdisks/fedora:39` `

http://quay.io/containerdisks/fedora:40` `

`template.kubevirt.io/version: v1alpha1`

`openshift.io/display-name: NIOS-X Medium (Infoblox Universal DDI)`

`name.os.template.kubevirt.io/fedora39: Fedora Linux 39 or higher`

`openshift.io/documentation-url: '`https://github.com/kubevirt/common-templates` '`

`template.kubevirt.io/images: |`

`<https://dl.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images/Fedora-Cloud-Base-39-1.5.x86_64.qcow2>`

`<https://download.fedoraproject.org/pub/fedora/linux/releases/40/Cloud/x86_64/images/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2>`

`operator-sdk/primary-resource-type: SSP.ssp.kubevirt.io`

`defaults.template.kubevirt.io/disk: rootdisk`

`template.kubevirt.io/editable: |`

`/objects[0].spec.template.spec.domain.cpu.sockets`

`/objects[0].spec.template.spec.domain.cpu.cores`

`/objects[0].spec.template.spec.domain.cpu.threads`

`/objects[0].spec.template.spec.domain.memory.guest`

`/objects[0].spec.template.spec.domain.devices.disks`

`/objects[0].spec.template.spec.volumes`

`/objects[0].spec.template.spec.networks`

`template.openshift.io/bindable: 'false'`

`openshift.kubevirt.io/pronounceable-suffix-for-name-expression: 'true'`

`operator-sdk/primary-resource: openshift-cnv/ssp-kubevirt-hyperconverged`

`tags: 'hidden,kubevirt,virtualmachine,fedora'`

`template.kubevirt.io/provider-support-level: Community`

`description: |-`

`Template for Infoblox Universal DDI (NIOS-X)`

`A bootable image of NIOS-X should be available, please clone it to continue.`

`openshift.io/support-url: '`https://github.com/kubevirt/common-templates/issues` '`

`iconClass: icon-fedora`

`name.os.template.kubevirt.io/fedora40: Fedora Linux 39 or higher`

`openshift.io/provider-display-name: Infoblox`

`managedFields:`  
- `manager: Mozilla`

`operation: Update`

`apiVersion: template.openshift.io/v1`

`time: '2025-02-05T19:18:03Z'`

`fieldsType: FieldsV1`

`fieldsV1:`

`'f:metadata':`

`'f:annotations':`

`'f:template.kubevirt.io/editable': {}`

`'f:operator-sdk/primary-resource': {}`

`'f:operator-sdk/primary-resource-type': {}`

`'f:defaults.template.kubevirt.io/disk': {}`

`'f:template.kubevirt.io/provider-support-level': {}`

`'f:description': {}`

`'f:template.openshift.io/bindable': {}`

`'f:iconClass': {}`

`'f:name.os.template.kubevirt.io/fedora40': {}`

`'f:openshift.kubevirt.io/pronounceable-suffix-for-name-expression': {}`

`'f:tags': {}`

`.: {}`

`'f:template.kubevirt.io/provider': {}`

`'f:template.kubevirt.io/provider-url': {}`

`'f:template.kubevirt.io/containerdisks': {}`

`'f:openshift.io/support-url': {}`

`'f:openshift.io/provider-display-name': {}`

`'f:template.kubevirt.io/images': {}`

`'f:name.os.template.kubevirt.io/fedora39': {}`

`'f:openshift.io/display-name': {}`

`'f:template.kubevirt.io/version': {}`

`'f:openshift.io/documentation-url': {}`

`'f:labels':`

`'f:flavor.template.kubevirt.io/large': {}`

`'f:vm.kubevirt.io/template.namespace': {}`

`'f:app.kubernetes.io/managed-by': {}`

`'f:app.kubernetes.io/name': {}`

`.: {}`

`'f:app.kubernetes.io/part-of': {}`

`'f:os.template.kubevirt.io/fedora40': {}`

`'f:workload.template.kubevirt.io/server': {}`

`'f:app.kubernetes.io/version': {}`

`'f:template.kubevirt.io/type': {}`

`'f:os.template.kubevirt.io/fedora39': {}`

`'f:vm.kubevirt.io/template': {}`

`'f:template.kubevirt.io/version': {}`

`'f:app.kubernetes.io/component': {}`

`'f:objects': {}`

`'f:parameters': {}`

`objects:`  
-`apiVersion: kubevirt.io/v1`

`kind: VirtualMachine`

`metadata:`

`annotations:`

`vm.kubevirt.io/validations: |`

`[`

`{`

`"name": "minimal-required-memory",`

`"path": "jsonpath::.spec.domain.memory.guest",`

`"rule": "integer",`

`"message": "This VM requires more memory.",`

`"min": 2147483648`

`}`

`]`

`labels:`

`app: '${NAME}'`

`kubevirt.io/dynamic-credentials-support: 'true'`

`vm.kubevirt.io/template: infoblox.nios-x.medium`

`vm.kubevirt.io/template.revision: '1'`

`vm.kubevirt.io/template.namespace: <The name of the OpenShift namespace>`

`name: '${NAME}'`

`spec:`

`dataVolumeTemplates:`  
-`apiVersion: cdi.kubevirt.io/v1beta1`

`kind: DataVolume`

`metadata:`

`name: '${NAME}'`

`spec:`

`sourceRef:`

`kind: DataSource`

`name: '${DATA_SOURCE_NAME}'`

`namespace: '${DATA_SOURCE_NAMESPACE}'`

`storage:`

`resources:`

`requests:`

`storage: 120Gi`

`running: false`

`template:`

`metadata:`

`annotations:`

`vm.kubevirt.io/flavor: large`

`vm.kubevirt.io/os: fedora`

`vm.kubevirt.io/workload: server`

`labels:`

`kubevirt.io/domain: '${NAME}'`

`kubevirt.io/size: large`

`spec:`

`architecture: amd64`

`domain:`

`cpu:`

`cores: 4`

`sockets: 1`

`threads: 2`

`devices:`

`disks:`  
-`disk:`

`bus: virtio`

`name: rootdisk`  
-`disk:`

`bus: virtio`

`name: cloudinitdisk`

`inputs:`  
-`bus: virtio`

`name: tablet`

`type: tablet`

`interfaces:`  
-`masquerade: {}`

`model: virtio`

`name: <The name of your network>`  
-`bridge: {}`

`model: virtio`

`name: <The name of your network>`

`networkInterfaceMultiqueue: true`

`rng: {}`

`features:`

`smm:`

`enabled: true`

`firmware:`

`bootloader:`

`efi: {}`

`memory:`

`guest: 16Gi`

`networks:`  
-`name: <The name of your network>`

`pod: {}`  
-`name: <The name of your network>`

`multus: {}`

`terminationGracePeriodSeconds: 180`

`volumes:`  
-`dataVolume:`

`name: '${NAME}'`

`name: rootdisk`  
-`cloudInitNoCloud:`

`userData: |-`

`#cloud-config`

`host_setup:`

`jointoken:`

`name: cloudinitdisk`

`parameters:`  
-`name: NAME`

`description: VM name`

`generate: expression`

`from: 'niosx-[a-z0-9]{16}'`  
-`name: DATA_SOURCE_NAME`

`description: <Description of the DataSource to clone>`

`value: niosx`  
-`name: DATA_SOURCE_NAMESPACE`

`description: <Description of the DataSopurce namespace>`

`value: openshift-virtualization-os-images`  


4. Click **Create** to create the VM.

# Accessing the NIOS-X Server VM

You can access your newly created NIOS-X server VM through the  OpenShift Container Platform web console or the Infoblox Portal. 

To access the VM through OpenShift:

1. In the OpenShift console, go to **Virtualization** > **VirtualMachines**.
2. On the **VirtualMachines **page, click on the NIOS-X server VM.
3. Open the serial console to view the Health Check screen of the VM.

To access the NIOS-X server VM through the Infoblox Portal:

1. Log in to the Infoblox Portal
2. Go to **Network > Services & Servers > Servers**.
3. On the **Servers** page, click the filter icon and choose **Server Type** as the filtering criterion.
4. From the server type list, choose **OpenShift** subtype to view all OpenShift-deployed servers.
5. You can view your newly created NIOS-X server VM in the table.

For more information, see *[Viewing Server Information](https://infoblox-docs.atlassian.net/wiki/pages/createpage.action?spaceKey=BloxOneInfrastructure&title=Viewing%20Host%20Information)*.