在Ubuntu上实现Kubernetes高可用需围绕控制平面高可用和节点冗余展开,核心步骤如下:
swapoff -a
并修改 /etc/fstab
永久生效。ufw disable
(生产环境建议配置防火墙规则)。kubeadm
、kubelet
、kubectl
。使用 kubeadm init
并指定负载均衡器地址(后续会通过HAProxy+Keepalived实现):
sudo kubeadm init --control-plane-endpoint <VIP>:6443 --upload-certs
其中 <VIP>
为虚拟IP(由HAProxy+Keepalived提供),初始化后配置 kubectl
:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
/etc/haproxy/haproxy.cfg
,将流量分发到多个Master节点的API Server(端口6443)。frontend kubernetes-api
bind *:6443
mode tcp
default_backend kubernetes-api-backend
backend kubernetes-api-backend
mode tcp
balance roundrobin
server master1 <Master1_IP>:6443 check
server master2 <Master2_IP>:6443 check
server master3 <Master3_IP>:6443 check
sudo apt install keepalived
配置 /etc/keepalived/keepalived.conf
,定义VIP和优先级,例如:vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress {
<VIP>
}
}
在其他Master节点上执行 kubeadm join
,加入控制平面集群,确保多个Master节点共同提供服务。
kubeadm join
加入集群。affinity
和 anti-affinity
规则,将副本分散到不同Node节点,避免单点故障。kubectl get nodes # 确保所有节点状态为Ready
kubectl get pods -A # 检查系统组件Pod是否正常运行