裸機 Kubernetes:規劃生產環境叢集
裸機 Kubernetes 是直接在實體伺服器上運行叢集,而不是置於虛擬機器層內。這種方式可以提供較可預測的 CPU、記憶體、儲存及網絡資源,但機構亦要自行負責硬件生命周期、節點故障及叢集營運。
因此,生產環境叢集不只是執行 kubeadm 指令或準備幾部專屬伺服器。應把工作負載、故障模型、網絡、儲存、保安及復原流程一併規劃,確保首次部署後仍然容易支援。
部署前先界定生產環境目標
先列出叢集要運行的服務,記錄可用性目標、正常及高峰資源需求、有狀態資料、維護時段、復原目標、合規要求,以及負責日常營運的人員。
- 先由可用性開始。決定服務是否必須在節點、電力、網絡或控制平面故障期間繼續運作,再按要求設計冗餘。
- 營運模式同樣重要。應界定誰負責修補主機作業系統、管理 Kubernetes 版本、處理警報、更換硬件及批准變更。
小型開發叢集或可接受單一控制平面節點。面向客戶或承載重要業務的環境,通常需要獨立的高可用性設計、應付維護的額外容量,以及經測試的復原路徑。
提示:先寫下故障情境,再選擇伺服器規格。叢集應按某項組件不可用時仍能安全運作來規劃,而不只是按正常流量計算。
設計控制平面及工作節點角色
除非工作負載明確適合精簡叢集,否則應把控制平面職責與應用程式容量分開。控制平面運行 API 伺服器、排程器、控制器管理器,通常亦包括 etcd 成員;工作節點則運行應用程式 Pod 及節點服務。
- 如需高可用性,應規劃多個控制平面節點,並透過穩定的 API 端點連接。堆疊式 etcd 拓撲較簡單;外置 etcd 可分開更多組件,但需要較多主機及營運工作。
- 工作節點應保留足夠容量,即使失去一個節點,仍能符合應用程式請求、PodDisruptionBudget 及維護要求。應利用拓撲規則分散副本,不要只靠運氣。
應為 Kubernetes API 伺服器使用負載平衡器或虛擬 IP,並把機櫃、電力饋線、交換器及站點列為故障域。只有當配套網絡及電力設計也分開時,實體分隔才真正有價值。
按可分配容量規劃硬件
應按可分配資源計算容量,而不是只看硬件規格。Kubelet、容器執行時、系統 DaemonSet、監控、日誌、映像儲存及 Kubernetes 保留資源,均會佔用每個節點的一部分容量。
- 裸機設計適合資源需求較可預測或較高的服務;Dataplugs 關於擴展 SaaS 平台的相關指南,亦說明基礎設施選擇應配合應用程式的資源及營運要求。
- 應為滾動部署、故障轉移、映像下載、快取增長及短暫流量高峰預留空間,避免每個節點長期接近 CPU、記憶體或臨時儲存上限。 應規劃 ECC 記憶體、可靠的 SSD 或 NVMe 儲存、可行時使用冗餘電源、合適的網卡容量、遠端主控台,以及有記錄的韌體生命週期。這些都是營運依賴,不是可有可無的附加項目。
應記錄服務真正關注的效能指標,包括 CPU 飽和、記憶體壓力、磁碟延遲及 IOPS、網絡吞吐量、封包遺失及尾端延遲。測試時要涵蓋整條應用程式路徑,包括儲存及入口流量。
選擇叢集建立方式及容器執行時
應使用目前受支援的 Kubernetes 小版本,並確保控制平面、kubelet、kube-proxy、附加元件及應用程式整合均符合支援的兼容範圍。應在自動化中固定版本,並規劃升級,不要讓套件軟件庫替你決定版本。
以 kubeadm 建立叢集,是希望保留主機配置控制權,同時採用支援的引導及升級路徑的實用基礎。其配置應像應用程式基礎設施一樣保存及審核。
- 每個節點均應安裝符合 Container Runtime Interface 的容器執行時,設定兼容的 kubelet 及執行時 cgroup,並在節點加入前驗證內核、時間同步、DNS 及所需網絡設定。
- 應透過可重複的映像或配置流程建立主機,一致地套用基線套件、存取控制、監控代理程式、磁碟配置及節點標籤;再使用 Kubernetes 清單或 GitOps 流程管理叢集附加元件及應用程式。 不要把單一節點上的手動修改當作生產流程。如果替換伺服器不能按記錄好的自動化流程重新建立,硬件故障便會變成依賴個人記憶的問題。
提示:應以受控文件記錄叢集配置、節點清單、憑證、機密資料處理流程及復原指令,並為每項內容指定負責人。
規劃網絡及流量路徑
裸機環境不會自動提供雲端服務商的預設網絡設定。部署前應設計實體網絡、VLAN 或路由分段、Pod 及 Service CIDR、MTU、DNS、API 存取、入口、出口及負載平衡路徑,並避免與企業網絡及連接服務使用的重疊範圍。
- 應選擇符合路由、加密、可觀察性及 NetworkPolicy 要求的 CNI 外掛程式,確認它採用 Overlay、原生路由、BGP 或其他模式,並在實際交換器及防火牆上測試故障行為。
- 應定義外部流量如何到達 Service。MetalLB、設備、反向代理或其他負載平衡設計均可能適用,但必須記錄地址分配及故障轉移行為。
應測試東西向流量、DNS、入口、出口控制、節點替換,以及由管理網絡存取 API。節點顯示 Ready,不代表應用程式一定可連接,因為某條流量路徑可能從未被測試。
把儲存及備份視為兩項獨立設計
容器可以替換,但業務資料不能隨意丟失。應決定哪些工作負載需要持久磁碟區、需要甚麼效能及耐久性,以及儲存是屬於節點本地,還是由共享或複製系統提供。
- 如需要動態配置、快照、擴容或複製,應使用以 CSI 為基礎的儲存設計,並檢查驅動程式的 Kubernetes 支援、升級路徑、故障域及備份整合。
- 本地 NVMe 可以提供低延遲,但本地 PersistentVolume 仍然綁定節點,本身不代表高可用性。選用本地儲存時,應配合節點親和性,以及應用程式層面的複製或還原方案。
應定期備份 etcd,並透過儲存系統或應用程式原生備份保護業務資料。要在隔離環境測試還原、記錄復原時間,並確認事故期間仍能取得憑證、清單及外部依賴。
把保安及營運納入叢集設計
應一併加固主機作業系統及 Kubernetes API。限制存取管理,使用角色型存取控制及最小權限,保護 API 端點,輪換憑證及憑據,並界定機密資料如何在靜態儲存時加密,以及如何在叢集外處理。
- 應按工作負載採用 Pod Security Standards、NetworkPolicy、映像掃描及來源驗證、資源限制和准入控制。特權容器及主機掛載應只在有記錄及合理的情況下使用。
- 應集中收集指標、日誌及審計事件,並對 API Server 及 etcd 健康狀況、節點壓力、排程失敗、憑證到期、儲存延遲、入口錯誤及容器反覆重啟設定警報。
對有狀態的企業平台而言,Dataplugs 的企業 ERP 專屬伺服器指南提供穩定資源、整合、身份及營運規劃的相關背景;如果這些服務在 Kubernetes 上運行,同樣需要這些管理原則。
及早規劃升級及復原
應建立暫存叢集或具代表性的測試環境,演練 Kubernetes 升級、CNI 及 CSI 變更、節點替換、憑證輪換、備份還原及應用程式回復。在小版本升級前,應驗證 API 及准入 Webhook 是否兼容。
可行時每次只排空一個節點,遵守 PodDisruptionBudget,確認替換容量,並在維護期間監察服務健康。控制平面變更應按所選部署工具的升級次序進行,不要在沒有支援路徑的情況下跳過小版本。 可以問十個問題:叢集會運行哪些服務及資料?需要承受甚麼故障?需要多少控制平面及工作節點?故障域在哪裡?所選執行時、CNI、CSI、入口及負載平衡組件是否受支援?預留多少可分配容量?誰負責修補主機及 Kubernetes?備份存放在哪裡?如何測試完整還原?誰負責事故應對?
如果答案沒有記錄,叢集便未準備好投入生產。專屬伺服器可提供控制權及較可預測的實體資源,但韌性來自周邊設計及持續的營運紀律。
總結
裸機 Kubernetes 可以成為需要直接控制硬件、較可預測效能或一致私有基礎設施模式的工作負載的穩固基礎。只有把節點角色、實體故障域、網絡、儲存、保安及生命周期管理視為同一個系統設計,才能發揮其優勢。
Dataplugs 專屬伺服器為機構評估 Kubernetes 工作負載提供實體基礎。應由服務目標開始,建立可重複的節點,為故障及維護預留容量,並在叢集成為關鍵業務前測試升級及復原。
如需了解更多資料,請瀏覽 Dataplugs 網站或聯絡 sales@dataplugs.com。
