Kubernetes 生產環境建置 (Cloud & Kubeadm)
當你要將 K8s 用於 生產環境 (Production) 時,你需要考慮 高可用性 (High Availability, HA)、安全性 (Security)、備份 (Backup) 與 升級 (Upgrade) 等問題。
選擇你的建置方式
主要有兩大類途徑:
1. 託管式 Kubernetes (Managed Kubernetes) - 推薦
這是最省力、最穩定且最安全的選擇。雲端供應商會幫你管理 Control Plane (Master Node),你只需要管理 Worker Nodes。
- Amazon Elastic Kubernetes Service (EKS)
- Google Kubernetes Engine (GKE)
- Azure Kubernetes Service (AKS)
優點:
- SLA 保證:Control Plane 由雲端廠商維護,保證可用性。
- 自動升級:點個按鈕就能升級 K8s 版本。
- 整合性:原機整合 LoadBalancer, VPC, IAM 等雲端資源。
缺點:
- 費用:通常需要支付 Control Plane 管理費,加上 Worker Node 的費用。
2. 自建 Kubernetes (Self-Managed)
如果你需要在地端機房 (On-Premise) 架設,或者想省錢、想深度客製化,你可以選擇自建。
- kubeadm: K8s 官方提供的標準叢集建置工具。適合學習與標準化建置。
- K3s / RKE2: SUSE (Rancher) 推出的輕量級/企業級發行版,安裝非常簡單,適合 Edge 端或地端。
- Kubespray: 基於 Ansible 的佈署工具,適合大規模佈署。
使用 kubeadm 建置叢集 (簡要流程)
這需要你有 Linux 系統管理經驗。你需要準備至少 2~3 台 Linux 機器 (一台 Master,一台以上 Worker)。
1. 準備環境 (所有節點)
- 關閉 Swap:
sudo swapoff -a(K8s 要求)。 - 安裝 Container Runtime (e.g., containerd)。
- 安裝
kubeadm,kubelet,kubectl。
# Ubuntu/Debian 範例
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
2. 初始化 Control Plane (Master 節點)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
參數說明:--pod-network-cidr: 指定 Pod 的 IP 網段。這個網段必須與你後續選擇的 CNI (Container Network Interface) 插件相容配置。例如 Flannel 預設使用 10.244.0.0/16;如果你選擇 Calico,通常預設是 192.168.0.0/16。
執行成功後,它會顯示一行 kubeadm join ... 指令,請記下來。
3. 設定 kubectl (Master 節點)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安裝網路插件 (CNI)
K8s 需要 CNI Plugin 才能讓 Pod 互通。常用的有 Flannel, Calico, Cilium。 以 Flannel 為例:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
5. 加入 Worker Node (Worker 節點)
在其他機器上,執行步驟 2 產生的 join 指令:
sudo kubeadm join <MASTER_IP>:6443 --token <...> --discovery-token-ca-cert-hash sha256:<...>
總結
- 初學者/小型專案:使用 Minikube 或 K3s。
- 企業/正式產品:強烈建議使用 GKE, EKS, AKS。
- 地端機房:使用 RKE2 或 kubeadm。