Skip to content

ueransim_quick

Ruben S. Montero edited this page Jul 23, 2024 · 5 revisions

Requirements

  • 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.

Deploy OneKE cluster

The first step is to deploy the OneKE cluster that will host our 5G core.

Download OneKE from Marketplace

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 OneFlow and VM templates

  • 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" ]
...

Instantiate OneKE

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. ⚠️ Note 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