---
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按照需求增加 | 提供網路分流附載與主要資料儲存 |

主要以單一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 |






### 虛擬機網路固定配置


| 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網絡




* 監控

### 安裝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
```
### 設定對外網路流量的分流負載




這裡顯示Worker共計三個節點,會按照來源使用者的IP來源來進行各節點網路流量的分流負載。

用於使用者網路流量分流的k8s節點

以使用者來源IP來進行分流

以基本的Socket檢測來檢測各k8s節點的健康狀況,(這樣如果有節點關機或掛掉的話,系統也會馬上就關閉掉該節點的對外網路服務流量,確保使用者僅可連線到健康的k8s節點)
:warning: 預設每秒檢測一次節點的ingress服務健康狀況
## Longhorn分散式儲存機制

## 主機汰除紀錄
| 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`