O-RAN O2 IMS Operator Deployment

A step by step guide to deploying a workload cluster, using the provisioningrequests.o2ims.provisioning.oran.org CRD.

Prerequisites

This exercise will take us from a system with only the Nephio Management cluster setup, to a deployment with:

To perform these exercises, we will need:

  • Access to the installed demo VM environment as the ubuntu user.
  • Access to the Nephio WebUI as described in the installation guide (optional).
  • Access to Gitea, used in the demo environment as the Git provider (optional).

Step 1: Deploy the provisioningrequests.o2ims.provisioning.oran.org CRD

First, verify that the catalog blueprint repositories are registered and Ready:

kubectl get repository

Sample output:

NAME                        TYPE   CONTENT   DEPLOYMENT   READY   ADDRESS
catalog-distros-sandbox     git    Package   false        True    https://github.com/nephio-project/catalog.git
catalog-infra-capi          git    Package   false        True    https://github.com/nephio-project/catalog.git
catalog-nephio-core         git    Package   false        True    https://github.com/nephio-project/catalog.git
catalog-nephio-optional     git    Package   false        True    https://github.com/nephio-project/catalog.git
catalog-workloads-free5gc   git    Package   false        True    https://github.com/nephio-project/catalog.git
catalog-workloads-oai-ran   git    Package   false        True    https://github.com/nephio-project/catalog.git
catalog-workloads-tools     git    Package   false        True    https://github.com/nephio-project/catalog.git
mgmt                        git    Package   true         True    http://172.18.0.200:3000/nephio/mgmt.git
mgmt-staging                git    Package   false        True    http://172.18.0.200:3000/nephio/mgmt-staging.git
oai-core-packages           git    Package   false        True    https://github.com/OPENAIRINTERFACE/oai-packages.git

Deploy the CRD

kubectl create -f https://raw.githubusercontent.com/nephio-project/api/refs/heads/main/config/crd/bases/o2ims.provisioning.oran.org_provisioningrequests.yaml

Verify that the CRD is created by executing

kubectl get crd | grep provisioningrequests

Output

NAME                                                         CREATED AT
provisioningrequests.o2ims.provisioning.oran.org             2025-02-18T20:20:06Z

Step 2: Create a new ProvisioningRequest CR that will create a Workload Cluster:

cat << EOF | kubectl apply -f
apiVersion: o2ims.provisioning.oran.org/v1alpha1
kind: ProvisioningRequest
metadata:
  name: edge-cluster
spec:
  name: sample-edge
  description: "Provisioning request for setting up a sample edge kind cluster."
  templateName: nephio-workload-cluster
  templateVersion: v3.0.0
  templateParameters:
    clusterName: edge
    labels:
      nephio.org/site-type: edge
      nephio.org/region: europe-paris-west
      nephio.org/owner: nephio-o2ims
EOF

Verify if the provisioningrequest CR is created

kubectl get provisioningrequests edge-cluster

Output

NAME           AGE
edge-cluster   7h31m

Verify if packagevariants are created for the edge-cluster

kubectl get packagevariants

Output

edge-cluster                  4d12h
edge-configsync               4d12h
edge-crds                     4d12h
edge-kindnet                  4d12h
edge-local-path-provisioner   4d12h
edge-metallb                  4d12h
edge-multus                   4d12h
edge-repo                     4d12h
edge-rootsync                 4d12h
edge-vlanindex                4d12h

Examine the details of the provisioningrequest CR created

kubectl get provisioningrequests edge-cluster -o yaml

Output

apiVersion: o2ims.provisioning.oran.org/v1alpha1
kind: ProvisioningRequest
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"o2ims.provisioning.oran.org/v1alpha1","kind":"ProvisioningRequest","metadata":{"annotations":{},"name":"edge-cluster"},"spec":{"description":"Provisioning request for setting up a sample edge kind cluster.","name":"sample-edge","templateName":"nephio-workload-cluster","templateParameters":{"clusterName":"edge","labels":{"nephio.org/owner":"nephio-o2ims","nephio.org/region":"europe-paris-west","nephio.org/site-type":"edge"}},"templateVersion":"v3.0.0"}}
    provisioningrequests.o2ims.provisioning.oran.org/kopf-managed: "yes"
    provisioningrequests.o2ims.provisioning.oran.org/last-ha-a.A3qw: |
      {"spec":{"description":"Provisioning request for setting up a sample edge kind cluster.","name":"sample-edge","templateName":"nephio-workload-cluster","templateParameters":{"clusterName":"edge","labels":{"nephio.org/owner":"nephio-o2ims","nephio.org/region":"europe-paris-west","nephio.org/site-type":"edge"}},"templateVersion":"v3.0.0"}}
    provisioningrequests.o2ims.provisioning.oran.org/last-handled-configuration: |
      {"spec":{"description":"Provisioning request for setting up a sample edge kind cluster.","name":"sample-edge","templateName":"nephio-workload-cluster","templateParameters":{"clusterName":"edge","labels":{"nephio.org/owner":"nephio-o2ims","nephio.org/region":"europe-paris-west","nephio.org/site-type":"edge"}},"templateVersion":"v3.0.0"}}
  creationTimestamp: "2025-02-18T20:30:15Z"
  generation: 1
  name: edge-cluster
  resourceVersion: "2377164"
  uid: 8b17865d-60d4-47d4-b1b7-db7098340a22
spec:
  description: Provisioning request for setting up a sample edge kind cluster.
  name: sample-edge
  templateName: nephio-workload-cluster
  templateParameters:
    clusterName: edge
    labels:
      nephio.org/owner: nephio-o2ims
      nephio.org/region: europe-paris-west
      nephio.org/site-type: edge
  templateVersion: v3.0.0
status:
  provisionedResourceSet:
    oCloudInfrastructureResourceIds:
    - 5bcaf4ed-b467-4aa0-9dec-fb1517adb3f2
    oCloudNodeClusterId: 6f8759ea-f3ff-4bb5-ab8d-d0c35978f606
  provisioningStatus:
    provisioningMessage: Cluster resource created
    provisioningState: fulfilled
    provisioningUpdateTime: "2025-02-18T20:30:33Z"

Step 3: Check the cluster installation

You can check if the cluster has been added to the management cluster:

kubectl get cl

or

kubectl get clusters.cluster.x-k8s.io

Sample output:

NAME       CLUSTERCLASS   PHASE         AGE    VERSION
edge       docker         Provisioned   179m   v1.31.0

You should also check that the KinD cluster has come up fully by checking the machinesets. You should see READY and AVAILABLE replicas.

kubectl get machinesets

Sample output:

NAME                        CLUSTER    REPLICAS   READY   AVAILABLE   AGE    VERSION
edge-md-0-lmsqz-7nzzc       edge       1          1       1           3h1m   v1.31.0