Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

System Requirements for OpenShift Deployment

Read this section to understand the system, resource, port, and licensing requirements for installing Juniper Cloud-Native Router on the Red Hat OpenShift Container Platform (OCP).

Minimum Host System Requirements for OCP

Table 1 lists the host system requirements for installing JCNR on OCP.

Table 1: Minimum Host System Requirements for OCP
Component Value/Version Notes
CPU Intel x86 The tested CPU is Intel(R) Xeon(R) Silver 4314 CPU @ 2.40GHz 64 core
Host OS RHCOS 4.12  
Kernel Version RedHat Enterprise Linux (RHEL): 4.18.X The tested kernel version for RHEL is 4.18.0-372.40.1.el8_6.x86_64
NIC
  • Intel E810 with Firmware 4.00 0x80014411 1.3236.0

  • Intel E810-CQDA2 with Firmware 4.000x800144111.3236.0

  • Intel XL710 with Firmware 9.00 0x8000cead 1.3179.0

  • Mellanox ConnectX-6

  • Mellanox ConnectX-7

Support for Mellanox NICs is considered a Juniper Technology Preview (Tech Preview) feature.

When using Mellanox NICs, ensure your interface names do not exceed 11 characters in length.

When using Mellanox NICs, follow the interface naming procedure in Interface Naming for Mellanox NICs.

IAVF driver Version 4.5.3.1  
ICE_COMMS Version 1.3.35.0  
ICE Version 1.9.11.9 ICE driver is used only with the Intel E810 NIC
i40e Version 2.18.9 i40e driver is used only with the Intel XL710 NIC
OCP Version 4.13  
OVN-Kubernetes CNI    
Multus Version 3.8  
Helm 3.12.x  
Container-RT crio 1.25x Other container runtimes may work but have not been tested with JCNR.

Resource Requirements for OCP

Table 2 lists the resource requirements for installing JCNR on OCP.

Table 2: Resource Requirements for OCP
Resource Value Usage Notes
Data plane forwarding cores 2 cores (2P + 2S)  
Service/Control Cores 0  
UIO Driver VFIO-PCI To enable, follow the steps below:

Create a Butane config file, 100-worker-vfiopci.bu, binding the PCI device to the VFIO driver.

variant: openshift
version: 4.8.0
metadata:
  name: 100-worker-vfiopci
  labels:
    machineconfiguration.openshift.io/role: worker 
storage:
  files:
  - path: /etc/modprobe.d/vfio.conf
    mode: 0644
    overwrite: true
    contents:
      inline: |
        options vfio-pci ids=10de:1eb8 
  - path: /etc/modules-load.d/vfio-pci.conf 
    mode: 0644
    overwrite: true
    contents:
      inline: vfio-pci

Create and apply the machine config:

$ butane 100-worker-vfiopci.bu -o 100-worker-vfiopci.yaml
$ oc apply -f 100-worker-vfiopci.yaml
Hugepages (1G) 6 Gi Configure hupages on the worker nodes using the following commands:
oc create -f hugepages-tuned-boottime.yaml 
# cat hugepages-tuned-boottime.yaml  
apiVersion: tuned.openshift.io/v1 
kind: Tuned 
metadata: 
  name: hugepages  
  namespace: openshift-cluster-node-tuning-operator 
spec: 
  profile:  
  - data: | 
      [main] 
      summary=Boot time configuration for hugepages 
      include=openshift-node 
      [bootloader] 
      cmdline_openshift_node_hugepages=hugepagesz=1G hugepages=8 
    name: openshift-node-hugepages 
  recommend: 
  - machineConfigLabels:  
      machineconfiguration.openshift.io/role: "worker-hp" 
    priority: 30 
    profile: openshift-node-hugepages 
oc create -f hugepages-mcp.yaml  
# cat hugepages-mcp.yaml  
apiVersion: machineconfiguration.openshift.io/v1 
kind: MachineConfigPool 
metadata: 
  name: worker-hp 
  labels: 
    worker-hp: "" 
