Install CDN charts
This page shows how to install CDN Helm charts which include the CDN-Local chart and the CDN-Remote chart.
Preliminaries
In order to deploy CDN Helm charts, there are following preliminaries:
- The Kubernetes cluster should be able to use SR-IOV CNI, since the CDN-Local Helm chart requires SR-IOV.
- Before installing CDN Helm charts, the OMEC data plane should be installed.
Multi-cluster & single-cluster environments
The CDN in COMAC release supports both multi-cluster and single-cluster environments.
Installing CDN Helm charts in multi-cluster environment
It assumes that there are multiple Kubernetes clusters: (i) One is an edge cluster and (ii) the others are central clusters. CDN-Local Helm chart will be deployed on the edge cluster, whereas CDN-Remote Helm chart will be installed on the central clusters. Like OMEC installation, use --kube-context
option when installing each chart. See here how to configure access to multiple Kubernetes cluster.
1. Add CORD Helm chart repository on edge and central clusters
helm repo add cord https://charts.opencord.org
helm repo update
2. Deploy CDN-Remote
in each central cluster
Deploy CDN-Remote Helm chart with the command:
helm install cord/cdn-remote \
--kube-context central \
--namespace omec \
--name cdn-remote
3. Make cdn_var.yaml
file in the edge cluster
Next, make cdn_var.yaml
file which includes information of CDN-Remotes. For example, if there is two central clusters which operate a CDN-Remote for each, we can write cdn_var.yaml
like below:
config:
cdnRemotes:
- name: remote-1
ip: 10.90.0.131 # One of the central cluster node IP address
port: 30935
streams: # Video streams from CDN-Remote
- name: 360p
value: 360
- name: 480p
value: 480
- name: 720p
value: 720
- name: remote-2
ip: 10.90.1.131 # One of the central cluster node IP address
port: 30935
streams: # Video streams from CDN-Remote
- name: 360p
value: 360
- name: 480p
value: 480
- name: 720p
value: 720
4. Deploy CDN-Local
in the edge cluster
Deploy CDN-Local Helm chart with the following command:
helm install cord/cdn-local \
--kube-context edge \
--namespace omec \
--name cdn-local \
--values /path/to/cdn_var.yaml
Installing CDN Helm charts in single-cluster environment
This environment has a single cluster which will have both CDN-Local and CDN-Remote, simultaneously.
1. Add CORD Helm chart repository on the cluster
helm repo add cord https://charts.opencord.org
helm repo update
2. Deploy CDN-Remote
in the cluster
Deploy CDN-Remote Helm chart with the command:
helm install cord/cdn-remote \
--namespace omec \
--name cdn-remote
3. Make cdn_var.yaml
file in the cluster
In the cluster, make cdn_var.yaml
file which includes information of CDN-Remote. Since each cluster has a single CDN-Remote, cdn_var.yaml
file has information of only single CDN-Remote:
config:
cdnRemotes:
- name: remote-1
ip: 10.90.0.131 # One of the cluster node IP address
port: 30935
streams: # Video streams from CDN-Remote
- name: 360p
value: 360
- name: 480p
value: 480
- name: 720p
value: 720
4. Deploy CDN-Local
in the cluster
Deploy CDN-Local Helm chart with the following command:
helm install cord/cdn-local \
--namespace omec \
--name cdn-local \
--values /path/to/cdn_var.yaml
Verification
CDN-Local deployment
Once CDN-Local Helm was deployed, run the following command on the cluster where CDN-Local is running:
kubectl get pods -n omec
Then, there is a nginx
POD.
NAME READY STATUS RESTARTS AGE
nginx-0 1/1 Running 0 100m
CDN-Remote deployment
Likewise, run the following command on the cluster where CDN-Remote is running:
kubectl get pods -n omec
If CDN-Remote is running, there are two PODs, ant-media
and video-archive
.
NAME READY STATUS RESTARTS AGE
ant-media-0 1/1 Running 0 100m
video-archive-0 3/3 Running 0 100m
Ant Media UI
If CDN-Remote is running without any problem, users can access Ant Media Web UI:
http://<any computing node IP address in the cluster which has CDN-Remote>:32080
NOTE: Sometimes, this Web UI will response, belatedly. Then, please refresh again.
How to play video?
In order to play video, UEs should be connected with OMEC EPC through eNodeB (eNB). Also, UEs should contain a video player application like VLC or MXPlayer.
Play cached video files
Turn on the video player application and go to video streaming
menu. Then, write the following URLs.
- To play 360p cached video file: rtmp://<NGINX IP address>:1935/l/360.mp4
- To play 480p cached video file: rtmp://<NGINX IP address>:1935/l/480.mp4
- To play 720p cached video file: rtmp://<NGINX IP address>:1935/l/720.mp4
NOTE: SPGW-U IP address should be 13.1.1.253 by default.
Play remote video files
Turn on the video player application and go to video streaming
menu. Then, write the following URLs.
- To Play 360p video file in CDN-Remote: rtmp://<NGINX IP address>:1935/r/<CDN-Remote name>/360
- To Play 480p video file in CDN-Remote: rtmp://<NGINX IP address>:1935/r/<CDN-Remote name>/480
- To Play 720p video file in CDN-Remote: rtmp://<NGINX IP address>:1935/r/<CDN-Remote name>/720
NOTE: NGINX IP address should be 13.1.1.253 by default. Also, CDN-Remote name is defined in cdn_var.yaml
file which was used to deploy the CDN-Local Helm chart before. In the above example cdn_var.yaml
file, one of CDN-Remote name is remote-1.
Troubleshooting
nginx-0
POD in Pending status, infinitely
When nginx-0
POD is in Pending
status for a long time, it would be SR-IOV
problem. To check whether this is SR-IOV
problem or not, please run the following command on the cluster on which CDN-Local is running:
$ kubectl config use-context edge # run if nginx-0 is running in the multi-cluster environment
$ kubectl describe pod nginx-0 -n omec
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 18s (x2 over 18s) default-scheduler 0/3 nodes are available: 3 Insufficient intel.com/sriov_netdevice.
The warning message at the bottom means that the nginx-0
POD requires SR-IOV NetDevice VFs but there is no sufficient VFs now in any computing machine.
Then, please check whether sriov-device-plugin
PODs are running or not:
$ kubectl config use-context edge # run if nginx-0 is running in the multi-cluster environment
$ kubectl get pods -n omec | grep sriov-device-plugin
sriov-device-plugin-k456h 1/1 Running 0 1h
sriov-device-plugin-mmrzf 1/1 Running 0 1h
sriov-device-plugin-s5h9d 1/1 Running 0 1h
NOTE: If the OMEC data plane was deployed before, sriov-device-plugin
should be running in the edge cluster. In addition, the number of sriov-device-plugin
is equal to the number of computing nodes in the edge cluster. The reason is that each computing node in the edge cluster should have a single sriov-device-plugin
POD.
If sriov-device-plugin
POD is not running on each computing node, it means that OMEC-data-plane
is deployed unsuccessfully or even not deployed. If so, please redeploy OMEC again.
However, if there is an sriov-device-plugin
on each computing node, please run the following command to check whether SR-IOV NetDevice is ready or not:
$ kubectl config use-context edge # run if nginx-0 is running in the multi-cluster environment
$ kubectl get nodes -o json | jq '.items[].status.allocatable'
{
"cpu": "39800m",
"ephemeral-storage": "1062296854818",
"hugepages-1Gi": "32Gi",
"intel.com/sriov_netdevice": "0",
"intel.com/sriov_vfio": "0",
"memory": "162611552Ki",
"pods": "110"
}
{
"cpu": "39800m",
"ephemeral-storage": "1062296854818",
"hugepages-1Gi": "32Gi",
"intel.com/sriov_netdevice": "8", <- Here is the number of SR-IOV NetDevice VFs
"intel.com/sriov_vfio": "0",
"memory": "162611568Ki",
"pods": "110"
}
{
"cpu": "39800m",
"ephemeral-storage": "1062296854818",
"hugepages-1Gi": "32Gi",
"intel.com/sriov_netdevice": "0",
"intel.com/sriov_vfio": "64",
"memory": "162611568Ki",
"pods": "110"
}
When the number of SR-IOV NetDevice VFs is less than 3, then SR-IOV Netdevice is unsuccessfully set. Please run the following command on the machine which has intel.com/sriov_vfio
as 0 (in this case, the first machine or the second machine; not the third machine):
echo '8' > /sys/class/net/<interface name like eth2>/device/sriov_numvfs
See here to set SR-IOV in detail.
Other problem?
Please tell woojoong.kim
on CORD
Slack channel if you see any problem.