-
Notifications
You must be signed in to change notification settings - Fork 6
ueransim_quick
- Working OpenNebula installation, version >= 6.4
- OneFlow and OneGate for multi-node orchestration.
- Two virtual networks in your OpenNebula cluster (please refer to the architecture diagram).
- Public network to interconnect the RAN/UE with the OneKE
- Private network to interconnect the OneKE components.
The first step is to deploy the OneKE cluster that will host our 5G core.
We'll be using OneKE version 1.29, the airgapped variant. You can use Susntone interface or CLI. As an example, using the CLI the procedure will look like this:
onemarketapp export -d default 'Service OneKE 1.29 Airgapped' OneKE1.29
You'll need to wait for the images to download and be ready. All the associated resources would look like this:
> onetemplate list
ID USER GROUP NAME REGTIME
151 oneadmin oneadmin OneKE1.29-storage-2 07/22 13:52:17
150 oneadmin oneadmin OneKE1.29-master-1 07/22 13:52:17
149 oneadmin oneadmin OneKE1.29-vnf-0 07/22 13:52:17
> oneimage list
ID USER GROUP NAME DATASTORE SIZE TYPE PER STAT RVMS
38 oneadmin oneadmin OneKE1.29-storage-2-b3589b800e-1 default 10G OS No rdy 0
37 oneadmin oneadmin OneKE1.29-storage-2-63d7b78328-0 default 25G OS No rdy 0
36 oneadmin oneadmin OneKE1.29-master-1-86152b69cb-0 default 25G OS No rdy 0
35 oneadmin oneadmin OneKE1.29-vnf-0 default 2G OS No rdy 0
> oneflow-template list
ID USER GROUP NAME REGTIME
17 oneadmin oneadmin OneKE1.29 07/22 13:52:17
- Update the cardinality of the storage role of OneKE to 3
> oneflow-template update OneKE1.29
...
{
"name": "storage",
"parents": [
"vnf"
],
"cardinality": 3,
...
- Update the OneKE master/worker node
CPU_MODEL
> onetemplate update OneKE1.29-master-1
...
CPU_MODEL=[
MODEL="host-passthrough" ]
...
We'll be using longhorn persistent storage as it is required by the MongoDB pod deployed by Open5GS. Additionally, we'll need MetalLB to expose a full IP for the AMF LoadBalancer service, as this requires SCTP trasnport. The last piece of information you need is:
- Virtual Network ID of the public network (
0
in the example below) - Virtual Network ID of the OneKE private network (
1
in the example below) - An IP range from the private network for MetalLB (
192.168.150.50-192.168.150.80
in the example below). We recommend that you put this IPs on hold in the network so they are not used by any worker or storage node.
Now you can create a file with all this configuration parameters. network_values
and ONEAPP_K8S_METALLB_RANGE
attributes that needs to be updated with your own information:
$ cat >./OneKE5G-instantiate <<'EOF'
{
"name": "OneKE-5G",
"networks_values": [
{"Public": {"id": "0"}},
{"Private": {"id": "1"}}
],
"custom_attrs_values": {
"ONEAPP_VROUTER_ETH0_VIP0": "",
"ONEAPP_VROUTER_ETH1_VIP0": "",
"ONEAPP_RKE2_SUPERVISOR_EP": "ep0.eth0.vr:9345",
"ONEAPP_K8S_CONTROL_PLANE_EP": "ep0.eth0.vr:6443",
"ONEAPP_K8S_EXTRA_SANS": "localhost,127.0.0.1,ep0.eth0.vr,${vnf.TEMPLATE.CONTEXT.ETH0_IP}",
"ONEAPP_K8S_MULTUS_ENABLED": "NO",
"ONEAPP_K8S_MULTUS_CONFIG": "",
"ONEAPP_K8S_CNI_PLUGIN": "calico",
"ONEAPP_K8S_CNI_CONFIG": "",
"ONEAPP_K8S_CILIUM_RANGE": "",
"ONEAPP_K8S_METALLB_ENABLED": "YES",
"ONEAPP_K8S_METALLB_CONFIG": "",
"ONEAPP_K8S_METALLB_RANGE": "192.168.150.50-192.168.150.80",
"ONEAPP_K8S_LONGHORN_ENABLED": "YES",
"ONEAPP_STORAGE_DEVICE": "/dev/vdb",
"ONEAPP_STORAGE_FILESYSTEM": "xfs",
"ONEAPP_K8S_TRAEFIK_ENABLED": "YES",
"ONEAPP_VNF_HAPROXY_INTERFACES": "eth0",
"ONEAPP_VNF_HAPROXY_REFRESH_RATE": "30",
"ONEAPP_VNF_HAPROXY_LB0_PORT": "9345",
"ONEAPP_VNF_HAPROXY_LB1_PORT": "6443",
"ONEAPP_VNF_HAPROXY_LB2_PORT": "443",
"ONEAPP_VNF_HAPROXY_LB3_PORT": "80",
"ONEAPP_VNF_DNS_ENABLED": "YES",
"ONEAPP_VNF_DNS_INTERFACES": "eth1",
"ONEAPP_VNF_DNS_NAMESERVERS": "1.1.1.1,8.8.8.8",
"ONEAPP_VNF_NAT4_ENABLED": "YES",
"ONEAPP_VNF_NAT4_INTERFACES_OUT": "eth0",
"ONEAPP_VNF_ROUTER4_ENABLED": "YES",
"ONEAPP_VNF_ROUTER4_INTERFACES": "eth0,eth1"
}
}
EOF