Skip to content
/ kube5GC Public

This project is for deploying NCTU-5GC on kubeCORD

Notifications You must be signed in to change notification settings

sufuf3/kube5GC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kube5GC

This project is for deploying Free5GC on kubeCORD.

Table of Contents

Free5GC Components

Components

  • mongodb
  • webui
  • HSS
  • PCRF
  • AMF
  • SMF
  • UPF

Docker images

Prepare

1. Using kubeCORD deploy Kubernetes

2. Update /etc/kubernetes/kubelet.env

  1. Add --allowed-unsafe-sysctls 'kernel.msg*,net.ipv4.*,net.ipv6.*' \ into /etc/kubernetes/kubelet.env.
  2. sudo systemctl restart kubelet
  3. sudo systemctl status kubelet

3. Install NFS Server

On node-1.

sudo apt-get install -qqy nfs-kernel-server
sudo mkdir -p /nfsshare/mongodb
echo "/nfsshare *(rw,sync,no_root_squash)" | sudo tee /etc/exports
sudo exportfs -r
sudo showmount -e

4. Install helm

On node-1.

curl -L https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz > helm-v2.9.1-linux-amd64.tar.gz && tar -zxvf helm-v2.9.1-linux-amd64.tar.gz && chmod +x linux-amd64/helm && sudo mv linux-amd64/helm /usr/local/bin/helm
rm -rf /home/$USER/helm-v2.9.1-linux-amd64.tar.gz
sudo pip install yq
helm init
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

5. Network Setup

1. Config free5gc.network

sudo sh -c "cat << EOF > /etc/systemd/network/99-free5gc.netdev
[NetDev]
Name=uptun
Kind=tun
EOF"

sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd

sudo sh -c "echo 'net.ipv6.conf.uptun.disable_ipv6=0' > /etc/sysctl.d/30-free5gc.conf"
sudo sysctl -p /etc/sysctl.d/30-free5gc.conf
sudo sh -c "cat << EOF > /etc/systemd/network/99-free5gc.network
[Match]
Name=uptun
[Network]
Address=45.45.0.1/16
EOF"

2. SR-IOV serup

a. Setup VF num on SR-IOV device & create CRD

$ ip a
5: ens11f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq portid 8cea1b30da42 state UP group default qlen 1000
    link/ether 8c:ea:1b:30:da:42 brd ff:ff:ff:ff:ff:ff
    inet 192.188.2.99/24 brd 192.188.2.255 scope global ens11f3
       valid_lft forever preferred_lft forever
    inet6 fe80::8eea:1bff:fe30:da42/64 scope link
       valid_lft forever preferred_lft forever
$ echo 30 | sudo tee -a /sys/class/net/ens11f3/device/sriov_numvfs
$ kubectl createa -f deploy/crdnetwork.yaml
$ kubectl create -f deploy/sriov-crd.yaml
$ kubectl get net-attach-def
NAME                   AGE
sriov-net1             4h

b. Build and run SRIOV network device plugin

Ref: https://github.com/intel/sriov-network-device-plugin#build-and-run-sriov-network-device-plugin

$ git clone https://github.com/intel/sriov-network-device-plugin.git && cd sriov-network-device-plugin
$ make
$ make image

c. Setup /etc/pcidp/config.json

First, use lspci | grep -i Ethernet to check interface's sysfs pci address.
Then, edit /etc/pcidp/config.json as following:

{
    "resourceList":
    [
        {
            "resourceName": "sriov_net",
            "rootDevices": ["01:00.3"],
            "sriovMode": true,
            "deviceType": "netdevice"
        }
    ]
}

d. Deploy sriov-network-device-plugin on k8s

$ kubectl create -f deploy/sriovdp-deploy.yaml

e. Check

$ kubectl get node kubecord-a -o json | jq '.status.allocatable'
{
  "cpu": "31800m",
  "ephemeral-storage": "226240619760",
  "hugepages-1Gi": "8Gi",
  "intel.com/sriov_net": "30",
  "memory": "56931140Ki",
  "pods": "110"
}

Deploy free5GC

Method 1 - Using yaml

1. Create namespace

kubectl create -f deploy/nctu5GC/namespace.yaml

2. Create mongodb

  1. Update deploy/nctu5GC/mongodb/pv.yaml
