本文目录
- 一,部署环境准备工作
- 二,下载demo要用到的docker image容器镜像
-
- 1,访问https://hub.docker.com/,注册一个docker hub的用户名
- 2,下载部署OAI核心网所需要的容器镜像
- 三,安装docker-compose
- 四,下载yaml文件
- 五,配置Linux的报文转发策略
- 六,开始部署核心网
OAI 5G demo是OAI官方提供的演示用部署,基于此部署方案,你可以学习并修改设计出你自己想要的部署方案。本文的目标是只要你会LINUX的基本操作,就可以手把手的带你成功部署出OAI-demo,并提供一个基于ubuntu的OAI一键部署脚本代码。
只要你有一台主机或者一台虚拟机,你就可以跟着我们开始部署了。
一,部署环境准备工作
在本章中,你可以学习到OAI-demo演示方案的部署架构,以及开始部署前要准备好的软件环境,包括 docker, python等种种基础软件的安装。
见:部署OAI软件前的准备工作
二,下载demo要用到的docker image容器镜像
1,访问https://hub.docker.com/,注册一个docker hub的用户名
2,下载部署OAI核心网所需要的容器镜像
- 用上面注册的用户名登入
sudo docker login
- 准备下载镜像用的脚本文件
将下面代码用文件文件的方式在当前用户的用户目录下存成downloadimage.sh文件
#!/bin/bash
docker pull oaisoftwarealliance/oai-amf:v1.5.0
docker pull oaisoftwarealliance/oai-nrf:v1.5.0
docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
docker pull oaisoftwarealliance/oai-smf:v1.5.0
docker pull oaisoftwarealliance/oai-udr:v1.5.0
docker pull oaisoftwarealliance/oai-udm:v1.5.0
docker pull oaisoftwarealliance/oai-ausf:v1.5.0
docker pull oaisoftwarealliance/oai-upf-vpp:v1.5.0
docker pull oaisoftwarealliance/oai-nssf:v1.5.0
docker pull oaisoftwarealliance/oai-pcf:v1.5.0
docker pull oaisoftwarealliance/oai-nef:v1.5.0
# Utility image to generate traffic
docker pull oaisoftwarealliance/trf-gen-cn5g:latest
-
下载部署oai-demo要用到的所有镜像文件
用以下命令修改成可执行文件。
sudo chmod +x ./downloadimage.sh
然后输入以下命令,下载部署oai-demo要用到的所有镜像文件。
sudo ./downloadimage.sh
等待全部下载完成后,支行docker logout退出登入状态
sudo docker logout
- 查看是不是所有镜像都已经下载成功
sudo docker images
三,安装docker-compose
docker-compose是一个用来部署复杂的应用程序的工具。一个使用Docker容器来部署的应用程序,通常由一个或者多个容器组成。Compose 通过一个配置文件(yaml文件)来管理多个Docker容器,在配置文件中,各个容器通过services来定义,使用docker-compose脚本来启动,停止和重启应用程序以及应用中的各个服务及其所依赖的服务的容器,给用户提供了一个非常易用方便的docker容器的部署工具。
sudo apt install docker-compose
输入
sudo docker-compose --version
能正常显示当前docker-compose的版本号,则说明安装成功。
四,下载yaml文件
上一节我们提到docker-compose是通过yaml文件来部署docker容器的,所以接下来,我们要从oai主页下载定义了oai-demo部署的yaml文件。docker-compose-mini-nrf.yaml, 点击下载则可。
五,配置Linux的报文转发策略
Linux默认是不转发报文的,即每个网口卡只接收发送给网卡自己的IP地址的报文,发给其它IP地址的报文收到后,会被网口卡丢弃,而多全docker容器之间的报文是通过虚拟出来的Linux 网桥进行通信的,网桥对应的NIC卡是没有对外通信的接口的,所以需要借用LINIX的物理网卡进行通信,这就要求LINUX要打开IP报文转发的功能
sudo sysctl net.ipv4.conf.all.forwarding=1
sudo iptables -P FORWARD ACCEPT
六,开始部署核心网
- 下载部署用脚本文件
- 将下载下来的core-network.py和docker-compose-mini-nrf.yaml都放在home目录下
输入
sudo python3 ./core-network.py --type start-mini --scenario 1
在这个过程中,会去下载mysql8.0的容器镜像,依赖于网络的情况,需要等待一会。等待脚本执行完毕后,oai-demo就部署成功了。
运行成功后能看到如下打印:
xxx@xxx-pc:~$ sudo python3 ./core-network.py --type start-mini --scenario 1
[2023-02-19 17:17:13,204] root:DEBUG: Starting 5gcn components... Please wait....
[2023-02-19 17:17:13,458] root:DEBUG: docker-compose -f docker-compose-mini-nrf.yaml up -d
Creating network "demo-oai-public-net" with driver "bridge"
Creating mysql ... done
Creating oai-nrf ... done
Creating oai-ext-dn ... done
Creating oai-amf ... done
Creating oai-smf ... done
Creating oai-spgwu ... done
[2023-02-19 17:18:25,692] root:DEBUG: OAI 5G Core network started, checking the health status of the containers... takes few secs....
[2023-02-19 17:18:25,692] root:DEBUG: docker-compose -f docker-compose-mini-nrf.yaml ps -a
[2023-02-19 17:18:39,417] root:DEBUG: All components are healthy, please see below for more details....
Name Command State Ports
-----------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
oai-amf python3 /openair-amf/bin/e ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp
oai-ext-dn /bin/bash -c ip route add ... Up (healthy)
oai-nrf python3 /openair-nrf/bin/e ... Up (healthy) 80/tcp, 9090/tcp
oai-smf python3 /openair-smf/bin/e ... Up (healthy) 80/tcp, 8080/tcp, 8805/udp
oai-spgwu python3 /openair-spgwu-tin ... Up (healthy) 2152/udp, 8805/udp
[2023-02-19 17:18:39,417] root:DEBUG: Checking if the containers are configured....
[2023-02-19 17:18:39,417] root:DEBUG: Checking if AMF, SMF and UPF registered with nrf core network....
[2023-02-19 17:18:39,417] root:DEBUG: curl -s -X GET http://192.168.70.130/nnrf-nfm/v1/nf-instances?nf-type="AMF" | grep -o "192.168.70.132"
192.168.70.132
[2023-02-19 17:18:39,429] root:DEBUG: curl -s -X GET http://192.168.70.130/nnrf-nfm/v1/nf-instances?nf-type="SMF" | grep -o "192.168.70.133"
192.168.70.133
[2023-02-19 17:18:39,436] root:DEBUG: curl -s -X GET http://192.168.70.130/nnrf-nfm/v1/nf-instances?nf-type="UPF" | grep -o "192.168.70.134"
192.168.70.134
[2023-02-19 17:18:39,443] root:DEBUG: AMF, SMF and UPF are registered to NRF....
[2023-02-19 17:18:39,443] root:DEBUG: Checking if SMF is able to connect with UPF....
[2023-02-19 17:18:39,549] root:DEBUG: UPF receiving heathbeats from SMF....
[2023-02-19 17:18:39,549] root:DEBUG: OAI 5G Core network is configured and healthy....
我们可以用以下命令来查看当前正在支行的docker容器。
sudo docker ps
xxx@xxx-pc:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c72bbae8176 oaisoftwarealliance/oai-spgwu-tiny:v1.5.0 "python3 /openair-sp…" 14 minutes ago Up 14 minutes (healthy) 2152/udp, 8805/udp oai-spgwu
76b50126b5d6 oaisoftwarealliance/oai-smf:v1.5.0 "python3 /openair-sm…" 14 minutes ago Up 14 minutes (healthy) 80/tcp, 8080/tcp, 8805/udp oai-smf
3ddf5542a739 oaisoftwarealliance/oai-amf:v1.5.0 "python3 /openair-am…" 14 minutes ago Up 14 minutes (healthy) 80/tcp, 9090/tcp, 38412/sctp oai-amf
f26293b8c718 oaisoftwarealliance/trf-gen-cn5g:latest "/bin/bash -c ' ip r…" 14 minutes ago Up 14 minutes (healthy) oai-ext-dn
40c652169364 oaisoftwarealliance/oai-nrf:v1.5.0 "python3 /openair-nr…" 14 minutes ago Up 14 minutes (healthy) 80/tcp, 9090/tcp oai-nrf
5397809d694c mysql:8.0 "docker-entrypoint.s…" 14 minutes ago Up 14 minutes (healthy) 3306/tcp, 33060/tcp mysql