This describes how to deploy a lightweight version of an O-RAN Service Management and Orchestration (SMO) framework based on ONAP (excluding the Non-RT RIC for the moment), in preparation of developing rApps in the context of SMaRT 5G. It is based on the OAM and SIM projects inside the O-RAN Software Community. Current deployment is based on docker images and docker-compose is being used to start the solution.
Initial deployment consists of the following components (diagram available here):
This recipe for deployment is based on this guide here.
An Ubuntu machine with at least 4 cores (recommended 8), at least 8 GB of RAM (recommended 16GB) and at least 100GB of disk space (recommended 500GB).
$ cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 22.04.1 LTS" $ docker --version Docker version 23.0.1, build a5ee5b1 $ docker-compose version Docker Compose version v2.16.0 $ git --version git version 2.34.1
Guide for installing docker
for Ubuntu: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
Guide for installing docker-compose
: https://docs.docker.com/compose/install/other/
The Docker daemon needs to be configured to include this configuration:
$ cat /etc/docker/daemon.json { "registry-mirrors": [ "https://nexus3.o-ran-sc.org:10002", "https://nexus3.onap.org:10001" ], "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" }, "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" }
Please make sure to restart the Docker daemon in order for the changes to take effect:
systemctl reload docker
The /etc/hosts
file of the Host machine where the solution will be accessed from needs to be changed in order to be able to access the GUI of the SDN Controller and the Identity server via a FQDN (Fully Qualified Domain Name):
Please modify the /etc/hosts of your system. * \<your-system>: is the hostname of the system, where the browser is started * \<deployment-system-ipv4>: is the IP address of the system where the solution will be deployed For development purposes <your-system> and <deployment-system> may reference the same system. ``` $ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 <your-system> # SMO OAM development system <deployment-system-ipv4> identity.smo.o-ran-sc.org <deployment-system-ipv4> odlux.oam.smo.o-ran-sc.org ```
All the below steps assume the commands are being ran in /home/smart5g
folder.
The first step in the deployment process is cloning the gerrit repository containing the recipe:
git clone "https://gerrit.o-ran-sc.org/r/oam"
All the subsequent commands are relative to the oam/solution
folder.
cd oam/solution
$ docker-compose -f smo/common/docker-compose.yml up -d [+] Running 9/9 ⠿ Network dmz Created 0.1s ⠿ Network smo Created 0.1s ⠿ Container identitydb Started 1.2s ⠿ Container gateway Healthy 11.9s ⠿ Container zookeeper Started 1.3s ⠿ Container persistence Started 1.0s ⠿ Container kafka Started 2.0s ⠿ Container identity Started 12.9s ⠿ Container messages Started 12.8s
After processor utilisation stabilises (30-60 seconds), the Identity server needs to be configured.
$ python3 smo/common/identity/config.py Got token! User leia.organa created! User r2.d2 created! User luke.skywalker created! User jargo.fett created! User martin.skorupski created! User $USER created! User role $USER administration created! User role jargo.fett supervision created! User role leia.organa administration created! User role luke.skywalker provision created! User role martin.skorupski administration created! User role r2.d2 administration created!
Any of the above users can be used for logging in to the system. Their default password is Default4SDN!
There are some modifications needed to be done to the actual recipe.
HOST_IP
environment variable to smo/oam/.env
to point to the IP address of the Host machine.$ echo "HOST_IP=172.31.21.109" >> smo/oam/.env $ git diff smo/oam/.env diff --git a/solution/smo/oam/.env b/solution/smo/oam/.env index 9ad6728..25e86e6 100644 --- a/solution/smo/oam/.env +++ b/solution/smo/oam/.env @@ -54,4 +54,4 @@ VES_ENDPOINT_AUTH_METHOD=basic-auth VES_ENDPOINT_USERNAME=sample1 VES_ENDPOINT_PASSWORD=sample1 -HOST_IP=AA.BB.CC.DD +HOST_IP=172.31.21.109
$ docker-compose -f smo/oam/docker-compose.yml up -d [+] Running 4/4 ⠿ Network oam Created 0.1s ⠿ Container ves-collector Started 0.9s ⠿ Container controller Healthy 62.3s ⠿ Container odlux Started 62.8s
Now, a browser can be opened and the GUI (ODLUX) of the SDN Controller can be accessed: https://odlux.oam.smo.o-ran-sc.org
After proceeding without certificates, the login screen appears:
Clicking on "ONAP IDENTITY" redirects us to the Identity server:
Again, we need to proceed without certificates:
Now the system can be accessed with one of the users created by the config.py
script, in an earlier step.
The infrastructure is now in place and ready for interacting with it.
Clicking on the user name in the top right corner (R2 in this example) and then Settings, shows the following screen, where we can enable notifications for the current user:
Clicking on "Connect" application on the left sidebar shows the current connected network functions (O1 NETCONF/YANG connections that are currently established):
Since we did not start any O1 Simulators yet, the table is empty.
The current recipe starts 4 simulated Network Functions: 1 O-DU and 3 O-RUs. Only the O1 interface is being simulated.
Some changes need to be done to the original recipe, until the modifications are upstreamed to the OAM repository.
network/.env
file, three more env variables need to be added:$ git diff network/.env diff --git a/solution/network/.env b/solution/network/.env index 03600dd..0f295c0 100644 --- a/solution/network/.env +++ b/solution/network/.env @@ -57,4 +57,6 @@ VES_ENDPOINT_AUTH_METHOD=basic-auth VES_ENDPOINT_USERNAME=sample1 VES_ENDPOINT_PASSWORD=sample1 -HOST_IP=AA.BB.CC.DD +CURL_CONNECTION_TIMEOUT=20 +CURL_OPERATION_TIMEOUT=20 +HOST_IP=172.31.21.109
network/docker-compose.yml
extra environment variables need to be added, like in the diff below$ git diff network/docker-compose.yml diff --git a/solution/network/docker-compose.yml b/solution/network/docker-compose.yml index 6a29fa3..0a3401f 100755 --- a/solution/network/docker-compose.yml +++ b/solution/network/docker-compose.yml @@ -44,6 +44,9 @@ x-common_env: &common_env VES_ENDPOINT_USERNAME: ${VES_ENDPOINT_USERNAME} VES_ENDPOINT_PASSWORD: ${VES_ENDPOINT_PASSWORD} + CURL_CONNECTION_TIMEOUT: ${CURL_CONNECTION_TIMEOUT} + CURL_OPERATION_TIMEOUT: ${CURL_OPERATION_TIMEOUT} + x-du_env: &du_env # NTS_NF_STANDALONE_START_FEATURES: "datastore-populate ves-heartbeat ves-file-ready ves-pnf-registration web-cut-through" NTS_NF_STANDALONE_START_FEATURES: "datastore-populate ves-heartbeat ves-file-ready ves-pnf-registration ves-o1-pnf-registration web-cut-through"
$ docker-compose -f network/docker-compose.yml up -d WARN[0000] network default: network.external.name is deprecated. Please set network.name with external: true WARN[0000] Found orphan containers ([odlux ves-collector controller]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. [+] Running 4/4 ⠿ Container ntsim-ng-o-ru-fh-11221 Started 1.5s ⠿ Container ntsim-ng-o-ru-fh-11223 Started 1.7s ⠿ Container ntsim-ng-o-du-1122 Started 1.6s ⠿ Container ntsim-ng-o-ru-fh-11222 Started 1.3s
Because of a ves-collector
issue (the first message from a Topic is being lost), the O-DU will not be connected to the SDN Controller (the first pnfRegistration
message is lost). In order for it to connect, we need to restart it such that a new VES pnfRegistration is being triggered.
$ docker restart ntsim-ng-o-du-1122 ntsim-ng-o-du-1122
If we return to ODLUX, we should see the 4 simulated network functions connected: