🎯 課程目標__HTMLTAG_66___
完成本課程後,您將:
- ✅ 為所有節點安裝並更新 Ubuntu 24.04 LTS
- ✅ 設定 Kubernetes 所需的核心參數
- ✅ 永久關閉交換並了解原因
- ✅ 為整個叢集設定 NTP 同步__HTMLTAG_77___
- ✅ 強化 SSH 並設定防火牆規則
- ✅ 標準化主機名稱、主機檔案與 DNS 解析
第 1 部分:安裝 UBUNTU 24.04 LTS
1.1。為什麼選擇 Ubuntu 24.04 LTS?
-
___HTMLTAG_89__HTMLTAG_90___LTS(長期支援): 12 年支援(Ubuntu Pro 至 2036 年)
___HTMLTAG_93__HTMLTAG_94___核心 6.8+: 對 eBPF (Cilium)、cgroup v2、io_uring 的良好支持
___HTMLTAG_97__HTMLTAG_98___systemd 255+: 改進 cgroup v2 管理
___HTMLTAG_101__HTMLTAG_102___廣泛採用: 使用 K8s、Ceph 和 CNCF 工具進行了全面測試
⚠️ 注意: RHEL 9 / Rocky Linux 9 對於企業來說也是一個不錯的選擇。本指南使用 Ubuntu,但會在不同時註明 RHEL 指令。
1.2。基本設定
___程式碼區塊_0___第 2 部分:主機名稱與 DNS 解析__HTMLTAG_114___
2.1。在每個節點上設定主機名稱
___程式碼區塊_1___2.2。在所有節點上設定 /etc/hosts
___程式碼區塊_2___💡 提示: 在生產中,使用內部 DNS 伺服器(CoreDNS 或 BIND)而非 /etc/hosts。為簡單起見,本課程使用 /etc/hosts。
第 3 部分:KUBERNETES 的核心參數
3.1。為什麼需要客製化內核?
Kubernetes 需要啟用一些核心功能:
| 參數 | 值 | 原因 |
|---|---|---|
| net.bridge.bridge-nf-call-iptables__HTMLTAG_145___ | 1 | 透過 iptables 規則橋接流量(服務所需) |
| net.bridge.bridge-nf-call-ip6tables | 1 | 透過 ip6tables 的 IPv6 橋接流量__HTMLTAG_157___ |
| net.ipv4.ip_forward | 1 | 在介面之間轉送封包(Pod 網路) |
| net.ipv6.conf.all.forwarding | 1 | IPv6 轉送(如果使用雙堆疊) |
| fs.inotify.max_user_instances | 8192 | 對於許多容器需要inotify(檔案監視) |
| fs.inotify.max_user_watches | 524288 | Inotify 每個使用者觀看的次數 |
3.2。配置核心參數
___程式碼區塊_3___程式碼區塊_4
第 4 部分:關閉交換
4.1。為什麼必須關閉 Swap?
Kubelet 需要停用交換__HTMLTAG_203___(儘管 K8s 1.28+ 有 beta 交換支援)。原因:
- 交換會導致 容器延遲無法預測
- K8s 調度程式依據 物理記憶體___HTMLTAG_212__HTMLTAG_213___ 計算資源
- 交換隱藏的OOM問題,使調試變得困難
- etcd 和資料庫在交換時表現非常差__HTMLTAG_219___
4.2。永久關閉交換
___程式碼區塊_5___第 5 部分:NTP 時間同步
5.1。為什麼 NTP 極為重要?
-
___HTMLTAG_229__HTMLTAG_230___etcd: 使用時間戳進行領導者選舉,需要時脈偏差 < 500ms
___HTMLTAG_233__HTMLTAG_234___TLS 憑證: 根據時間驗證,時脈錯誤 → 憑證無效
___HTMLTAG_237__HTMLTAG_238___日誌相關性: 節點之間的日誌時間戳記必須符合
___HTMLTAG_241__HTMLTAG_242___Ceph: MON 仲裁請求時脈偏差 < 50ms
5.2。定時配置 (NTP)
___程式碼區塊_6___第 6 部分:SSH 強化
6.1。安全 SSH 設定
___程式碼區塊_7___6.2。設定 SSH 金鑰驗證
___程式碼區塊_8___第 7 部分:防火牆設定
7.1。用於控制平面節點的 UFW
___程式碼區塊_9___7.2。用於工作節點的 UFW
___程式碼區塊_10___💡 替代方案: 許多生產環境直接使用 nftables 或 iptables 而不是 UFW。 Cilium 也可以用主機策略取代節點級防火牆。
第 8 部分:其他自訂
8.1。停用無人值守升級(生產)
___程式碼區塊_11___8.2。配置 ulimit
___程式碼區塊_12___8.3。禁用透明大頁
___程式碼區塊_13___8.4。 cgroup v2 驗證
___程式碼區塊_14___第 9 部分:自動化 — 準備所有節點的腳本
9.1。節點準備腳本(在所有K8s節點上執行)
___程式碼區塊_15___9.2。在所有節點上執行腳本
___程式碼區塊_16___第 10 部分:驗證清單
10.1。每個節點的清單
___程式碼區塊_17___💡 重點
-
___HTMLTAG_293__HTMLTAG_294___核心模組 K8s Pod 網路需要 Overlay 與 br_netfilter
___HTMLTAG_297__HTMLTAG_298___ip_forward = 1 允許 Pod 到 Pod 的流量通過節點
___HTMLTAG_301__HTMLTAG_302___交換必須永久關閉 — 如果開啟交換,kubelet 將拒絕啟動
___HTMLTAG_305__HTMLTAG_306___NTP 同步 對於 etcd、TLS 憑證和 Ceph 至關重要
___HTMLTAG_309__HTMLTAG_310___SSH 強化: 僅基於金鑰的驗證,停用密碼登入
___HTMLTAG_313__HTMLTAG_314___自動化腳本幫助一致地準備所有節點
🎯 練習
練習 1:準備所有節點
- 在所有 7 個虛擬機器(或伺服器)上執行prepare-k8s-node.sh
- 在每個節點上執行 verify-node.sh,確保所有檢查通過
- 1個master和1個worker的verify-node.sh結果截圖
練習 2:基準 NTP
- 檢查所有節點之間的時脈偏移:
chronyc 來源 -v___HTMLTAG_336__HTMLTAG_337___ 確保偏移 < 1ms giữa tất cả nodes- 嘗試中斷 NTP,更改時間,看看 chrony 需要多長時間才能重新同步
練習 3:RHEL 9 變體__HTMLTAG_344___
- 為 RHEL 9 / Rocky Linux 9 重寫prepare-k8s-node.sh
- 取代 apt → dnf、ufw → 防火牆
- 在 1 個虛擬機器上進行測試以驗證
📚 下一篇文章
在第4課:Kubernetes API伺服器的負載平衡器中,我們將安裝keepalived + HAProxy來為K8s API伺服器建立虛擬IP,確保控制平面存取的HA。