前言
雖然現在大多數人都會用 kubeadm 或託管式的雲端服務來建構 Kubernetes 叢集,但如果你想真正理解 K8s 各個元件之間的關係與運作原理,透過二進位方式手動安裝是最好的學習途徑。
這篇文章記錄了從零開始,使用二進位檔案手動部署一套具備高可用性的 Kubernetes v1.28.0 叢集的完整過程。整個過程涵蓋環境準備、憑證產生、元件配置、網路插件安裝到最終驗證。
環境規劃
| 主機名稱 | IP 位址 | 角色 | 主要元件 |
|---|---|---|---|
| Master01 | YOUR_MASTER1_IP | Master | kube-apiserver, kube-controller-manager, kube-scheduler, etcd, kubelet, kube-proxy, haproxy, keepalived |
| Master02 | YOUR_MASTER2_IP | Master | 同上 |
| Master03 | YOUR_MASTER3_IP | Master | 同上 |
| Node01 | YOUR_NODE1_IP | Worker | kubelet, kube-proxy |
| Node02 | YOUR_NODE2_IP | Worker | kubelet, kube-proxy |
| VIP | YOUR_VIP_IP | 虛擬 IP | — |
網段規劃:
- 主機網段:YOUR_HOST_SUBNET/24
- Service 網段:10.96.0.0/12
- Pod 網段:172.16.0.0/12
整體安裝流程概覽
整個安裝過程分為 16 個步驟,我將每個步驟的核心要點整理如下:
Step 1:基礎環境配置
- 配置靜態 IP 位址(支援 IPv4/IPv6 雙棧)
- 設定主機名稱與 /etc/hosts
- 配置 YUM/APT 軟體源
- 安裝基礎工具(wget, vim, net-tools, git, curl 等)
- 關閉防火牆、SELinux、Swap
- 配置時間同步(chrony)
- 載入核心模組(overlay, br_netfilter)
- 調整核心參數(sysctl:開啟 IP 轉發、bridge-nf-call-iptables 等)
- 配置 IPVS 模組
- 配置 SSH 免密登入
Step 2:安裝容器執行環境
有兩種選擇:
- Containerd(推薦):Kubernetes 1.24 之後已移除 dockershim,建議直接使用 Containerd
- Docker + cri-dockerd:如果仍需使用 Docker,需要額外安裝 cri-dockerd 作為 CRI 介面
同時下載 K8s 和 etcd 的二進位檔案,解壓並分發到各節點。
Step 3:產生 TLS 憑證
這是二進位安裝中最繁瑣但也最重要的步驟。需要產生以下憑證:
| 憑證 | 用途 |
|---|---|
| etcd CA + 伺服器/客戶端憑證 | etcd 叢集內部通訊加密 |
| Kubernetes CA | K8s 元件間的信任根 |
| kube-apiserver 憑證 | API Server 對外服務的 TLS |
| kube-controller-manager 憑證 | Controller Manager 與 API Server 通訊 |
| kube-scheduler 憑證 | Scheduler 與 API Server 通訊 |
| kube-proxy 憑證 | kube-proxy 與 API Server 通訊 |
| admin 憑證 | kubectl 管理用 |
| Front Proxy CA + 憑證 | API Aggregation 使用 |
| Service Account 金鑰對 | 簽發和驗證 ServiceAccount Token |
使用 cfssl 工具產生所有憑證,並分發到對應節點。
Step 4:配置 etcd 叢集
在三個 Master 節點上配置 etcd 叢集,每個節點都有自己的 etcd 配置檔與 systemd service。etcd 使用 TLS 加密通訊,叢集模式為靜態成員發現。
Step 5:高可用配置
提供兩種高可用方案:
- NGINX 方案:在每個節點上部署 NGINX 做 4 層反向代理,將 kube-apiserver 的請求負載均衡到三個 Master
- Keepalived + HAProxy 方案:使用 VIP 實現 API Server 的高可用,HAProxy 負責負載均衡,Keepalived 負責 VIP 漂移
Step 6:配置 K8s 核心元件
- kube-apiserver:配置 Service、審計策略、准入控制器、etcd 連線等
- kube-controller-manager:配置叢集簽名憑證、Service Account 金鑰、CIDR 分配等
- kube-scheduler:配置排程策略
每個元件都建立對應的 systemd service 檔案和 kubeconfig。
Step 7:TLS Bootstrapping 配置
配置 kubelet 的 TLS Bootstrapping 機制,讓 Worker 節點的 kubelet 可以自動向 API Server 申請憑證。需要建立 bootstrap token 和對應的 ClusterRoleBinding。
Step 8:Worker 節點配置
在 Worker 節點上配置 kubelet 和 kube-proxy:
- kubelet 負責管理節點上的 Pod 生命週期
- kube-proxy 負責實作 Service 的網路轉發(IPVS 模式)
Step 9:安裝 CNI 網路插件
提供兩個選擇:
- Calico:成熟穩定,支援 NetworkPolicy
- Cilium:基於 eBPF,效能更好,功能更豐富
Step 10-11:安裝核心附加元件
- CoreDNS:叢集內部 DNS 服務
- Metrics Server:提供資源使用率指標,支援 HPA 和
kubectl top
Step 12:叢集驗證
完整的驗證流程包括:
- 部署 Pod 並確認正常運行
- 驗證 DNS 解析(同 namespace 和跨 namespace)
- 確認各節點可存取 kubernetes SVC 的 443 和 kube-dns 的 53 端口
- 驗證 Pod 之間的連通性
- 測試多副本部署的分散情況
Step 13-14:安裝管理介面
- Kubernetes Dashboard:Web UI 管理介面
- Ingress Controller:七層流量入口
Step 15-16:額外功能
- IPv6 雙棧測試
- kubectl 命令列自動補全
為什麼要學二進位安裝?
在實際生產中,我並不建議所有人都用二進位方式安裝 K8s——kubeadm 或託管服務在大多數場景下是更好的選擇。但二進位安裝有它獨特的學習價值:
- 深入理解各元件的角色與依賴關係:你會清楚知道 API Server 需要哪些憑證、Controller Manager 如何連接 etcd 等
- 憑證體系的完整認知:手動產生憑證的過程讓你真正理解 K8s 的安全架構
- 排錯能力提升:遇到叢集問題時,你知道每個元件的配置在哪裡、日誌怎麼看
- 自訂能力更強:可以精確控制每個元件的啟動參數
注意事項
- 文中的 IP 位址、密碼、Token 等敏感資訊都需要根據你自己的環境替換
- 建議在虛擬機環境中先練習,確認流程無誤後再用於正式環境
- Kubernetes 1.24+ 已移除 dockershim,優先選擇 Containerd 作為容器執行環境
- 生產環境務必啟用 RBAC、NetworkPolicy 和審計日誌

發佈留言