kube-vip使用说明

一、kube-vip总体介绍

1、总体说明

kube-vip 是一个专为 Kubernetes 设计的轻量级开源工具,它通过在集群节点间进行领导者选举来管理一个虚拟IP(VIP),为服务(特别是LoadBalancer类型)提供高可用的外部访问入口;它完美解决了在裸金属、边缘或混合云等缺乏云供应商负载均衡器的环境中,如何实现服务高可用与负载均衡的难题,其核心机制是让当选的领导者节点将VIP绑定到自己的外部网络接口并处理流量,一旦该节点故障,VIP会在秒级内自动迁移到新的健康节点,从而确保服务不中断。

2、官网地址

二、详细说明

1、kube-vip 整体架构图

架构图描述:

这张架构图展示了 kube-vip 在 Kubernetes 集群中的部署架构。图中包含三个 Kubernetes 控制平面节点,每个节点都配备两张网卡:

  • eth0:用于 Kubernetes 内部通信,位于 10.0.0.0/24 网段

  • eth1:用于外部网络通信,位于 192.168.1.0/24 网段,kube-vip 在此接口上绑定虚拟 IP(VIP:192.168.1.100)

核心组件交互流程

  1. kube-vip Pod 以 DaemonSet 或静态 Pod 方式部署在每个控制平面节点

  2. 通过 领导者选举 机制(基于 Kubernetes Lease API)选举出当前持有 VIP 的节点

  3. 领导者节点(图中节点2)在其 eth1 接口上绑定 VIP(192.168.1.100)

  4. 外部客户端通过路由器访问 VIP,流量被路由到领导者节点

  5. 备用节点持续监控领导者状态,准备在故障时接管 VIP

高可用保障

  • 三个节点通过心跳检测相互监控

  • 领导者选举确保任何时候只有一个节点持有 VIP

  • 当领导者故障时,备用节点在数秒内完成故障转移

2、节点故障时VIP迁移过程


故障迁移示意图描述

阶段1:正常状态(蓝色线条部分)

  • 外部客户端通过虚拟IP(VIP: 192.168.1.100)访问Kubernetes服务

  • 流量通过eth1接口进入节点2,转发到kube-vip Pod(领导者)

  • 客户端流量实际到达节点2(也可做负载均衡到三个节点,图中未画出)

  • 三个节点的kube-vip Pod之间保持心跳检测,确保集群状态一致

阶段2:故障检测(黄色线条部分)

  • 节点2发生故障(硬件、网络或服务问题)

  • 节点1和节点3的kube-vip Pod通过心跳检测发现与节点1的通信超时

  • 备用节点确认故障状态,准备发起新的领导者选举

阶段3:领导者选举(黄色线条部分)

  • 节点1和节点3参与基于Kubernetes Lease API的分布式领导者选举

  • 节点1成功获取Lease锁,成为新的领导者节点

阶段4:VIP迁移

  • 新领导者节点1在其eth1接口上绑定相同的VIP(192.168.1.100)

  • 节点1发送无偿ARP广播,通知网络设备VIP的MAC地址已变更

  • 客户端收到ARP响应后更新ARP缓存

  • kube-vip更新Kubernetes Service状态,从端点列表中排除故障节点

阶段5:恢复完成

  • 外部客户端通过同一个VIP继续访问服务,但流量被路由到节点1

  • 服务完全恢复,客户端通常不会感知到故障切换

  • 节点1和节点3继续保持心跳检测,准备下一次故障转移

三、安装部署

使用DaemonSet 方式部署

1. 环境准备

# 设置环境变量
export VIP=192.168.1.110          # 虚拟IP地址,与主机同网段且未被占用
export INTERFACE=ens160            # 网络接口名称(通过 ip a 查看)
export KVVERSION=v1.1.2          # kube-vip 版本号

2. 获取最新版本(可选)

# 需要安装 curl 和 jq
KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name")

3. 应用 RBAC 权限

kubectl apply -f https://kube-vip.io/manifests/rbac.yaml

4. 生成并应用 DaemonSet 清单

# 使用 Docker
alias kube-vip="docker run --network host --rm ghcr.io/kube-vip/kube-vip:$KVVERSION"
kube-vip manifest daemonset \
  --interface $INTERFACE \
  --address $VIP \
  --inCluster \
  --taint \
  --controlplane \
  --services \
  --arp \
  --leaderElection | tee kube-vip-ds.yaml
# 去掉nodeaffinity
# 应用清单
kubectl apply -f kube-vip-ds.yaml

说明:国内镜像可拉取

swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/kube-vip/kube-vip:v1.1.2

5. 验证安装

kubectl get pods -n kube-system | grep kube-vip

6、venus安装

安装venus-plugin-vip插件即可

四、功能验证

需要将kube-vip-ds.yaml拆分为配置文件configmap和daemonset,crbdl

1、修改vip的ip

kubectl edit cm -n kube-system       kube-vip-config
#触发应用
kubectl rollout restart daemonset kube-vip-ds -n kube-system

2、修改vip的节点

修改开源的nodeAffinity。本人自定义了一个,如:

kubectl label nodes node2 ghostcloud.cn/vip=true

这样daemonset就会部署在大了这个标签的节点上了

3、损坏vip的节点

将vip所在节点,网卡损坏后,vip能迁移到新节点。

4、初始化不配置vip和网卡名称

可行,kube-vip-config中即使不配置address和interface,pod正常启动。

5、是否需要配置路由和网关

根据实际需要查看,因为多网卡情况下,配置的网络可能不从默认路由走出来。

五、注意事项

  1. 网络要求:VIP 必须与所有控制平面节点在同一子网内

  2. 模式选择:支持 ARP(二层)、BGP(三层)和路由表模式

  3. 节点数量:控制平面节点最少需要 3 台,2 台无法正常工作

  4. 网卡名称:部署vip的节点的网卡名称必须相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫神

留下您的建议或鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值