OpenResty XRay™ 自主部署版 (Kubernetes)
名稱
OpenResty XRay 自主部署 kubernetes 版本安裝與部署說明
目錄
概覽
其中控制檯服務端執行在 docker 容器中,使用 kubernetes
進行管理,而 Agent 端則是執行在目標機器上。
XRay 的服務端分為三個元件,其中每個元件中又有一些子服務
OpenResty XRay Console
:- xray-console: console 的 web 服務,提供 XRay 的管理介面
- xray-console-pg: console 的資料庫,作為 web 服務的資料庫後端
OpenResty XRay BuildBox
:- build-box-[dist]: 構建 XRay 工具的後端服務。其中
dist
代表對應的作業系統發行版。 - xray-tenant-db: 對
xray-console
服務和build-box-[dist]
提供查詢介面,會按照 ‘私有庫 -> 公共庫’ 的順尋進行查詢。該服務只會向公共庫發起查詢請求,而不會有資料上傳到公有庫 - xray-tenant-db-pl: 提供客戶私有的軟體資料庫
- xray-tenang-db-pg: 作為客戶私有軟體資料庫的資料庫後端
- build-box-[dist]: 構建 XRay 工具的後端服務。其中
安裝
kubernete 控制檯服務
1. 硬體要求
- 一個基礎的 Kubernetes 平臺
- 1Ti + 500Gi 硬碟供
xray-console
pod 使用 - 100Gi 硬碟供
tenant-db
pod 中的build-box
容器使用 - 2 x 10Gi 硬碟供
tenant-db
pod 中的tenant-db
容器使用 - 建議不要使用 NFS 做儲存,會有許可權問題
- 每個容器至少 256MB 記憶體
xray-console
pod 可以連線網際網路
關於硬碟使用量的說明:根據目前的經驗,1 臺 Agent 週期取樣的資料,30 天的資料增長量約為 10GB
2. 訪問映象倉庫的 secret
首先,建立名稱空間以及使用郵件中提供的使用者名稱密碼建立 kubernetes 訪問 openresty 映象倉庫的 secret
kubectl create ns openresty-xray
kubectl create secret docker-registry openresty-xray \
--docker-server=registry.openresty.com.cn \
--docker-username=<docker-registry username> \
--docker-password=<docker-registry password> \
-n openresty-xray
3. 建立 console 證書 secret (可選)
如果需要使用自定義的證書,則需執行此步驟。如果跳過此步驟,console會使用內建的自簽證書。
將 XRay 服務端對應域名的證書放在 cert 目錄下
$ ls cert/
ssl.crt ssl.key
使用以下命令建立 secret
kubectl create secret generic cert-secret --from-file=cert -n openresty-xray
找到 kubernetes.yml
檔案的以下幾行, 去掉註釋即可使用自定義的證書
#- mountPath: /usr/local/orxray-console/conf/cert
# name: cert
# readOnly: true
...
volumes:
#- name: cert
# secret:
# secretName: cert-secret
kubernetes.yml
檔案中的環境變數需要和證書中的域名一致
- name: CONSOLE_HOST
value: xxx.xx.com
4. 使用預設的資料卷持久化方案
部署服務端需要持久化的資料卷,以下是給的一個預設的持久化資料卷方案。 這個方案是將資料存到叢集中的某個選中的節點上,節點上需要分配2T左右的空間。
首先給選定的節點打上標籤
kubectl label node <node_name> app=openresty-xray-console
建立資料卷,資料會持久化在選定節點的 /data
目錄中,請保證 /data
目錄有足夠的空間。
使用郵件附件中的
kubernetes-pv.yml.sample
檔案
kubectl apply -f kubernetes-pv.yml.sample
5. 部署服務端到kubernetes
執行以下命令部署服務端到kubernetes
使用郵件附件中的
kubernetes.yml
檔案
kubectl apply -f kubernetes.yml
6. 訪問服務
kubernetes.yml 使用 hostPort 的方式在 console 的節點上匯出443埠,所以直接訪問節點的 https 服務就行了。
Agent
XRay Agent 端執行在目標機器上,Agent 安裝後與自主部署的控制檯服務端進行通訊,而 Agent 安裝也是由控制檯服務端配合完成的:
在瀏覽器訪問控制端服務端後臺,使用郵件中提供的使用者名稱密碼來進行登入。登入後,可以看到安裝嚮導,及支援的作業系統,按照安裝嚮導的提示,進行 Agent 的安裝即可。
安裝 Agent 後可在左側 User
頁籤修改密碼及新增使用者。
運維
檢視服務 POD 狀態
$ kubectl get pods -n openresty-xray
NAME READY STATUS RESTARTS AGE
build-box-centos-7-75c954d87d-h6fkz 1/1 Running 0 18h
xray-console-5d457bb49d-q49f8 1/1 Running 0 17h
xray-console-pg-64df4cbd86-tm44n 1/1 Running 0 18h
xray-tenant-db-69d9cbd77d-nccnb 1/1 Running 0 18h
xray-tenant-db-pg-845d5cb674-rrjz8 1/1 Running 0 18h
xray-tenant-db-pl-859c5c8dfd-xk7sg 1/1 Running 0 18h
控制檯服務日誌檢視
$ kubectl logs --tail=10 -n openresty-xray -l app=xray-console -c xray-console
檢查服務狀態
$ kubectl describe pod xray-console-5d457bb49d-q49f8 -n openresty-xray
升級服務
升級服務會透過郵件傳送附件 kubernetes.upgrade.yml
,執行以下操作:
$ kubectl apply -f kubernetes.upgrade.yml
由於匯出埠使用了hostPort模式,如果升級的console服務POD會因為原POD佔用主機的443埠,導致POD一直處於pending狀態,需要手工刪除原POD。
執行以下命令
$ kubectl delete pod xray-console-5d457bb49d-q49f8 -n openresty-xray
元件升級
首先停止舊的 Pods,再啟動新的 Pods,等到新的 Pods 啟動成功後升級就成功了。
其中 kubernetes-pods.yml
檔案在升級郵件的附件中提供。
$ kubectl delete -f kubernetes-pods.yml
$ kubectl apply -f kubernetes-pods.yml
在升級時,並不需要刪除舊的 PVC 和相應的 PV。因為 PV 是 RWO (讀-寫-一次性) 屬性的,如果 PVC 被刪除後,對應的 PV 也需要被刪除後再重建(這不會影響已經持久化的資料)。