You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kubespray结合KubeVIP部署多主HA Kubernetes集群失败

Kubespray结合KubeVIP部署多主HA Kubernetes集群失败

我太懂你现在的糟心感受了——用Kubespray搭带KubeVIP的多主K8s集群,居然卡在TASK [kubernetes/control-plane : Kubeadm | Create kubeadm config]这一步超时,连VIP影子都看不到,折腾半天没进展确实头疼。咱们一步步拆解问题,从基础到细节排查:

先确认网络基础配置有没有踩坑

  • 验证网卡接口是否正确:你配置的kube_vip_interface: ens192,别光看配置文件,手动在每个控制节点跑ip link show确认这个接口真的存在,而且确实是承载节点业务IP的网卡。有些虚拟化环境(比如VMware、Proxmox)里,网卡名可能会被自动改成ens3、eth0这类,配错接口的话KubeVIP根本没法绑定VIP。
  • 检查ARP通信与端口放行:因为你开了kube_vip_arp_enabled: true,ARP包是KubeVIP实现VIP漂移的关键。先在控制节点上跑arping 192.168.2.63,看能不能收到其他节点的响应;同时确认节点间的防火墙/安全组没有拦截ARP流量,以及TCP 6443端口(apiserver的通信端口)——kubeadm生成配置时需要连接apiserver,超时大概率是这个链路不通。

排查KubeVIP组件是否正常启动

部署失败后,先看看节点上有没有KubeVIP的痕迹:

  • 用docker ps -a(或者crictl ps -a,如果用containerd)检查有没有kube-vip相关的容器。如果容器没启动,直接看容器日志找原因:docker logs <kube-vip容器ID>,常见的报错比如找不到指定网卡、缺少CAP_NET_ADMIN权限(Kubespray理论会自动配置,但偶尔会出问题)。
  • 如果容器根本没创建,那可能是Kubespray的KubeVIP模板渲染有问题,你可以去节点上看看生成的KubeVIP配置文件(一般在/etc/kubernetes/manifests/目录下),有没有参数写错,比如VIP、网卡名是不是和你配置的一致。

确认kube_proxy_strict_arp配置生效

你已经设置了kube_proxy_strict_arp: true,这是KubeVIP正常工作的必要条件(避免kube-proxy干扰ARP请求),但得确认它真的生效了:

  • 去节点上打开/var/lib/kube-proxy/config.conf,检查strictARP字段是不是true。如果没生效,可能是Kubespray的配置优先级问题,你可以先手动在每个控制节点修改这个配置,重启kube-proxy服务(systemctl restart kube-proxy),再重新跑Kubespray部署。

揪出kubeadm配置超时的核心原因

这个任务超时,本质上是kubeadm没法连接到VIP上的apiserver(192.168.2.63:6443),因为VIP没绑定或者apiserver没起来:

  • 任务超时的时候,立刻在控制节点上手动执行curl https://192.168.2.63:6443/version -k,看看能不能拿到响应。如果不通,直接指向VIP未绑定或者网络阻断的问题。
  • 别只看Kubespray的任务失败提示,去翻ansible的详细日志(比如ansible-playbook输出的日志文件),找kubeadm命令执行时的stderr输出——这里面会有具体的报错,比如证书验证失败、apiserver连接超时等,是排查的关键。

容易忽略的细节检查

  • 时间同步:K8s对节点时间同步要求极高,如果控制节点之间时间差超过几秒,证书验证会失败,apiserver启动不了,VIP自然也没法工作。用timedatectl检查每个节点的时间,确保都同步到同一个NTP服务器。
  • 主机名与DNS解析:Kubespray要求节点能互相解析主机名和VIP。在每个节点上ping其他节点的主机名,看看能不能通;也可以检查/etc/hosts文件,确认有没有正确配置节点IP和主机名的映射(虽然KubeVIP会处理VIP,但DNS解析异常也会干扰kubeadm流程)。

快速验证KubeVIP本身是否正常

如果上面的排查都没头绪,你可以手动在一个控制节点上启动KubeVIP,验证它能不能绑定VIP:

  1. 先拉取稳定版镜像:docker pull ghcr.io/kube-vip/kube-vip:v0.6.4
  2. 手动生成并部署KubeVIP的Pod配置:
docker run --network host --rm ghcr.io/kube-vip/kube-vip:v0.6.4 manifest pod --interface ens192 --vip 192.168.2.63 --controlplane --arp --leaderElection | kubectl apply -f -
  1. 运行后用ip a检查ens192接口,看有没有192.168.2.63的地址。如果手动操作能成功绑定VIP,说明是Kubespray的部署流程或者参数传递有问题,你可以对比手动生成的配置和Kubespray生成的配置,找出差异点。

备注:内容来源于stack exchange,提问作者Mohammad Reza Ghahremani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:54:43