OpenAirInterface 5G Core Network Function Topology for Nephio R3 |
This repository contains Kpt packages and package variants for OAI operators and network functions. Designed for Nephio release 3.
NOTICE
All the files are published under BSD 3-Clause License and the yaml definations provided by nephio.
Git repository for OAI Operators --> https://gitlab.eurecom.fr/development/oai-operators
Repository structure is below
.
├── database
├── docs
│ └── images
├── oai-amf
├── oai-ausf
├── oai-nrf
├── oai-cp-operators
│ ├── crds
│ └── operator
├── oai-up-operators
│ ├── crds
│ └── operator
├── oai-repository
├── oai-smf
├── oai-udm
├── oai-udr
├── oai-upf-edge
├── package-variant
└── package-variant Package variant for all nfs, database and operator
The package-variants are designed to deploy Nephio R3 deployment.
- Make sure that you have a running core, core and edge cluster topology as defined in nephio exercise.
git clone https://github.com/OPENAIRINTERFACE/oai-packages.git
# IF NEEDED
git checkout <branch>
cd oai-packages
kpt live init oai-repository
kpt live apply oai-repository
The output is similar to:
installing inventory ResourceGroup CRD.
inventory update started
inventory update finished
apply phase started
repository.config.porch.kpt.dev/oai-packages apply successful
apply phase finished
reconcile phase started
repository.config.porch.kpt.dev/oai-packages reconcile pending
repository.config.porch.kpt.dev/oai-packages reconcile successful
reconcile phase finished
inventory update started
inventory update finished
apply result: 1 attempted, 1 successful, 0 skipped, 0 failed
reconcile result: 1 attempted, 1 successful, 0 skipped, 0 failed, 0 timed out
To verify the repository is on-boarded
kubectl get repositories | grep oai-packages
The output is similar to:
NAME TYPE CONTENT DEPLOYMENT READY ADDRESS
oai-core-packages git Package false True https://github.com/OPENAIRINTERFACE/oai-packages
Now start deploying the core network function package variant starting with database.
- UDR requires that the database is running
- All AMF, SMF, UDR, UDM, AUSF will wait for NRF container to be healthy
kubectl apply -f package-variant/database.yaml
The output is similar to:
packagevariantset.config.porch.kpt.dev/core-oai-database created
After couple of seconds you will see database pod in core cluster in oai-core
namespace
kubectl get pods -n oai-core --context core-admin@core
The output is similar to:
NAME READY STATUS RESTARTS AGE
mysql-5c6cb749bc-nsdsp 1/1 Running 0 47s
kubectl apply -f package-variant/operators-cp.yaml
kubectl apply -f package-variant/operators-up.yaml
The output is similar to:
packagevariant.config.porch.kpt.dev/oai-cp-operators created
packagevariant.config.porch.kpt.dev/oai-up-operators created
After couple of mins oai-operator package will be in main
branch of gitea Core and Edge repository. Core network control plane operators will be in Core cluster and user plane in Edge cluster.
kubectl get pods -n oai-cn-operators --context core-admin@core
kubectl get pods -n oai-cn-operators --context edge-admin@edge
The output is similar to:
## control plane
NAME READY STATUS RESTARTS AGE
oai-amf-controller-55dfbf8c4-9qdl4 1/1 Running 0 2m24s
oai-ausf-controller-769d64999f-28ntm 1/1 Running 0 2m24s
oai-nrf-controller-67f556bf75-8svd5 1/1 Running 0 2m24s
oai-smf-controller-5b6db9f5cb-klfsw 1/1 Running 0 2m24s
oai-udm-controller-867847d4cb-qdrzl 1/1 Running 0 2m24s
oai-udr-controller-764f4bfdb9-zw622 1/1 Running 0 2m24s
## user plane
NAME READY STATUS RESTARTS AGE
oai-upf-controller-75cbc869cb-zchjl 1/1 Running 0 11s
Deploy control plane network functions AMF, SMF, NRF, UDR, UDM, AUSF
kubectl apply -f package-variant/nrf.yaml
kubectl apply -f package-variant/udm.yaml
kubectl apply -f package-variant/udr.yaml
kubectl apply -f package-variant/ausf.yaml
kubectl apply -f package-variant/amf.yaml
kubectl apply -f package-variant/smf.yaml
kubectl apply -f package-variant/upf-edge.yaml
In around 6-7 mins you will see all the control plane NFs in oai-core
namespace in core cluster.
kubectl get pods -n oai-core --context core-admin@core
The output is similar to:
NAME READY STATUS RESTARTS AGE
amf-core-5667d55644-nkthg 1/1 Running 0 85s
ausf-core-77867547bb-vl92j 1/1 Running 0 85s
mysql-5c6cb749bc-hn26d 1/1 Running 0 15m
nrf-core-7c79d988f5-lszwk 1/1 Running 0 85s
smf-core-5966dfd454-fc484 1/1 Running 0 82s
udm-core-56f78c9c7c-44556 1/1 Running 0 85s
udr-core-6f685c97db-2vrb7 1/1 Running 0 85s
In few mins you will see upf instances in oai-core
namespace in edge cluster respectively.
kubectl get pods -n oai-core --context edge-admin@edge
The output is similar to:
NAME READY STATUS RESTARTS AGE
upf-edge-696976df64-gwn42 1/1 Running 0 42m
It is really important that the PFCP session is established between SMF and UPF. If there is no PFCP session then there is no point in moving forward. To check the session you have to read the logs of SMF or UPF.
kubectl logs -n oai-core <edge-upf-pod-name> --context edge-admin@edge | grep 'Received SX HEARTBEAT REQUEST' | wc -l
The output is similar to (any value more than one means that the session is established successfully):
26
In case you don't see a session the mostly probably it is a networking issue in the setup and UPF is not able to reach the SMF n4 ip-address. To check this we suggest that you go inside the SMF pod and install tcpdump
and ping n4
ip-address of UPF.
To deploy the RAN network functions you can follow the steps from the Nephio documentation.
In a general way, anybody who is willing can contribute on any part of the code in any network component.
Contributions can be simple bugfixes, advices and remarks on the design, architecture, coding/implementation.
To know more about how to contribute you can follow the instructions in CONTRIBUTING.md