--- title: 'Exsi 與 Pfsense 的Rke2群集建立 (包含對外分流負載)' disqus: hackmd --- Exsi 與 Pfsense 的Rke2群集建立 (包含對外分流負載) === 此方案主要為說明在Exsi(Single Host)上透過pfsense建置基礎的網絡環境並建置Rke2的k8s開發群集,建置群集後開需相關對應的相關服務安裝機制(主要用於針對團隊的使用服務安裝使用)。 ## 注意事項 * 由於僅一台實體伺服器Exsi系統,因此Master僅設定1個,其餘均為Worker(3個) * 此安裝說明不包含Rancher管理的應用系統,僅rke2的群集基礎部屬服務參考,Rancher的管理應用將獨立於其他文件內來做為說明參考。 * 在這裡的分流負載主要以連線者的來源IP做分流,使不同IP來源間的使用者可以在不同的節點上連線,但是同一個來源IP的每次連線均可在同一個節點上(避免發生的連線session資訊不同) ## 索引 [TOC] ## 虛擬機相關設定 帳號密碼 ubuntu:ubuntu ### 虛擬機類別 此類別xlarge與2xlarge主要參考公有雲AWS上EC2運算優化大小清單,而採用運算優化是因為此系統採用分散式的區塊儲存型態(會需要大量CPU運算來做分散式區塊運算) :warning: pfSense防火牆同時兼顧DNS、LoadBalancer外,也可選擇性的作為OpenVPN(VPN)、IPSec(VPN)、Suricata(入侵檢測系統)來防護外部虛擬機與群集應用的網路安全。<- 選擇性的部分要按照實際需求來決定是否需要額外安裝。 | 類別 | vCPU | 記憶體 | 硬碟大小 | 備註 | | -------- | -------- | -------- | -------- | -------- | | pfSense防火牆 | 8vCPU | 8 | 64G | 用於網路分流附載與HA | | 運算優化(xlarge) | 4 | 8 | 120G | 儲存可SAS或HDD,資金足夠的話可再之後換成SSD | | 運算優化(xlarge) | 4 | 8 | 240G | 儲存可SAS或HDD,資金足夠的話可再之後換成SSD | | 運算優化(2xlarge) | 8 | 16 | 480G | 儲存可SAS或HDD,資金足夠的話可再之後換成SSD | | 運算優化(2xlarge) | 8 | 16 | 960G | 儲存可SAS或HDD,資金足夠的話可再之後換成SSD | ### 虛擬機OS安裝配置(建議最低可運作,但是後續可以無損升級到下一階段) :warning: 下方是若Master在一般SAS或是HDD儲存狀況則建議僅部屬1個即可XD,因為Master若三個但是在讀寫IO不足的狀況下群集系統會直接掛掉XDDD | 主機角色 | 類別 | 最小數量 | 擴增數量 | 備註 | | -------- | -------- | -------- | -------- | -------- | | 維護與管理容器(Master) | 運算優化(xlarge) | 1 | 奇數倍數增加 | 硬碟大小可以是64G即可,但是建議用SSD | | 容器應用附載 | 運算優化(xlarge) | 3 | 持續+1按照需求增加 | 提供網路分流附載與主要資料儲存 | ### 虛擬機OS安裝配置(最小方向建議1) :warning: 此參考建議主要是考慮到Gitlab與Harbor支援物件儲存的形式會有較大儲存需求。 :warning: 下方是若Master在一般SAS或是HDD儲存狀況則建議僅部屬1個即可XD,因為Master若三個但是在讀寫IO不足的狀況下群集系統會直接掛掉XDDD | 主機角色 | 類別 | 最小數量 | 硬碟大小 | 擴增數量 | 備註 | | -------- | -------- | -------- | -------- | -------- | -------- | | 維護與管理容器(Master) | 運算優化(xlarge) | 1 | 64G |奇數倍數增加 | 硬碟大小可以是64G即可,但是建議用SSD | | 容器應用附載 | 運算優化(2xlarge) | 3 | 480* 3 |持續+1按照需求增加 | 提供網路分流附載與主要資料儲存 | ### 虛擬機OS安裝配置(最小方向建議2) :warning: 此參考建議主要是考慮到Gitlab與Harbor支援物件儲存的形式會有較大儲存需求。 :warning: 下方是若Master在一般SAS或是HDD儲存狀況則建議僅部屬1個即可XD,因為Master若三個但是在讀寫IO不足的狀況下群集系統會直接掛掉XDDD | 主機角色 | 類別 | 最小數量 | 硬碟大小 | 擴增數量 | 備註 | | -------- | -------- | -------- | -------- | -------- | -------- | | 維護與管理容器(Master) | 運算優化(xlarge) | 1 | 64G |奇數倍數增加 | 硬碟大小可以是64G即可,但是建議用SSD | | 容器應用附載 | 運算優化(xlarge) | 6 | 240G* 6 或是120* 6 | 持續+1按照需求增加 | 提供網路分流附載與主要資料儲存 | ### 虛擬機OS安裝配置(B30f當前,混合式按照需求調整擴增) B30f由於需要嚴格管理儲存空間使用,因此虛擬機大小採用滾動式調整 | 主機角色 | 類別 | 當前數量 | 備註 | | -------- | -------- | -------- | -------- | | 維護與管理容器(Master) | 運算優化(xlarge) | 1 | 這裡沒有SSD所以1個 | | 容器應用附載 | 運算優化(xlarge) | 4 | 持續+1按照需求增加 | 提供網路分流附載與主要資料儲存 | | 容器應用附載 | 運算優化(2xlarge) | 2 | 持續+1按照需求增加 | 提供網路分流附載與主要資料儲存 | ![](https://i.imgur.com/yez3YEW.png) 主要以單一Master與6個worker | 虛擬機名稱 | 虛擬機HOSTNAME | 註解 | 目前狀態 | | -------- | -------- | -------- | -------- | | Rke2群集架構整合(非HA) | rke2-master | 這裡負責主要k8s元件 | READY | | Rke2群集架構-Worker1 | rke2-worker | 這裡負責分擔Ingress與其他相關應用服務部屬 | READY | | Rke2群集架構-Worker4 | rke2-worker4 | 這裡負責分擔Ingress與其他相關應用服務部屬 | READY | | Rke2群集架構-Worker5 | rke2-worker5 | 這裡負責分擔Ingress與其他相關應用服務部屬 | READY | | Rke2群集架構-Worker6 | rke2-worker6 | 這裡負責分擔Ingress與其他相關應用服務部屬 | READY | | Rke2群集架構-Worker8 | rke2-worker8 | 這裡負責分擔Ingress與其他相關應用服務部屬 | READY | | Rke2群集架構-Worker9 | rke2-worker9 | 這裡負責分擔Ingress與其他相關應用服務部屬 | READY | ![](https://i.imgur.com/wmhd7jd.png) ![](https://i.imgur.com/lmlnL8I.png) ![](https://i.imgur.com/6kf5qyw.png) ![](https://i.imgur.com/G5wOikx.png) ![](https://i.imgur.com/aOLdhew.png) ![](https://i.imgur.com/aZp3rUi.png) ### 虛擬機網路固定配置 ![](https://i.imgur.com/VoS7Ymf.png) ![](https://i.imgur.com/BZknVRB.png) | IP位址 | MAC位址 | HOST NAME | CPU排程相似 | CPU共用 | | ----- | ------ | -------- | -------- | -------- | | 192.168.30.7 | 00:0c:29:fe:cf:80 | rke-master | 44,45,46,47 | 高 | | 192.168.30.13 | 00:0c:29:a1:4f:c7 | rke2-worker5 | 20,21,22,23 | 正常 | | 192.168.30.12 | 00:0c:29:37:c6:3d | rke2-worker4 | 24,25,26,27 | 正常 | | 192.168.30.11 | 00:0c:29:b3:b3:55 | rke2-worker3 | 28,29,30,31 | 正常 | | 192.168.30.10 | 00:0c:29:c3:51:ce | rke2-worker2 | 32,33,34,35 | 正常 | | 192.168.30.9 | 00:0c:29:b6:48:bc | rke2-worker1 | 36,37,38,39 | 正常 | | 192.168.30.8 | 00:0c:29:a1:4f:c7 | rke2-worker | 40,41,42,43 | 正常 | :warning: 請注意虛擬機host-name不可重複 ### 設定Master網絡 ![](https://i.imgur.com/wmerXp8.png) ![](https://i.imgur.com/OKCkF18.png) ![](https://i.imgur.com/iGQ8B6B.png) ![](https://i.imgur.com/RTzTPjY.png) * 監控 ![](https://i.imgur.com/mfbpZf1.png) ### 安裝Master ``` sudo mkdir -p /etc/rancher/rke2/ sudo nano /etc/rancher/rke2/config.yaml ``` * config.yaml內容 ```plantuml @startyaml node-name: rke2-master token: 1qaz2wsx3edc tls-san: - rke2.b30f.systex.com - rke2.b30f.systex.192.168.30.5.nip.io - rke2.b30f.systex.192.168.30.5.xip.io node-taint: - "CriticalAddonsOnly=true:NoExecute" @endyaml ``` * 驗證與測試tls可用 ``` ping rke2.b30f.systex.com ping rke2.b30f.systex.192.168.30.5.nip.io ping rke2.b30f.systex.192.168.30.5.xip.io ``` ### 安裝Worker ``` sudo mkdir -p /etc/rancher/rke2/ && \ sudo nano /etc/rancher/rke2/config.yaml ``` #### worker0 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker0 server: https://rke2.b30f.systex.com:9345 token: 1qaz2wsx3edc @endyaml ``` #### worker1 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker1 server: https://rke2.b30f.systex.com:9345 token: 1qaz2wsx3edc @endyaml ``` #### worker2 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker2 server: https://rke2.b30f.systex.192.168.30.5.nip.io:9345 token: 1qaz2wsx3edc @endyaml ``` #### worker3 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker3 server: https://rke2.b30f.systex.192.168.30.5.nip.io:9345 token: 1qaz2wsx3edc @endyaml ``` ### worker4 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker4 server: https://rke2.b30f.systex.192.168.30.5.nip.io:9345 token: 1qaz2wsx3edc @endyaml ``` ### worker5 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker5 server: https://rke2.b30f.systex.192.168.30.5.nip.io:9345 token: 1qaz2wsx3edc @endyaml ``` ### worker6 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker6 server: https://rke2.b30f.systex.192.168.30.5.nip.io:9345 token: 1qaz2wsx3edc @endyaml ``` ### worker7 config.yaml內容 ```plantuml @startyaml node-name: rke2-worker7 server: https://rke2.b30f.systex.192.168.30.5.nip.io:9345 token: 1qaz2wsx3edc @endyaml ``` ## 開始進行安裝前檢測 ``` nslookup rke2.b30f.systex.192.168.30.5.nip.io ``` ### 管理與存取群集 此方法僅供參考,建議在後續安裝Rancher管理介面並以該介面進行k8s的服務管理。 * (在root)模式安裝後 `cp /etc/rancher/rke2/rke2.yaml /home/ubuntu/kubeconfig` ``` export KUBECONFIG=/home/ubuntu/kubeconfig ## 測試 kubectl get pods --all-namespaces helm ls --all-namespaces ``` ### 設定對外網路流量的分流負載 ![](https://i.imgur.com/jJefooQ.png) ![](https://i.imgur.com/ICzBQum.png) ![](https://i.imgur.com/NyXK2PV.png) ![](https://i.imgur.com/bLVn7qR.png) 這裡顯示Worker共計三個節點,會按照來源使用者的IP來源來進行各節點網路流量的分流負載。 ![](https://i.imgur.com/ALn4kny.png) 用於使用者網路流量分流的k8s節點 ![](https://i.imgur.com/pIEmja0.png) 以使用者來源IP來進行分流 ![](https://i.imgur.com/Es4TPaI.png) 以基本的Socket檢測來檢測各k8s節點的健康狀況,(這樣如果有節點關機或掛掉的話,系統也會馬上就關閉掉該節點的對外網路服務流量,確保使用者僅可連線到健康的k8s節點) :warning: 預設每秒檢測一次節點的ingress服務健康狀況 ## Longhorn分散式儲存機制 ![](https://i.imgur.com/Kgjx2Il.png) ## 主機汰除紀錄 | Rke2群集架構-Worker1 | rke2-worker1 | 這裡負責分擔Ingress與其他相關應用服務部屬 | 已汰除 | | Rke2群集架構-Worker2 | rke2-worker2 | 這裡負責分擔Ingress與其他相關應用服務部屬 | 已汰除 | | Rke2群集架構-Worker3 | rke2-worker3 | 這裡負責分擔Ingress與其他相關應用服務部屬 | 已汰除 | | Rke2群集架構-Worker5 | rke2-worker7 | 這裡負責分擔Ingress與其他相關應用服務部屬 | 底層儲存異常 | ## Reference and FAQ * [rke2 quickstart](https://docs.rke2.io/install/quickstart/) :::info **Find this document incomplete?** Leave a comment! ::: ###### tags: `Public` `rke2` `Exsi` `pfsense`