--- tags: 套件部署, 5G O-RAN GA: UA-79596126-4 title: <5G O-RAN 筆記1>O-RAN SMO管理平台 --- {%hackmd BJrTq20hE %} ###### 作者: 史啜林 ###### 撰寫日期:2021/11/24 # <5G O-RAN 筆記1> O-RAN SMO管理平台 為因應計畫要用的 Demo,先把我做過的事情紀錄一下 部署架構如下圖所示 ![](https://i.imgur.com/wZhdDs7.jpg) ### 實驗環境 - Ubuntu 18.04 - docker 20.10.7 - kubectl 1.16.0 - kubeadm 1.16.0 - kubelet 1.16.0 遇到問題別緊張,最下面有個「Debug Space」,可以多去看看,如果出現沒有在這上面的問題的話,再去請教 Google 大師吧~! ### Step 1: 取得 O-RAN 官方 github 內容 O-RAN 官方提供的 script 包含了 k8s 的安裝,所以其實可以不用先手動安裝 k8s,但如果已經有的話,你可以減少很多步驟,很棒~! 以下範例我們用 B 版本示範與說明 (我在寫得時候已經更新到 D 了) ```bash $ cd /home/user $ sudo -i $ git clone http://gerrit.o-ran-sc.org/r/it/dep -b bronze $ cd dep $ git submodule update --init --recursive --remote ``` ### Step 2: 產生 cloud-init 腳本 此步驟將生成一個腳本,該腳本將設置單節點 Kubernetes 集群以安裝 SMO 元件。 :::info :bulb: **注意**: 由於 O-RAN SC Bronze SMO 是來自 ONAP Frankfurt版本的元件,因此基礎設施軟件堆棧(Docker、Kubernetes 和 Helm)版本符合 ONAP 部署的要求。 ::: ```bash ## 將版本需求設定調整為Frankfurt $ cd tools/k8s/etc $ vim infra.rc ``` ![](https://i.imgur.com/gMpJpRu.png) 此時即可生成部署K8S叢集腳本 ```bash $ cd ../bin $ ./gen-cloud-init.sh $ ls 產生之腳本 「k8s-1node-cloud-init-k_1_15-h_2_16-d_18_09.sh」 ``` ![](https://i.imgur.com/tbkIH0Z.png) ### Step 3: 安裝Kubernetes、Helm、Docker等 官方提供的腳本中有一些問題,在部署時需要注意所有套件是否正常安裝完成(尤其是docker) 這裡主要是將腳本指令中的docker進行手動安裝 :::info :bulb: **Hint**: 官方標準是要 docker 18.09.7 版本,但超過 18 以上的也 OK,因此提出兩種解決方法: 1. 照著下面步驟裝指定的 docker 版本 2. 將上面修改的「infra.rc」中的 INFRA_DOCKER_VERSION="18.09.7" 註解掉即可載預設最新的版本 ::: ```bash $ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" $ sudo apt-get update $ apt-cache madison docker-ce $ sudo apt-get install docker-ce=5:18.09.7~3-0~ubuntu-bionic ``` ![](https://i.imgur.com/sVIlJtk.png) 修改腳本「k8s-1node-cloud-init-k_1_15-h_2_16-d_18_09.sh」helm內容 ```yaml=307 helm init --stable-repo-url=https://charts.helm.sh/stable ``` ![](https://i.imgur.com/EzoVza1.png) 完成上述修改後即可開始執行腳本 ```bash $ ./k8s-1node-cloud-init-k_1_15-h_2_16-d_18_09.sh ``` 完成後主機將進行重啟,重啟完畢後便可檢查是否有啟動9個pod ```bash $ sudo su $ kubectl get pods --all-namespaces ``` ![](https://i.imgur.com/Vg9IRRz.png) ### Step 4 : 安裝SMO相關套件 部署SMO相關套件,包含nonrtric、onap、ricaux,安裝順序為 onap → nonrtric → ricaux #### ONAP 安裝 前往資料夾並修改install腳本 ```bash $ cd /home/<user>/dep/smo/bin $ vim install ``` ![](https://i.imgur.com/XzhoXdq.png) 若是第一次執行則使用以下指令 ```bash $ ./install initlocalrepo ``` 若不是則使用以下指令 ```bash $ ./install ``` **這過程會很久很漫長,請耐心等候** 當執行完成後,腳本**在安裝 nonrtric 會出現問題**(0.0),此時便需要跳脫腳本,進行手動安裝 #### NONRTRIC 安裝 根據自己 Near-RT RIC 主機 IP 為何,修改「example_recipe.yaml」的「baseUrl」 (若無,則不需要管此處的 IP addresses) ```bash $ vim dep/nonrtric/RECIPE_EXAMPLE/example_recipe.yaml ``` ![](https://i.imgur.com/a4LKiHi.png) 運行其安裝腳本 ```bash $ cd dep/bin $ ./deploy-nonrtric -f /home/oprueba/oran/dep/nonrtric/RECIPE_EXAMPLE/example_recipe.yaml ``` 等待其腳本完成,應啟動如下Pod ![](https://i.imgur.com/QMRzq0p.png) #### RICAUX 安裝 首先建立namespace ```bash $ kubectl create ns ricinfra ``` 接著取得相依套件 ```bash $ cd ~/dep/ric-aux/helm/infrastructure $ helm dep update ``` 開始進行安裝部署 ```bash $ cd ../ $ helm install -f ~/dep/RECIPE_EXAMPLE/AUX/example_recipe.yaml --name cherry-infra --namespace ricaux ./infrastructure ``` 完成後可以先透過指令查詢是否成功,若不成功可以先進行修正 ```bash $ kubectl get all -n ricaux ``` ![](https://i.imgur.com/SpAtByp.png) 確認沒問題後,可以進行VES的安裝 ```bash $ cd ves/ $ helm dep update $ cd ../ $ helm install -f ~/dep/RECIPE_EXAMPLE/AUX/example_recipe.yaml --name cherry-ves --namespace ricaux ./ves ``` 當完成後就可以查看所有pod的狀態 ```bash $ kubectl get pod -A ``` ![](https://i.imgur.com/1KrbWId.png) 以上,SMO主機已部署完成 --- ### Debug Space 1. 在執行 helm init 遇到的問題 ![](https://i.imgur.com/gvx9JO5.png) 解決方式,[參考網址](https://stackoverflow.com/questions/65407317/helm-init-failed-is-not-a-valid-chart-repository-or-cannot-be-reached-failed-to) 在 init 後面加上如下指令即可 ```bash $ helm init --stable-repo-url=https://charts.helm.sh/stable ``` ![](https://i.imgur.com/2SFA1uK.png) 2. 執行 helm deploy 時跳出不存在deploy指令時 ![](https://i.imgur.com/qDPuwFb.png) 代表helm沒有deploy的指令,要去plugin相關套件才可,[參考網址](https://wiki.onap.org/display/DW/OOM+Helm+(un)Deploy+plugins) ```bash $ git clone https://gerrit.onap.org/r/oom.git $ cp -R oom/kubernetes/helm/plugins/ ~/.helm/ ``` 複製完成後,再次輸入helm指令便可看到deploy命令,完成後進行intall腳本繼續安裝 3. 執行 install script 時,出現沒有 Chart.yaml ![](https://i.imgur.com/NiQMrEE.png) 請先執行以下步驟確認是否均正常,[參考網址](https://wiki.o-ran-sc.org/display/GS/SMO+Installation) * 確認tiller pod有正常運行 - 應於部署k8s期間就已啟動 * 確認helm service有正常運行 * 透過指令查詢狀態,```bash $ sudo helm serve```,其結果應顯示如下圖所示 ![](https://i.imgur.com/bi2yOXt.png) 顯示「already in use」代表已正常啟動;若僅檢視「Now serving you on 127.0.0.1:8879」則開啟新的terminal執行第3步 * 確認透過指令「helm search onap」有找到35個charts list * 若顯示為「No results found」,則執行下一步 * 前往指定位置進行「make all」指令 ```bash $ cd /home/oprueba/oran/dep/smo/bin/smo-deploy/smo-oom/kubernetes $ make all ``` 此時有可能遇到此問題 ![](https://i.imgur.com/Wq38Lh7.png) 此處關鍵錯誤為: ![](https://i.imgur.com/HkzlX6g.png) 代表你的helm的初始化設定未完成,因此這邊必須進行初始化 ```bash $ helm init --client-only # 因為此處tiller已正常啟動,因此後面需要添加「--client-only」 ``` 然而初始化的時候也有可能跳出Q1的問題,此時照著Q1的步驟做即可 * 完成後再次執行「helm search onap」便可看到35個charts list,便可回到「步驟4 - onap安裝」繼續進行 * 若透過指令「helm search onap」已確認有35個charts list但仍跳出第3的錯誤,則將「smo-deploy」資料夾刪除,並重新執行「install」指令 4. 當在安裝 RICAUX 時,出現 ImagePullBackOff ![](https://i.imgur.com/9bjJ5uo.png) 先透過describe指令查詢其image檔案是為何無法下載 ```bash $ kubectl describe pod/cherry-infra-kong-7d6555954f-h2fp9 -n ricaux ``` ![](https://i.imgur.com/5sgSazn.png) 可以發現錯誤訊息為「Failed to pull image "kong-docker-kubernetes-ingress-controller.bintray.io/kong-ingress-controller:0.7.0(http://kong-docker-kubernetes-ingress-controller.bintray.io/kong-ingress-controller:0.7.0)": rpc error: code = Unknown desc = Error response from daemon: error parsing HTTP 403 response body: invalid character...以下略」 可能為該映像檔聯結有誤,可進入設定檔進行修改 ```bash $ vim ~/dep/ric-aux/helm/infrastructure/subcharts/kong/values.yaml ``` ```yaml=184 repository: kong/kubernetes-ingress-controller tag: 0.7.0 ``` ![](https://i.imgur.com/V56qhPS.png) 完成後再回到步驟4的ricaux安裝流程 5. 當在安裝 RICAUX 時,出現 UPGRADE FAILED ![](https://i.imgur.com/kirEYLG.png) 解決方式,[參考網址](https://stackoverflow.com/questions/46672523/helm-list-cannot-list-configmaps-in-the-namespace-kube-system) ```bash $ 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"}}}}' $ helm init --service-account tiller --upgrade ```