Debian環境下實現Kubernetes高可用部署指南
/etc/hosts
文件或DNS實現主機名解析(如192.168.1.10 master01
、192.168.1.11 master02
);sudo swapoff -a
禁用Swap,并注釋/etc/fstab
中的Swap條目(Kubernetes要求);/etc/containerd/config.toml
)。在所有節點上執行以下操作:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo tee /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 鎖定版本,避免意外升級
kubeadm init
命令,指定--control-plane-endpoint
(負載均衡器的VIP,如192.168.1.100:6443
)和--pod-network-cidr
(Pod網絡CIDR,如10.244.0.0/16
):sudo kubeadm init --control-plane-endpoint=192.168.1.100:6443 --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
選擇支持多Master的網絡插件(如Calico),執行以下命令:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
等待插件Pod全部Running
(kubectl get pods -n calico-system
)。
kubeadm token create --print-join-command
,記錄輸出(包含token和CA證書哈希);sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane
在Worker節點上執行kubeadm join
命令(使用第一個Master節點生成的token和CA證書哈希,無需--control-plane
參數):
sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
kubeadm init
生成的證書(位于/etc/kubernetes/pki/etcd
),確保證書有效期(默認1年);etcdctl snapshot save
命令),存儲至異地。192.168.1.100:6443
(VIP)的流量分發至所有Master節點的6443
端口;/healthz
端點),自動剔除故障節點;--leader-elect=true
參數(默認開啟)實現Leader選舉,同一時間僅一個實例處理請求,故障時自動切換。kubectl get nodes
所有節點應顯示Ready
狀態;sudo systemctl stop kube-apiserver
),觀察負載均衡器是否將流量切換至其他Master;docker rm -f etcd
),驗證etcd集群是否自動恢復;kubectl get pods --all-namespaces
所有Pod應保持Running
或Completed
狀態。etcdctl snapshot save /backup/etcd-$(date +%F).snap
)和控制平面配置;kubeadm upgrade
命令滾動升級集群組件,確保兼容性。