---
# System prepended metadata

title: 【H Release】Near-RT RIC Deployment Guide
tags: [Winlab]

---


:::info
1. Hardware requests：
	- RAM：20G RAM
	- CPU：8 core
	- Disk：60GB
    - Ubuntu 20.04 LTS (Focal Fossa)
:::

## 1. Install the Docker, Kubernetes and Helm 3
### **1.1 Open terminate (Ctrl+Alt+T)**
### **1.2 Become root user：**
==Note：== All the commands need to be executed as root.
```javascript=
sudo -i
```
![](https://hackmd.io/_uploads/BJfsMIqKh.png)

### **1.3 Install the Dependent Tools**
```javascript=
apt-get update
apt-get install -y git vim curl net-tools openssh-server python3-pip nfs-common
```
![](https://i.imgur.com/rjEIHjr.png)
![](https://i.imgur.com/KMa8Paf.png)
### **1.4 Download the source code of RIC Platform**
```javascript=
cd ~
git clone https://gerrit.o-ran-sc.org/r/ric-plt/ric-dep -b h-release
```
URL: https://gerrit.o-ran-sc.org/r/gitweb?p=ric-plt%2Fric-dep.git;a=shortlog;h=refs%2Fheads%2Fg-release
![](https://i.imgur.com/ymYAukT.png)

### **1.5 Execute the Installation Script of the Docker, Kubernetes and Helm 3**
:::info
If you want to change the version, you should use this command:
```javascript=
cd ric-dep/bin
vim install_k8s_and_helm.sh
```
:::
```javascript=
cd ric-dep/bin
./install_k8s_and_helm.sh
```
![](https://hackmd.io/_uploads/By7GgIqFn.png)


### **1.6 Check the Status of Kubernetes deployment**
```javascript=
kubectl get pods -A
```
![](https://i.imgur.com/tvkNIJl.png)
### **1.7 Check the version of Docker, Kubernetes and Helm**
|            | version  | command         |
| ---------- | -------- | --------------- |
| Helm       | 3.5.4    | helm version    |
| Kubernetes | 1.16.0   | kubectl version |
| Kubecniv           |    0.7.5      |  kubectl version               |
| Docker     | 20.10.21 | docker version  |



## 2. Install the Near-RT RIC Platform
### **2.1 Add the ric-common templates**
==Note:== In the D and E version, 2.1 is in the `./deploy-ric-platform ../RECIPE_EXAMPLE/PLATFORM/example_recipe_oran_dawn_release.yaml` script file to install.
```javascript=
./install_common_templates_to_helm.sh
```
![](https://i.imgur.com/IcgDqOt.png)
==NOTE:== How many '`servecm not yet running. sleeping for 2 seconds`' it is depends on your download speed. Because it will wait to download [download chartmuseum](https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum).
```javascript=
./setup-ric-common-template
```
![](https://i.imgur.com/1lz0Bu2.png)

## **[2.2 Edit Deployment Configuration](https://hackmd.io/@2xIzdkQiS9K3Pfrv6tVEtA/Bkzlwdzci)**
## **2.3 Install nfs for InfluxDB**
```javascript=
kubectl create ns ricinfra
helm repo add stable https://charts.helm.sh/stable
helm install nfs-release-1 stable/nfs-server-provisioner --namespace ricinfra 
kubectl patch storageclass nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
sudo apt install nfs-common
```
## **2.4 Execute the Installation Script of Near-RT RIC**
**Find your IP of VM：**
```javascript=
ip a
```
![](https://i.imgur.com/ALgQCgF.png)
**Modify the IP of RIC and AUX：**
```javascript=
vim ~/ric-dep/RECIPE_EXAMPLE/example_recipe_oran_h_release.yaml
```
![](https://i.imgur.com/uQhKVOi.png)
**Deploy the RIC Platform：**
```javascript=
cd ~/ric-dep/bin
./install -f ../RECIPE_EXAMPLE/example_recipe_oran_h_release.yaml -c "jaegeradapter influxdb"
```
![](https://i.imgur.com/W8ifnTd.png)
### **2.5 Check the Status of Near-RT RIC deployment**
- Results similar to the output shown below indicate a complete and successful deployment, all are either **“Completed”** or **“Running”**, and that none are **“Error”**, **“Pending”**, **“Evicted”**,or **“ImagePullBackOff”**.
- The status of pods “**PodInitializing”** & **“Init”** & **“ContainerCreating”** mean that the pods are creating now, you need to wait for deploying.
```javascript=
kubectl get pods -A
```
![](https://hackmd.io/_uploads/ByHPkL5Kn.png)

- **If inflexdb2 is pending, you can refer Issues 1.**
- **If tiller is Error,you can skip it.**

## 3. Install the DMS Tool
### 3.1 Install the Chartmuseum for DMS Tool
**Customized Setting：**
```javascript=
cd ~
echo "env:
  open:
    STORAGE: local
    CONTEXT_PATH: /charts
    DISABLE_API: false
persistence:
  enabled: true
  accessMode: ReadWriteOnce
  size: 8Gi
  storageClass: nfs
service:
  type: NodePort" > chart.yaml
```
![](https://i.imgur.com/40Scs41.png)
**Install Chatmuseum：**
```javascript=
helm install r4-chartmuseum stable/chartmuseum -f chart.yaml --namespace ricinfra
```
![](https://i.imgur.com/LW5rfFD.png)

**Verify the IP and Port：**
```javascript=
export NODE_PORT=$(sudo kubectl get --namespace ricinfra -o jsonpath="{.spec.ports[0].nodePort}" services r4-chartmuseum-chartmuseum)
export NODE_IP=$(sudo kubectl get nodes --namespace ricinfra -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT/
```
![](https://i.imgur.com/lH2Nnu9.png)

### 3.2 Install the DMS tool
**Prepare source code：**
```javascript=
docker run --rm -u 0 -it -d -p 8080:8080 -e DEBUG=1 -e STORAGE=local -e STORAGE_LOCAL_ROOTDIR=/chart -v $(pwd)/charts:/charts chartmuseum/chartmuseum:latest
export CHART_REPO_URL=http://0.0.0.0:8090
git clone https://gerrit.o-ran-sc.org/r/ric-plt/appmgr -b h-release
```
![](https://i.imgur.com/uuaTdFJ.png)

**Install DMS tool：**
```javascript=
cd appmgr/xapp_orchestrater/dev/xapp_onboarder
apt-get install python3-pip
pip3 uninstall xapp_onboarder
pip3 install ./
chmod 755 /usr/local/bin/dms_cli
ls -la /usr/local/lib/python3.8
chmod -R 755 /usr/local/lib/python3.8
```
![](https://i.imgur.com/ugWMbbs.png)

## Appendix

### Issues of InfluxDB & NFS
**Issue 1：Pod is Crashbackoff**

```javascript=
Warning FailedMount 110s kubelet MountVolume.SetUp failed for volume "pvc-759e2292-6938-4b8e-b6e3-67bbf9b7b904" : mount failed: exit status 32
```

- Solution：Re-install the dependent tools
```javascript=
apt-get install -y nfs-common
```
**Issue 2：Unauthorized**

- If the xApp need to access the InfluxDB, it maybe need to login-in by using user/password
```javascript=
Error: raise InfluxDBClientError(err_msg, response.status_code) influxdb.exceptions.InfluxDBClientError: 401: {"code":"unauthorized","message":"Unauthorized"}
```
- Solution：Modify the user/password in the xApp code
Step 1：Enter the secret of InfluxDB
```javascript=
kubectl get secret -n ricplt
kubectl edit secret -n ricplt <InfluxDB secret>
```
Step 2：Decode the user/password
```javascript=
echo 'amYzOTJoZjc4MmhmOTMyaAo=' | base64 --decode
```
Step 3：Modify the InfluxDB user/password in the xApp using the decoded user/password


### Clear the k8s
https://ithelp.ithome.com.tw/articles/10262330
### Delete the pod
```javascript=
kubectl delete pod --all -n <namespace>
```

### Uninstall Near-RT RIC Platform
```javascript=
cd ~/ric-dep/bin
./uninstall
```

### Script to Deploy RIC Platform quickly
```javascript=
sudo -i
touch Deploy_RIC-Platform_H-Release.sh
chmod +x Deploy_RIC-Platform_H-Release.sh
vim Deploy_RIC-Platform_H-Release.sh
```
```javascript=
# Install the Dependent Tools
#-------------------------------------------------------------------------------
echo "------------------ Install the Dependent Tools ----------------------"
apt-get update
apt-get install -y git vim curl net-tools openssh-server python3-pip nfs-common

# Download the source code of RIC Platform
#-------------------------------------------------------------------------------
echo "------------ Download the source code of RIC Platform ---------------"
cd ~
git clone https://gerrit.o-ran-sc.org/r/ric-plt/ric-dep -b h-release

# Execute the Installation Script of the Docker, Kubernetes and Helm 3
#-------------------------------------------------------------------------------
echo "--------------Install Docker, Kubernetes and Helm 3------------------"
cd ric-dep/bin
./install_k8s_and_helm.sh

# Add the ric-common templates
#-------------------------------------------------------------------------------
echo "--------------------Install the Dependent Tools----------------------"
./install_common_templates_to_helm.sh
./setup-ric-common-template
cd ../..

# Install nfs for InfluxDB
#-------------------------------------------------------------------------------
echo "------------------Install the Dependent Tools------------------------"
kubectl create ns ricinfra
helm repo add stable https://charts.helm.sh/stable
helm install nfs-release-1 stable/nfs-server-provisioner --namespace ricinfra 
kubectl patch storageclass nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
sudo apt install nfs-common

# Deploy the RIC Platform
echo "------------------Install the Dependent Tools------------------------"
cd ~/ric-dep/bin
./install -f ../RECIPE_EXAMPLE/example_recipe_oran_h_release.yaml -c "jaegeradapter influxdb"
kubectl get pods -A
cd ../..

echo "----------wait:30s---------"
for i in 10 20 30
do
    echo "----------$i s---------"
    sleep 10
done

# check the bug of influxdb
echo "-------------------------check the influxdb--------------------------"
z=$(kubectl get pods -n ricplt | grep "influxdb" | awk '{print $3}')
if [ $z = "Running" ]
then
    echo "------->already Running"
else
    echo "------->still Pending"
    cd ~
    echo "apiVersion: v1
kind: PersistentVolume
metadata:
  name: r4-influxdb
  labels:
    name: r4-influxdb
spec:
  storageClassName: nfs
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    type: DirectoryOrCreate
    path: /mnt/ricplt-influxdb-data" > influxdb-pv.yaml

    kubectl apply -f influxdb-pv.yaml
fi

echo "----------wait:30s---------"
for i in 10 20 30
do
    echo "----------$i s---------"
    sleep 10
done

# Install the DMS Tool
echo "-------------------------Install the DMS Tool--------------------------"
cd ~
echo "env:
  open:
    STORAGE: local
    CONTEXT_PATH: /charts
    DISABLE_API: false
persistence:
  enabled: true
  accessMode: ReadWriteOnce
  size: 8Gi
  storageClass: nfs
service:
  type: NodePort" > chart.yaml

helm install r4-chartmuseum stable/chartmuseum -f chart.yaml --namespace ricinfra
export NODE_PORT=$(kubectl get --namespace ricinfra -o jsonpath="{.spec.ports[0].nodePort}" services r4-chartmuseum-chartmuseum)
export NODE_IP=$(kubectl get nodes --namespace ricinfra -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT/

docker run --rm -u 0 -it -d -p 8090:8080 -e DEBUG=1 -e STORAGE=local -e STORAGE_LOCAL_ROOTDIR=/chart -v $(pwd)/charts:/charts chartmuseum/chartmuseum:latest
export CHART_REPO_URL=http://0.0.0.0:8090
git clone https://gerrit.o-ran-sc.org/r/ric-plt/appmgr -b h-release
cd appmgr/xapp_orchestrater/dev/xapp_onboarder
apt-get install python3-pip
pip3 uninstall xapp_onboarder
pip3 install ./
chmod 755 /usr/local/bin/dms_cli
ls -la /usr/local/lib/ptyhon3.8
chmod -R 755 /usr/local/lib/python3.8
```
```javascript=
./Deploy_RIC-Platform_H-Release.sh
```
[GIT LAB](https://github.com/tobby-yuan/ric_install.git)
## Issues 
### 1. r4-influxdb-influxdb2-0 is Pending
![](https://i.imgur.com/FD17tVp.png)
:::info
**- reason**
```javascript=
kubectl describe pods -n ricplt r4-influxdb-influxdb2-0
```
![](https://i.imgur.com/WLAQAOL.png)
```javascript=
kubectl get pvc -A
```
![](https://i.imgur.com/hjOn7Ie.png)
- We can found that influxdb was pending, so its pod was pending 
```javascript=
kubectl describe pods -n ricplt r4-influxdb-influxdb2-0
```
![](https://i.imgur.com/GoBSnst.png)
- We can found that we didn't give it a volume.
```javascript=
kubectl get pv -A
```
![](https://i.imgur.com/UEAk5Ow.png)
- We can found that we really didn't give it a volume.
:::
:::success
**- solution**
```javascript=
cd ~
echo "apiVersion: v1
kind: PersistentVolume
metadata:
  name: r4-influxdb
  labels:
    name: r4-influxdb-influxdb2
spec:
  storageClassName: "nfs"
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    type: DirectoryOrCreate
    path: /mnt/ricplt-influxdb-data" > influxdb-pv.yaml

kubectl apply -f influxdb-pv.yaml
```
![](https://i.imgur.com/Xn2uAdP.png)
![](https://i.imgur.com/xEespvY.png)
![](https://i.imgur.com/3Wslf1n.png)

:::
### 2. Change the DMS Install(2023/2/2)
- It have some problem about authorized
- original
```javascript=
git clone https://gerrit.o-ran-sc.org/r/ric-plt/appmgr -b h-release
cd ~/appmgr/xapp_orchestrater/dev/xapp_onboarder
pip3 install ./
```
- Change
```javascript=
docker run --rm -u 0 -it -d -p 8090:8080 -e DEBUG=1 -e STORAGE=local -e STORAGE_LOCAL_ROOTDIR=/chart -v $(pwd)/charts:/charts chartmuseum/chartmuseum:latest
export CHART_REPO_URL=http://0.0.0.0:8090
git clone https://gerrit.o-ran-sc.org/r/ric-plt/appmgr -b h-release
cd appmgr/xapp_orchestrater/dev/xapp_onboarder
apt-get install python3-pip
pip3 uninstall xapp_onboarder
pip3 install ./
chmod 755 /usr/local/bin/dms_cli
ls -la /usr/local/lib/ptyhon3.8
chmod -R 755 /usr/local/lib/python3.8
```

### 3. Can't install docker
:::info
- When I ran this command `./install_k8s_and_helm.sh`, it appeared this error
![](https://i.imgur.com/esghmWn.png)
- Can't find this docker version 20.10.12-0ubuntu2~20.04.1
- Command ` apt-get install -y --allow-downgrades --allow-change-held-packages --allow-unauthenticated --ignore-hold docker.io=20.10.12-0ubuntu2~20.04.1`
- error
```shell
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '20.10.12-0ubuntu2~20.04.1' for 'docker.io' was not found
```
:::

:::success
- **solution**
- Install master version
```javascript=
git clone https://gerrit.o-ran-sc.org/r/ric-plt/ric-dep -b master
```
- Because the version of docker becomes 20.10.12-0ubuntu1~20.04.1 
:::


### 4. E2term fail
:::info
- If you install this [branch](https://gerrit.o-ran-sc.org/r/gitweb?p=ric-plt/ric-dep.git;a=tree;h=0ad067633243c09b6f79d80d4bc51f56867fffa1;hb=0ad067633243c09b6f79d80d4bc51f56867fffa1)(or above) and [Improve E2term's log-level](https://hackmd.io/@2xIzdkQiS9K3Pfrv6tVEtA/Bkzlwdzci#41-Modify-the-Log-Level), it will occur an error
![](https://i.imgur.com/qGjH5CZ.png)
:::
:::success
- **solution**
- Don't revise this file `vim ~/ric-dep/helm/e2term/templates/deployment.yaml`, because this branch already improve the log-level.
:::
