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命令滚动升级集群组件,确保兼容性。