🎯 課程目標__HTMLTAG_68___
完成本課程後,您將:
- ✅ 了解為什麼 HA 設定中的 K8s API 伺服器需要負載平衡器
- ✅ 安裝和設定 keepalived 以實現虛擬 IP (VIP) 故障轉移
- ✅ 安裝和設定 HAProxy 以實現 API 伺服器負載平衡
- ✅ 設定運作狀況檢查與自動故障轉移
- ✅ 透過模擬故障來測試 HA
- ✅ 比較 keepalived+HAProxy 與 kube-vip
第 1 部分:為什麼 API 伺服器需要負載平衡器?
1.1。單一 API 端點的問題
程式碼區塊_0
1.2。負載平衡器架構
程式碼區塊_1
1.3。選擇架構
___HTMLTAG_110__HTMLTAG_111___專用負載平衡節點___HTMLTAG_112__HTMLTAG_113___| 選項 | 優點 | 缺點 | 推薦 |
|---|---|---|---|
| 隔離、簡單、清楚分離__HTMLTAG_115___ | 也需要 2 個伺服器__HTMLTAG_117___ | ✅ 製作 | |
| 主伺服器上的 HAProxy | 不需要額外的伺服器 | 資源爭用,複雜性 | 實驗室/小型 |
| kube-vip (DaemonSet) | 無外部LB | 在 K8s 內部運作 → 先有雞還是先有蛋 | 簡單設定 |
我們將使用 專用 LB 節點 (lb1 + lb2) 進行生產級設定。
第 2 部分:HAPROXY 的安裝與設定
2.1。安裝 HAProxy
___程式碼區塊_2___2.2。 HAProxy 設定
___程式碼區塊_3___2.3。進階運轉狀況檢查 (HTTP)
TCP 檢查僅檢查開放埠。若要檢查 API 伺服器是否確實健康,請使用 HTTP 健康檢查:
程式碼區塊_4
⚠️ 注意: HTTP 健康檢查需要 check-ssl verify none 因為 K8s API 使用自簽名憑證。在生產中,您可以設定 CA 憑證進行驗證。
2.4。啟動 HAProxy
___程式碼區塊_5___第 3 部分:安裝與設定保持活動
3.1。什麼是 keepalived?
keepalived 使用 VRRP(虛擬路由器冗餘協定) 管理 2 個以上伺服器之間的虛擬 IP:
程式碼區塊_6
3.2。安裝 keepalived
___程式碼區塊_7___3.3。 lb1 (MASTER) 上的 Keepalived 設定
___程式碼區塊_8___3.4。 lb2 上的 Keepalived 設定(備份)
___程式碼區塊_9___3.5。通知腳本(可選)
___程式碼區塊_10___3.6。啟動 keepalived
___程式碼區塊_11___第 4 部分:測試 HA 故障轉移
4.1。測試 1:lb1 關閉時 VIP 故障轉移
___程式碼區塊_12___4.2。測試 2:HAProxy 失敗 → keepalived 示範
___程式碼區塊_13___4.3。測試 3:API 伺服器後端故障轉移
___程式碼區塊_14___第 5 部分:替代方案 — kube-vip
5.1。什麼是 kube-vip?
kube-vip 在控制平面節點上作為靜態 Pod 運行,將 VIP + 負載平衡結合在 1 個元件中:
程式碼區塊_15
5.2。詳細比較
___HTMLTAG_218__HTMLTAG_219___額外伺服器___HTMLTAG_220__HTMLTAG_221___ ___HTMLTAG_228__HTMLTAG_229___複雜性___HTMLTAG_230__HTMLTAG_231___ ___HTMLTAG_238__HTMLTAG_239___獨立___HTMLTAG_240__HTMLTAG_241___ ___HTMLTAG_248__HTMLTAG_249___先有雞還是先有蛋的問題___HTMLTAG_250__HTMLTAG_251___ ___HTMLTAG_258__HTMLTAG_259___健康檢查___HTMLTAG_260__HTMLTAG_261___ ___HTMLTAG_268__HTMLTAG_269___監控___HTMLTAG_270__HTMLTAG_271___ ___HTMLTAG_278__HTMLTAG_279___經過生產驗證___HTMLTAG_280__HTMLTAG_281___ ___HTMLTAG_288__HTMLTAG_289___實驗室/開發___HTMLTAG_290__HTMLTAG_291___| 標準 | keepalived + HAProxy | kube-vip |
|---|---|---|
| 需要 2 台負載平衡伺服器 | 不需要 | |
| 需要管理 2 個元件 | 1 元件 | |
| ✅ 獨立於 K8s 叢集 | ❌ 在 K8s 中運行(先有雞還是先有蛋) | |
| ✅ 無 | ⚠️需要在K8s之前初始化 | |
| ✅ 進階(HTTP、TCP、腳本) | 基本 | |
| ✅ HAProxy 統計數據,普羅米修斯 | 有限 | |
| ✅ 20 多年 | 較新,經過較少的戰鬥測試 | |
| 過度殺傷 | ✅ 完美 |
💡 推薦:___HTMLTAG_302__HTMLTAG_303___
-
___HTMLTAG_305__HTMLTAG_306___生產: keepalived + HAProxy(成熟、獨立、可觀察)
___HTMLTAG_309__HTMLTAG_310___實驗室/小型: kube-vip(更簡單,無需額外伺服器)
5.3。 kube-vip 快速設定(參考)
___程式碼區塊_16___第 6 部分:製作注意事項
6.1。 HAProxy 生產調整
___程式碼區塊_17___6.2。使用 Prometheus 監控 HAProxy
___程式碼區塊_18___6.3。監控 keepalived
___程式碼區塊_19___💡 重點
-
___HTMLTAG_329__HTMLTAG_330___VIP 對於 K8s HA 至關重要 — 所有組件均通過 VIP 連接,無需硬編碼主 IP
___HTMLTAG_333__HTMLTAG_334___keepalived 透過 VRRP 協定管理 VIP 故障轉移,故障轉移 < 3 giây
___HTMLTAG_337__HTMLTAG_338___HAProxy 透過執行狀況檢查將 TCP 流量負載平衡到運作狀況良好的 API 伺服器
___HTMLTAG_341__HTMLTAG_342___nopreempt 模式可避免 MASTER 恢復時不必要的 VIP 抖動
___HTMLTAG_345__HTMLTAG_346___keepalived 中的健康檢查腳本,以確保 VIP 僅位於 HAProxy 健康的節點上
___HTMLTAG_349__HTMLTAG_350___測試故障轉移在部署K8s之前:關閉LB,關閉HAProxy,驗證VIP遷移
🎯 練習
練習 1:部署 HAProxy + keepalived
- 依照指示在 lb1 和 lb2 上安裝 HAProxy + keepalived
- 驗證 VIP 在 lb1 上處於活動狀態
- 存取 HAProxy 統計資訊頁面
練習 2:故障轉移測驗
- 測試 1:停止 lb1 上的 keepalived,驗證 VIP 移動到 lb2
- 測試 2:停止 lb1 上的 HAProxy,驗證自動降級
- 測試 3:重新啟動兩者,驗證正確狀態
- 透過連續 ping 測量故障轉移時間
練習 3:進階
- 為 HAProxy 新增 Prometheus 導出器
- 編寫一個通知腳本,在發生故障轉移時向 Slack 發送警報__HTMLTAG_385___
- 在單獨的檔案中設定 HAProxy 日誌記錄詳細資訊
📚 下一篇文章
在第5課:在所有節點上安裝containerd和kubeadm,我們將安裝容器執行時間(containerd)和kubeadm工具,為K8s HA叢集初始化做好準備。