spec: 
  machineConfigSelector: 
    matchExpressions: 
      - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker,worker-hp]} 
  nodeSelector: 
    matchLabels: 
      node-role.kubernetes.io/worker-hp: "" 
Note:

This 6 x 1GB hugepage requirement is the minimum for a basic L2 mode setup. Increase this number for more elaborate installations. For example, in an L3 mode setup with 2 NUMA nodes and 256k descriptors, set the number of 1GB hugepages to 10 for best performance.

JCNR Controller cores .5  
JCNR vRouter Agent cores .5  

Miscellaneous Requirements for OCP

Table 3 lists additional requirements for installing JCNR on OCP.

Table 3: Miscellaneous Requirements for OCP

Cloud-Native Router Release Miscellaneous Requirements

Enable the host with SR-IOV and VT-d in the system's BIOS.

Depends on BIOS.

Enable VLAN driver at system boot.

Configure /etc/modules-load.d/vlan.conf as follows:

cat /etc/modules-load.d/vlan.conf
8021q

Reboot and verify by executing the command:

lsmod | grep 8021q

Enable VFIO-PCI driver at system boot.

Configure /etc/modules-load.d/vfio.conf as follows:

cat /etc/modules-load.d/vfio.conf
vfio
vfio-pci

Reboot and verify by executing the command:

lsmod | grep vfio

Set IOMMU and IOMMU-PT.

Create a MachineConfig object that sets IOMMU and IOMMU-PT:
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker 
  name: 100-worker-iommu 
spec:
  config:
    ignition:
      version: 3.2.0
  kernelArguments:
      - intel_iommu=on iommmu=pt
$ oc create -f 100-worker-kernel-arg-iommu.yaml

Disable spoofcheck on VFs allocated to JCNR.

Note:

Applicable for L2 deployments only.

ip link set <interfacename> vf 1 spoofcheck off.

Set trust on VFs allocated to JCNR.

Note:

Applicable for L2 deployments only.

ip link set <interfacename> vf 1 trust on

Additional kernel modules need to be loaded on the host before deploying JCNR in L3 mode. These modules are usually available in linux-modules-extra or kernel-modules-extra packages.

Note:

Applicable for L3 deployments only.

Create a conf file and add the kernel modules:

cat /etc/modules-load.d/crpd.conf
tun
fou
fou6
ipip
ip_tunnel
ip6_tunnel
mpls_gso
mpls_router
mpls_iptunnel
vrf
vxlan

Enable kernel-based forwarding on the Linux host.

ip fou add port 6635 ipproto 137

Exclude JCNR interfaces from NetworkManager control.

NetworkManager is a tool in some operating systems to make the management of network interfaces easier. NetworkManager may make the operation and configuration of the default interfaces easier. However, it can interfere with Kubernetes management and create problems.

To avoid NetworkManager from interfering with JCNR interface configuration, exclude JCNR interfaces from NetworkManager control. Here's an example on how to do this in some Linux distributions:

  1. Create the /etc/NetworkManager/conf.d/crpd.conf file and list the interfaces that you don't want NetworkManager to manage.

    For example:

    [keyfile]
     unmanaged-devices+=interface-name:enp*;interface-name:ens*
    where enp* and ens* refer to your JCNR interfaces.
    Note: enp* indicates all interfaces starting with enp. For specific interface names, provided a comma-separated list.
  2. Restart the NetworkManager service:
    sudo systemctl restart NetworkManager
    .
  3. Edit the /etc/sysctl.conf file on the host and paste the following content in it:
    net.ipv6.conf.default.addr_gen_mode=0
    net.ipv6.conf.all.addr_gen_mode=0
    net.ipv6.conf.default.autoconf=0
    net.ipv6.conf.all.autoconf=0
  4. Run the command sysctl -p /etc/sysctl.conf to load the new sysctl.conf values on the host.
  5. Create the bond interface manually. For example:

    ifconfig ens2f0 down
    ifconfig ens2f1 down
    ip link add bond0 type bond mode 802.3ad
    ip link set ens2f0 master bond0
    ip link set ens2f1 master bond0
    ifconfig ens2f0 up ; ifconfig ens2f1 up; ifconfig bond0 up

