評估內容:
| Hostname | Role | IP Address | OS | 備註 |
|---|---|---|---|---|
| VIP | Load Balancer | 10.10.0.83 | HAProxy | k8s API Server 統一入口(Port 6444) |
| doris-f01 | Master | 10.10.0.85 | Ubuntu 24.04 | Control Plane #1 |
| doris-f02 | Master | 10.10.0.87 | Ubuntu 24.04 | Control Plane #2 |
| doris-f03 | Master | 10.10.0.89 | Ubuntu 24.04 | Control Plane #3 |
| doris-b01 | Worker | 10.10.0.93 | Ubuntu 24.04 | Worker Node |
| doris-b02 | Worker | 10.10.0.94 | Ubuntu 24.04 | Worker Node |
| doris-b03 | Worker | 10.10.0.95 | Ubuntu 24.04 | Worker Node |
| doris-b04 | Worker | 10.10.0.96 | Ubuntu 24.04 | Worker Node |
doris-f0x
doris-b0x
| 比較項目 | 方案 1:部署於K8s | 方案 2:部署於本機 | 評估結果 |
|---|---|---|---|
| 依賴深度 | 高 (依賴 CSI, CNI, K8s DNS) | 低 (僅依賴 OS) | 方案 2 勝 |
| IO 效能 | 中 (受限於 Overlay Network/Fs) | 極高 (直接存取硬體) | 方案 2 勝 |
| 故障復原 | 複雜 (需排查 K8s 層與 DB 層) | 單純 (標準 Linux 排查) | 方案 2 勝 |
| 資源隔離 | 容易 (Resource Limits) | 需手動 (Cgroups/Slice) | 方案 1 勝 |
作法概述:
評估結果:不建議(除測試或非關鍵環境)
主要考量:
作法概述:
評估結果:建議採用
優點:
IO 效能對比(基於 fio 測試):
| 部署方式 | 隨機讀 IOPS | 隨機寫 IOPS | 延遲 (ms) | 備註 |
|---|---|---|---|---|
| 本機部署 | 50,000 | 30,000 | 0.5 | 直接訪問 SSD |
| K8s (hostPath) | 45,000 | 27,000 | 0.8 | Overlay FS 損耗 |
| K8s (Ceph RBD) | 20,000 | 15,000 | 3.0 | 網路儲存損耗 |
效能損耗:
資源使用預估(單節點):
| 組件 | CPU (cores) | Memory (GB) | Disk I/O | 備註 |
|---|---|---|---|---|
| K8s Master | 2-4 | 4-8 | 低 | API Server, etcd, Controller |
| Doris FE | 4-8 | 8-16 | 中 | 查詢協調 |
| PostgreSQL | 2-4 | 4-8 | 高 | 資料庫負載 |
| etcd-patroni | 1-2 | 1-2 | 中 | 配置同步 |
| 總計 | 9-18 | 17-34 | - | 需 32-core, 64GB 節點 |
doris-f0x 節點規格(假設):
資源使用率評估:
結論: f01-f03 節點有足夠資源承載所有服務,但需嚴格資源隔離。
| 方案 | 技術可行性 | 維運複雜度 | 故障風險 | 推薦度 |
|---|---|---|---|---|
| A: 共置於 f01-f03 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ 推薦 |
| B: 共置於 b01-b03 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⚠️ 不建議 |
| C:分離部署 | ⭐⭐ | ⭐ | ⭐ | ❌ 強烈反對 |
評估結論:建議採用(優先方案)
優點:
缺點與風險:
評估結論:不建議 (高風險)
優點:
缺點與風險:
評估結論:強烈不建議
為什麼不能分離:
| 問題 | 影響 |
|---|---|
| 網路延遲 | Leader election 判斷延遲 Failover 速度下降 |
| 網路抖動 | 誤判節點故障 不必要的 Failover |
| 故障排查 | 需跨節點檢查 定位問題困難 |
| 依賴增加 | 網路成為關鍵依賴 單點故障風險上升 |
詳細方案差異:
etcd 與 PostgreSQL / Patroni 共置於 f01–f03,前提為資源與 I/O 隔離到位etcd 與 PostgreSQL / Patroni 共置於 b01–b03 僅在有明確 SOP 與資源隔離能力時才考慮若 PostgreSQL / Patroni / Patroni-etcd 與 k8s Control Plane 或 Worker 共置, 必須落實以下隔離規範,以避免不同 etcd 與關鍵服務互相干擾:
| 組件 | 服務名稱 (Systemd) | Port (Client/Peer) | Data Directory |
|---|---|---|---|
| K8s Etcd | etcd.service |
2379 / 2380 |
/var/lib/etcd |
| Patroni Etcd | etcd-patroni.service |
12379 / 12380 |
/var/lib/etcd-patroni |
| PostgreSQL | patroni.service |
5432 |
/var/lib/postgresql/data |
資源配額隔離, 防止 DB 吃光 RAM 導致 K8s API Server 當機 :
/etc/systemd/system/patroni.service.d/override.conf):
[Service]
# 限制 Patroni + Postgres 最多使用 8GB 記憶體
MemoryHigh=8G
MemoryMax=10G
# 權重低於 K8s 組件,資源緊張時優先被限縮
CPUWeight=50
Doris FE 設定:
-Xmx), 避免無限制增長。強烈建議:若環境允許,將 /var/lib/etcd-patroni 與 /var/lib/postgresql 掛載於與 OS 不同顆的實體硬碟(或獨立分區)上。
本節評估 Apache Airflow 核心組件 (Webserver / Scheduler / Triggerer) 是否適合部署於 Kubernetes Master Node, 並將 Worker 僅部署於 Worker Node。
| 類型 | 元件 | 架構角色 |
|---|---|---|
| 控制與協調層 | Webserver | 提供 UI / API |
| Scheduler | DAG 解析與任務調度 | |
| Triggerer | 非同步事件處理 | |
| 執行層 | Worker | Task 實際執行 |
Airflow 核心組件屬於「控制與協調層」, 不直接承載業務計算負載。
在本架構中,Master Node 具備以下特性:
將 Airflow 核心組件部署於 Master Node 的優點包括:
Airflow Worker 為 Task 實際執行單位,具備以下特性:
將 Worker 僅部署於 Worker Node 可達成:
| 風險 | 說明 | 對策 |
|---|---|---|
| Master Node 資源競爭 | Scheduler 與 K8s 元件同節點 | 設定 Resource Requests / Limits |
| 誤排 Worker 至 Master | Worker 誤用 Master 資源 | Taint + Toleration |
| 單節點過載 | 核心組件集中 | 多 Replica 部署 |
在具備資源隔離與節點角色控管前提下:
doris-f01 ~ doris-f03。