[TOC]
# 一、安裝git&
~~~
$ yum install -y git
$ git clone --branch kubernetes https://gitee.com/wells2333/sg-exam.git
$ cd sg-exam
~~~

# 二、配置
## 數據庫
分為本地環境和生產環境,區別主要是數據庫的配置不一樣
本地環境默認采用內嵌數據庫,并且自動初始化腳本**不需要額外安裝MySQL**
生產環境建議采用外部數據庫服務,默認通過域名訪問`sg.exam.mysql.com`數據庫的,可以配置host,配置成對應的IP地址,如:
```
192.168.31.89 sg.exam.mysql.com
```
MySQL的用戶名和密碼配置在`mysql-credentials`里,具體見`deploy-prod.bash`,可根據實際情況修改
本地環境的運行腳本:`deploy-dev.bash`
生產環境的運行腳本:`deploy-prod.bash`
兩個腳本主要邏輯:
* 創建namespace、configmap、secret
* 啟動服務
## Redis
默認內嵌Redis服務,不需要額外安裝
如有需要,可參考MySQL的配置,增加一個`type=ExternalName`的服務,詳見`mysql-prod.yml`
Redis的配置見`deploy-dev.bash`、`deploy-prod.bash`
# 三、打包、構建鏡像
構建服務鏡像,包括后端微服務、前端服務、數據庫鏡像,構建時間可能有點長,耐心等待即可,構建命令:
```
./gradlew build && docker-compose build
```

構建成功:

# 四、部署
鏡像構建完成后,執行部署腳本:
```
./kubernetes/scripts/deploy-prod.bash
```
該腳本的執行創建namespace `sg-exam`,創建`configmap`、`secret`,部署各個服務

# 查看容器啟動
執行腳本后,登錄k8s控制臺查看啟動情況,首先啟動k8s控制臺:
```
kubectl proxy --port=8001
```

訪問:[http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
](http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/)
命名空間選擇sg-exam,看到如下界面即表示服務正常啟動:

# 五、訪問系統
服務正常啟動后,即可訪問后臺或前臺進入系統:
前臺:http://localhost/
后臺:http://localhost/admin
可用以下賬號登錄:
| 單位ID | 賬號 | 密碼 | 角色 |
| --------- | -------- | -------- | -------- |
| gitee | admin | 123456 | 管理員 |
| gitee | student | 123456 | 學生 |
| gitee | teacher | 123456 | 老師 |
前臺首頁:

后臺首頁:

# 六、系統監控
主要介紹部署并啟動相關監控組件
## 部署kiali
```
$ cd /usr/local/istio-1.11.2
$ kubectl apply -f samples/addons
```

可能pod會起不來,一般是因為pull鏡像失敗,重試幾次或者手動pull一下失敗鏡像就行了,如我本機kiali起不來,手動pull鏡像就行了`docker pull quay.io/kiali/kiali:v1.38`
檢查pod運行狀況
```
$ kubectl get pod -n istio-system
```

啟用kiali
```
$ istioctl dashboard kiali
```
訪問[http://localhost:2978/kiali](http://localhost:2978/kiali)


參考資料:[可觀察性工具 kiali](https://jimmysong.io/istio-handbook/setup/istio-observability-tool-kiali.html)
## jaeger
```
istioctl dashboard jaeger
```
訪問[http://localhost:16686/jaeger/search](http://localhost:16686/jaeger/search)

## prometheus
```
istioctl dashboard prometheus
```
訪問[http://localhost:9090](http://localhost:9090)
## 其它監控
istioctl dashboard
```
$ istioctl dashboard
```
