kube-vip 是 Kubernetes 集群中用于提供高可用 LoadBalancer 的工具,它通过 ARP 或 BGP 协议在多个节点间共享一个虚拟 IP,实现服务的高可用。搭建高可用 Kubernetes 集群的基本配置方案:在所有 master 节点安装 kube-vip,配置 systemd 服务,使用 Cloud Controller Manager 模式部署,设置 VIP 地址和接口,生成证书并加入集群。核心命令:curl -sfL https://kube-vip.io/manifests/v0.8.0/kube-vip.yaml | kubectl apply -f -;然后在每个控制平面节点运行 kube-vip manifest daemonset --interface $NET_INTERFACE --vip $VIP --arp --leaderElection --controlplane --inClusterConfig --services --servicesync 等配置。
安装 kube-vip
在所有控制平面节点上执行以下命令: wget -O /usr/local/bin/kube-vip https://github.com/kube-vip/kube-vip/releases/download/v0.5.12/kube-vip_0.5.12_linux_amd64 chmod +x /usr/local/bin/kube-vip mkdir -p /etc/kubernetes/kube-vip/ kube-vip manifest daemonset \ --interface eth0 \ --vip 192.168.1.240 \ --arp \ --leaderElection \ --controlplane \ --inClusterConfig \ --services \ --servicesync \ | kubectl apply -f -
配置 kube-vip systemd 服务
创建 /etc/systemd/system/kube-vip.service 文件: [Unit] Description=Kube-Vip After=network-online.target [Service] User=root ExecStartPre=-/bin/mkdir -p /etc/kubernetes/kube-vip ExecStart=/usr/local/bin/kube-vip manager \ -interface=ens192 \ -vip=192.168.20.10 \ -leaderElection \ -arp \ -controlplane \ -services \ -servicesync \ -inClusterConfig \ Restart=always RestartSeconds=5 [Install] WantedBy=multi-user.target
高可用控制平面部署步骤
1. 准备三台 master 节点,确保 kubeadm 已初始化第一个节点。2. 在第一个 master 上生成 kube-vip 云控制器配置:cat >> kube-vip-ccm.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: kube-vip namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-vip roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kube-vip namespace: kube-system EOF kubectl apply -f kube-vip-ccm.yaml
加入其他控制平面节点
在其他 master 节点上运行:kubeadm join 192.168.1.100:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx --control-plane --certificate-key xxx。启动 kube-vip 服务:systemctl daemon-reload && systemctl enable kube-vip --now。验证 VIP 漂移:ip a show dev ens192,检查 VIP 是否绑定到 leader 节点。
使用 BGP 模式配置
如果使用 BGP,需要配置 router-id 和 peers:kube-vip manager -interface eth0 -vip 10.0.0.100 -leaderElection -bgp -bgpRouterID=10.0.0.1 -bgpPeers=10.0.0.2:1,10.0.0.3:1 -controlplane -services。确保网络设备支持 BGP 并配置相应的 ASN。
验证高可用集群
kubectl get nodes -o wide,检查所有节点 Ready。创建 LoadBalancer 服务:kubectl expose deployment nginx --port=80 --type=LoadBalancer --name=nginx-lb。kubectl get svc nginx-lb,查看 EXTERNAL-IP 为 VIP。停止 leader 节点 kube-vip 服务,观察 VIP 自动漂移到其他节点。
常见问题 FAQ
Q: kube-vip VIP 不漂移怎么办?
A: 检查接口名称是否正确、防火墙是否允许 ARP 流量、systemd 服务日志 journalctl -u kube-vip。
Q: ARP 模式和 BGP 模式选哪个?
A: ARP 适合简单环境无 BGP 支持,BGP 适合云环境或大型网络,支持多跳路由。
Q: 如何卸载 kube-vip?
A: kubectl delete -f kube-vip.yaml;systemctl stop kube-vip && systemctl disable kube-vip;rm /usr/local/bin/kube-vip。
Q: LoadBalancer 服务一直 Pending?
A: 确保 kube-vip daemonset 运行正常,检查 RBAC 权限和云控制器配置。