:::danger 在此筆記中已預設讀者已裝完 k8s ,若尚未安裝 k8s ,請參考[這篇文章](https://hackmd.io/uBr8j8YYRqC6Qjg_YshO7Q) 此筆記使用運行 binary 執行 YuniKorn ,若需要將其放置於 k8s 上執行,請參考[這篇文章](https://hackmd.io/m5fHXrNNRwqj2CULCbbADQ) ::: # 步驟 ## YuniKorn ### 前置作業 #### 安裝 golang 去 [go 官網](https://go.dev/doc/install) 抓下來 ```bash wget https://go.dev/dl/go1.22.2.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin ``` 可以用 `go version` 來檢查 #### 確保使用者可以使用 docker 指令 使用指令 `sudo adduser <username> docker` 讓指定 user 可以使用 docker 指令 ### 取得 YuniKorn 原始碼 `git clone <git/repo/of/yunikorn-core>` `git clone <git/repo/of/yunikorn-k8shim>` #### 修改 k8shim 專案之 go.mod 於 `<path/to/k8shim>` 下面的 `go.mod` 新增以下語句: `replace github.com/apache/yunikorn-core => <path/to/yunikorn-core>` ### 執行 yunikorn ``` cd <path/to/yunikorn-k8shim> make run ``` :::warning 若需使用 yunikorn 排程,需於部署 yaml 檔中新增 `scheduler_name: yunikorn` ::: ## Prometheus & Grafana ### helm 前置設定 - 新增 Repository ```bash helm repo add [REPO_NAME] https://prometheus-community.github.io/helm-charts helm repo update ``` - 新增 namespace ```bash kubectl create ns [NAMESPACE_NAME] ``` ### 修改文件 使用 `helm show values [REPO_NAME]/kube-prometheus-stack > [FILE_NAME]` 將文件導出至特定檔案進行修改 #### 新增 YuniKorn 相關設定 `vim [FILE_NAME]` 進入檔案修改 在 `prometheus.prometheusSpec.additionalScrapeConfigs` 下新增以下 config : ```yaml - job_name: "yunikorn" scrape_interval: 1s metrics_path: '/ws/v1/metrics' static_configs: - targets: ["<NODE_IP>:9080"] ``` ### 執行 Prometheus 安裝 prometheus ```bash helm install [RELEASE_NAME] [REPO_NAME]/kube-prometheus-stack \ -n [NAMESPACE_NAME] \ --values [FILE_NAME] ``` #### 透過 Grafana 觀察 透過 `kubectl get service -n [NAMESPACE_NAME]` 獲得 `[GRAFANA_SERVICE_NAME]` ```bash kubectl port-forward svc/[GRAFANA_SERVICE_NAME] 3000:80 \ --namespace [NAMESPACE_NAME] \ --address=[NODE_IP] ``` 訪問 `http://<NODE_IP>:3000` - 預設帳密 - account: admin - passwd: prom-operator ## DeathStarBench ### 使用 `git` 取得 :::warning 需要將 submodule 抓下來,[這裡](https://github.com/delimitrou/DeathStarBench/blob/master/socialNetwork/README.md#make)是官方提醒 ::: ### 修改特定文件 在 `DeathStarBench/socialNetwork/helm-chart/socialnetwork` 下修改 `values.yaml` ,新增 `schedulerName: yunikorn` 在 `DeathStarBench/socialNetwork/helm-chart/socialnetwork/templates` 下修改 `_baseDeployment.tpl` 與 `_baseNginxDeployment.tpl` ,新增 `schedulerName: yunikorn` ### 進行壓力測試 官方教學在[這裡](https://github.com/delimitrou/DeathStarBench/blob/master/socialNetwork/README.md#make) # 範例執行 ## YuniKorn ### 取得 YuniKorn 原始碼 `git clone https://github.com/idkname4048228/ntcu114-yunikorn-core.git` `git clone https://github.com/idkname4048228/ntcu114-yunikorn-k8shim` #### 修改 k8shim 專案之 go.mod ![未命名](https://hackmd.io/_uploads/H1_73DVZke.png) ### 執行 YuniKorn ``` cd <path/to/k8shim> make run ``` 發現未安裝 make ![未命名](https://hackmd.io/_uploads/rJsGTvNZ1e.png) 參考[文章](https://askubuntu.com/questions/192645/make-command-not-found)執行 `sudo apt-get install build-essential` 以安裝 `make` 並在之後執行 `make run` ![未命名](https://hackmd.io/_uploads/Sy2fG_4-kg.png) 發現無法使用 `go` 這個 command ,在經過查找後,發現路徑沒有套用成功 編輯 `~/.bashrc` 或 `/etc/environment` ,於最後一行新增以下語句: `export PATH=$PATH:/usr/local/go/bin` 並執行 `source ~/.bashrc` 或 `source /etc/environment` 執行 `make run` 成功 ![image](https://hackmd.io/_uploads/SkmcyFVWJl.png) ## Prometheus & Grafana ### 安裝 helm 使用下列指令安裝 helm ``` curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm ``` 可使用 `helm version` 檢查是否成功(如圖) ![image](https://hackmd.io/_uploads/rk2D7tNZJx.png) ### helm 前置設定 處理 helm Repository 與 k8s namespace 在此處,[REPO_NAME] 為 `prometheus` ,[NAMESPACE_NAME] 則為 `monitoring` 因此,指令如下: - 新增 Repository ```bash helm repo add prometheus https://prometheus-community.github.io/helm-charts helm repo update ``` - 新增 namespace ```bash kubectl create ns monitoring ``` ### 修改文件 使用 `helm show values prometheus/kube-prometheus-stack > prom_yuni.yaml` 將文件導出至 `prom_yuni.yaml` 以便後續修改 #### 新增 YuniKorn 相關設定 `vim prom_yuni.yaml` 進入檔案修改,並新增 yunikorn config 預計結果如下: ![未命名](https://hackmd.io/_uploads/rJ4zDF4-Jl.png) ### 執行 Prometheus 使用 helm 安裝 prometheus ,會自動將相關 pod 建立在 k8s 上 在此處使用之 [RELEASE_NAME] 為 prometheus 因此,指令如下: ```bash helm install prometheus prometheus/kube-prometheus-stack \ -n monitoring \ --values prom_yuni.yaml ``` :::success 此過程會花費些許時間,請耐心等候 執行後截圖為: ![image](https://hackmd.io/_uploads/Bym2PtEbke.png) ::: #### 透過 Grafana 觀察 取得 [GRAFANA_SERVICE_NAME] 為 `prometheus-grafana` ![未命名](https://hackmd.io/_uploads/SJZsOFNbJe.png) 執行以下指令以造訪 grafana webUI <font color='red'> 請注意 </font> NODE_IP 是自行設定之環境變數,若需使用,則將其替換為所設定的機器 IP ```bash kubectl port-forward svc/prometheus-grafana 3000:80 \ --namespace monitoring \ --address=$NODE_IP ``` 成功截圖如下: ![image](https://hackmd.io/_uploads/BJAicFVZyx.png) 訪問 `http://<NODE_IP>:3000` ,結果如圖: ![image](https://hackmd.io/_uploads/HyrA5t4-yl.png) ## DeathStarBench ### `git clone` 取得 使用 `git clone https://github.com/delimitrou/DeathStarBench.git --recurse-submodules` 下載 移動到 `DeathStarBench/wrk2/deps/luajit` 下,使用 `make && sudo make install` 進行編譯與安裝,[相關文件](https://luajit.org/install.html) 下載所需套件: ``` sudo apt-get install libssl-dev sudo apt-get install libz-dev sudo apt install luarocks sudo luarocks install luasocket ``` ### 修改 `DeathStarBench/socialNetwork/helm-chart/socialnetwork` 下的文件 - `values.yaml` ![未命名](https://hackmd.io/_uploads/HyDd-94WJl.png) - `/templates/_baseDeployment.tpl` ![未命名](https://hackmd.io/_uploads/ByygfqN-yx.png) - `/templates/_baseNginxDeployment.tpl` ![未命名](https://hackmd.io/_uploads/H1uifcNWye.png) ### 使用 helm 部署,並取得 nginx-ip 使用 `kubectl create ns socialnetwork` 新增 namespace 移動到 `/helm-chart/socialnetwork` ,並執行以下指令以安裝 socialnetwork: ``` helm install socialnetwork . -n socialnetwork --values values.yaml ``` 並使用以下指令取得 nginx 的 ip ``` kubectl get svc -n socialnetwork | grep nginx ``` ![image](https://hackmd.io/_uploads/BJisL54-kx.png) ### 進行壓力測試 移動到 `DeathStarBench/socialNetwork` 下面,執行: ``` cd ../wrk2 make cd ../socialNetwork ../wrk2/wrk -D exp -t 4 -c 10 -d 30 -L -s ./wrk2/scripts/social-network/compose-post.lua http://10.108.218.200:8080/wrk2-api/post/compose -R 100 ```