sed -i "s/192.168.26.11/${NFS_SERVER_IP}/g" deploy/nctu5GC/mongodb/pv.yaml
  1. Create mongodb
kubectl create -f deploy/nctu5GC/mongodb/pv.yaml
kubectl create -f deploy/nctu5GC/mongodb/statefulset.yaml
kubectl create -f deploy/nctu5GC/mongodb/service-NP.yaml

3. Create webui

kubectl create -f deploy/nctu5GC/webui-deployment.yaml
kubectl create -f deploy/nctu5GC/webui-service-NP.yaml

PS. Using NodePort

Access NODE_IP:31727 via web browser.

以下請按照 IP 順序 deploy

4. Deploy free5gc-configmap

kubectl create -f deploy/nctu5GC/free5gc-configmap.yaml

5. Create AMF

AMF IP: 10.233.84.202

  1. Update deploy/nctu5GC/amf-freediameter-configmap.yaml https://hackmd.io/s/S1baJOeEE#Setup-AMF

  2. Deploy

kubectl create -f deploy/nctu5GC/amf-freediameter-configmap.yaml
kubectl create -f deploy/nctu5GC/amf-deployment-SRIOV.yaml

6. Create HSS

HSS IP: 10.233.84.203

  1. Update deploy/nctu5GC/hss-freediameter-configmap.yaml https://hackmd.io/s/S1baJOeEE#Setup-HSS

  2. Deploy

kubectl create -f deploy/nctu5GC/hss-nextepc-configmap.yaml
kubectl create -f deploy/nctu5GC/hss-freediameter-configmap.yaml
kubectl create -f deploy/nctu5GC/hss-service.yaml
kubectl create -f deploy/nctu5GC/hss-nextepc-deployment.yaml

7. Create SMF

SMF IP: 10.233.84.204

kubectl create -f deploy/nctu5GC/smf-freediameter-configmap.yaml
kubectl create -f deploy/nctu5GC/smf-service-NP.yaml
kubectl create -f deploy/nctu5GC/smf-deployment.yaml

8. Create PCRF

PCRF IP: 10.233.84.205

  1. Update deploy/nctu5GC/pcrf-freediameter-configmap.yaml https://hackmd.io/s/S1baJOeEE#Setup-PCRF

  2. Deploy

kubectl create -f deploy/nctu5GC/pcrf-freediameter-configmap.yaml
kubectl create -f deploy/nctu5GC/pcrf-nextepc-configmap.yaml
kubectl create -f deploy/nctu5GC/pcrf-service.yaml
kubectl create -f deploy/nctu5GC/pcrf-nextepc-deployment.yaml

9. Create UPF

UPF IP: 10.233.84.206

  1. Deploy
kubectl create -f deploy/nctu5GC/upf-deployment-SRIOV.yaml

Method 2 - Using Helm

helm install --name NAME helm-charts/free5gcservice/

Note. Debug

helm install --name NAME --dry-run --debug helm-charts/free5gcservice/

Method 3 - Using CRD

Please refer to https://github.com/sufuf3/free5gc-operator


Network

kubectl get network-attachment-definitions

Verification

$ kubectl get po -n free5gc -o wide
NAME                                       READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE
amf-deployment-587f78dc7b-vkbcf            1/1     Running   0          3h53m   10.233.84.202   kubecord-a   <none>
mongo-0                                    1/1     Running   0          2d9h    10.233.69.141   kubecord-a   <none>
nextepc-hss-deployment-77bbb7f986-wj9vf    1/1     Running   0          3h53m   10.233.84.203   kubecord-a   <none>
pcrf-nextepc-deployment-7f6c776d66-6k4b5   1/1     Running   0          3h53m   10.233.84.205   kubecord-a   <none>
smf-deployment-66d85dcd5b-dcvnt            1/1     Running   0          3h53m   10.233.84.204   kubecord-a   <none>
upf-deployment-644d8d8f6-7494d             1/1     Running   5          3h52m   10.233.84.206   kubecord-a   <none>
webui-deployment-6bcfdf7dc9-54khc          1/1     Running   0          2d9h    10.233.69.142   kubecord-a   <none>

About

This project is for deploying NCTU-5GC on kubeCORD

Resources

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published