Verify the core_pattern value is set on the host before deploying JCNR.

sysctl kernel.core_pattern
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

You can update the core_pattern in /etc/sysctl.conf. For example:

kernel.core_pattern=/var/crash/core_%e_%p_%i_%s_%h_%t.gz

Port Requirements

Juniper Cloud-Native Router listens on certain TCP and UDP ports. This section lists the port requirements for the cloud-native router.

Table 4: Cloud-Native Router Listening Ports
Protocol Port Description
TCP 8085 vRouter introspect–Used to gain internal statistical information about vRouter
TCP 8070 Telemetry Information- Used to see telemetry data from the JCNR vRouter
TCP 8072 Telemetry Information-Used to see telemetry data from JCNR control plane
TCP 8075, 8076 Telemetry Information- Used for gNMI requests
TCP 9091 vRouter health check–cloud-native router checks to ensure the vRouter agent is running.
TCP 9092 vRouter health check–cloud-native router checks to ensure the vRouter DPDK is running.
TCP 50052 gRPC port–JCNR listens on both IPv4 and IPv6
TCP 8081 JCNR Deployer Port
TCP 24 cRPD SSH
TCP 830 cRPD NETCONF
TCP 666 rpd
TCP 1883 Mosquito mqtt–Publish/subscribe messaging utility
TCP 9500 agentd on cRPD
TCP 21883 na-mqttd

TCP

50053

Default gNMI port that listens to the client subscription request

TCP 51051 jsd on cRPD
UDP 50055 Syslog-NG

Interface Naming for Mellanox NICs

When deploying Mellanox NICs in an OpenShift cluster, a conflict can arise between how OCP and JCNR use interface names on those NICs. This might prevent your cluster from coming up.

Prior to installing JCNR, either disable predictable interface naming (Option 1: Disable predictable interface naming) or rename the JCNR interfaces (Option 2: Rename the JCNR interfaces). The JCNR interfaces are the interfaces that you want JCNR to control.

Option 1: Disable predictable interface naming

  1. Before you start, ensure you have console access to the node.

  2. Edit /etc/default/grub and append net.ifnames=0 to GRUB_CMDLINE_LINUX_DEFAULT.

  3. Update grub.

  4. Reboot the node.

  5. Log back into the node. You might have to do this through the console if the network interfaces don't come back up.

  6. List the interfaces and take note of the names of the non-JCNR and JCNR interfaces.

  7. For all the non-JCNR interfaces, update NetworkManager (or your network renderer) with the new interface names and restart NetworkManager.

  8. Repeat on all the nodes where you’re installing the JCNR vRouter.

Note:

Remember to update the fabric interfaces in your JCNR installation helm chart with the new names of the JCNR interfaces (or use subnets).

Option 2: Rename the JCNR interfaces

  1. Create a /etc/udev/rules.d/00-persistent-net.rules file to contain the rules.

  2. Add the following line to the file:

    where <mac_address> is the MAC address of the interface you’re renaming and <new_ifname> is the new name you want to assign to the interface (for example, jcnr-eth1).

  3. Add a corresponding line for each interface you’re renaming. (You’re renaming all the interfaces that JCNR controls.)

  4. Reboot the node.

  5. Repeat on all the nodes where you’re installing the JCNR vRouter.

Note:

Remember to update the fabric interfaces in your JCNR installation helm chart with the new names of the JCNR interfaces (or use subnets).

Download Options

See JCNR Software Download Packages.

JCNR Licensing

See Manage JCNR Licenses.