Skip to content

I have created this repository just to help the people who are trying to deploy the free5gc network using Kubernetes

Notifications You must be signed in to change notification settings

ssdumbre/free5gc_deployment_using_microk8s

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 

Repository files navigation

free5gc_deployment_using_microk8s

I have created this repository to help the people who are trying to deploy the free5gc network using Kubernetes.

Step by step procedure to create free5gc network using Kubernetes

  1. Download & install Oracle Virtual Box from the following link : https://www.virtualbox.org/wiki/Downloads

  2. Create a VM with following specifications : image

  3. Download and install Ubuntu on the above VM (Link to download VM -> https://ubuntu.com/download/desktop: ubuntu-22.04.2-desktop-amd64)

  4. Clone the repository for gtp5g - 5G compatible GTP kernel module from : https://github.com/free5gc/gtp5g

Compile :

git clone https://github.com/free5gc/gtp5g.git && cd gtp5g make clean && make

Install kernel module (Install the module to the system and load automatically at boot) :

sudo make install

  1. Install the required packages for user-plane :

sudo apt -y install git gcc g++ cmake autoconf libtool pkg-config libmnl-dev libyaml-dev

  1. Install microk8s with the help of following commands:

sudo snap install microk8s --classic sudo snap list newgrp microk8s sudo usermod -a -G microk8s <userid_using_microk8s> sudo chown -f -R <userid_using_microk8s> ~/.kube

  1. Install the command line tool for microk8s i.e., nothing but kubectl with the help of following commands:

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

chmod +x kubectl

sudo mv kubectl /usr/local/bin/

  1. Install helm (The Package Manager to install free5gc helm chart for the ue , access and core network) with the help of following commands:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

chmod 700 get_helm.sh

./get_helm.sh

  1. Start a single-node cluster and enable Multus-CNI

microk8s disable ha-cluster --force

microk8s enable dns ingress dashboard storage community helm3

microk8s enable multus

  1. Add & pull the repositories of free5gc & ueramsim using below Helm Commands :

cd /root/ ; mkdir kubedata

mkdir /root/5gc ; cd /root/5gc

helm repo add towards5gs 'https://raw.githubusercontent.com/Orange-OpenSource/towards5gs-helm/main/repo/'

helm repo update

helm search repo

helm pull towards5gs/free5gc; helm pull towards5gs/ueransim

  1. Create a persistent volume :

cd /root/5gc/

vi pv.yaml


apiVersion: v1 kind: PersistentVolume metadata: name: example-local-pv9 labels: project: free5gc spec: capacity: storage: 8Gi accessModes:

  • ReadWriteOnce persistentVolumeReclaimPolicy: Retain local: path: /root/kubedata nodeAffinity: required: nodeSelectorTerms:
    • matchExpressions:
      • key: kubernetes.io/hostname operator: In values:
  1. Check the physical network interface on Kubernetes node & if the names of network interfaces are different from eth0 and eth1 then we will have to apply the Networks configuration as mentioned on (https://github.com/Orange-OpenSource/towards5gs-helm/tree/main/charts/free5gc#networks-configuration)

Use ip addr command to check the physical network interface

root@______:~/5gc# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

   valid_lft forever preferred_lft forever

inet6 ::1/128 scope host 

   valid_lft forever preferred_lft forever

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

link/ether 08:00:27:b5:20:f4 brd ff:ff:ff:ff:ff:ff

inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3

   valid_lft 84360sec preferred_lft 84360sec

inet6 fe80::5b3a:afa8:91b7:6d60/64 scope link noprefixroute 

   valid_lft forever preferred_lft forever

As you can see from the above output of ip addr command the name of the physical network interface is different from eth0 i.e., enp0s3 so I will make the necessary configuration changes into the network.

Enable the promiscous mode [In a network, promiscuous mode allows a network device to intercept and read each network packet that arrives]on this interface by the command: sudo ip link set enp0s3 promisc on

Deploy the Helm chart for free5GC’s core network components as given below : a. Create a namespace for free5gc:

root@______:~/5gc# microk8s kubectl create ns free5gc

root@______:~/5gc# microk8s kubectl get ns -n --all

b. Deploy the helm chart using following command:

root@______:~/5gc# microk8s helm -n free5gc install free5gc-core towards5gs/free5gc --set global.n2network.masterIf=enp0s3,global.n3network.masterIf=enp0s3,global.n4network.masterIf=enp0s3,global.n6network.masterIf=enp0s3,global.n9network.masterIf=enp0s3,global.n6network.subnetIP=10.0.2.0,global.n6network.gatewayIP=10.0.2.1,global.n6network.cidr=24,free5gc-upf.upf.n6if.ipAddress=10.0.2.14,global.n2network.type=macvlan,global.n3network.type=macvlan,global.n4network.type=macvlan,global.n6network.type=macvlan,global.n9network.type=macvlan

Check if the free5gc core network pods are up and running or not by using following command :

root@______:# microk8s kubectl get pods --all-namespaces

References:

  1. https://github.com/Orange-OpenSource/towards5gs-helm/blob/main/docs/demo/Setup-free5gc-and-test-with-UERANSIM.md#networks-configuration
  2. https://github.com/Orange-OpenSource/towards5gs-helm/tree/main/charts/free5gc#networks-configuration
  3. https://github.com/devopsjourney23/free5gcdemo/blob/master/README.md
  4. https://hackmd.io/@haidinhtuan/ryRuKdEI3
  5. https://medium.com/rahasak/deploying-5g-core-network-with-free5gc-kubernets-and-helm-charts-29741cea3922

***** Note : I would like to thank the github community to help me create open-source free5gc network with the help of Kubernetes *****

About

I have created this repository just to help the people who are trying to deploy the free5gc network using Kubernetes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published