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
- A Nephio Management cluster:
- installation guides for detailed environment options.
- The following optional operator pkg deployed:
Note
If using a sandbox demo environment, most of the above prerequisites are already satisfied.This exercise will take us from a system with only the Nephio Management cluster setup, to a deployment with:
- A workload cluster specified as a template when instantiating an instance of the ProvisioningRequest CRD.
- A repository for said cluster, registered with Nephio Porch.
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
Note
After a fresh docker install, verify the docker supplementary group is loaded by executingid | grep docker.
If not, logout and login to the VM or execute newgrp docker to ensure the docker supplementary group is loaded.
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