使用kube-vip实现集群VIP访问
使用kube-vip实现集群VIP访问
On this page
k8e集群默认内置了api-server的地址访问负载机制,当你安装成功后,任意宕机一台机器,都可以访问任何一台存活的api-server机器来和集群交互。因为缺少VIP,如果你部署了管理容器集群的面板是,一般都需要你提供api-server的VIP地址。这个场景一般我们通过haproxy来实现,但是考虑到云原生的发展,kube-vip进入候选组件,它支持k8s control plan VIP的实现。本文通过简单的几步来介绍如何部署kube-vip。
安装kube-vip
kube-vip项目实现了两大功能Service LB和k8s control plan VIP,很容易让人陷入复杂的配置。这里简单来讲,你需要2样配置:
1、rabc.yaml和kube-vip-ds.yaml kubevip配置文件,支持权限和部署脚本配置 2、kube-vip镜像 镜像使用最新的版本,目前为v0.5.12
官方文档介绍如何生成部署脚本,个人感觉挺懵人的,直接提供配置文件:
kubectl apply -f https://kube-vip.io/manifests/rbac.yaml
使用daemonset部署kube-vip
默认kube-vip支持static pod和daemonset两种模式,建议选择daemonset模式。注意,需要手工修改网卡名称和VIP IP。 初始化变量如下: 用于控制平面的VIP地址设置为:
export VIP=192.168.0.40
将INTERFACE名称设置为将在其上联通VIP的控制平面的接口名称。在许多Linux发行版中,这可以通过ip a命令找到。
export INTERFACE=ens160
通过解析GitHub API获取kube-vip发布的最新版本。此步骤需要安装jq和curl。
KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name")
或者手工指定:
export KVVERSION=v0.5.12
初始化 kubevip 的权限
kubectl apply -f https://kube-vip.io/manifests/rbac.yaml
然后配置 kubevip 方案,针对 k8e containerd 创建 kubevip 命令:
alias kube-vip="ctr image pull ghcr.io/kube-vip/kube-vip:$KVVERSION; ctr run --rm --net-host ghcr.io/kube-vip/kube-vip:$KVVERSION vip /kube-vip"
生成 Yaml 文件kubevip-ds.yaml:
kube-vip manifest daemonset \
--interface $INTERFACE \
--address $VIP \
--inCluster \
--taint \
--controlplane \
--services \
--arp \
--leaderElection > kubevip-ds.yaml
kubectl apply -f kubevip-ds.yaml 创建 kubevip 服务
[root@ip-172-31-6-27 ~]# kubectl get pods -n kube-system | grep -i vip
kube-vip-ds-ffd78 1/1 Running 0 5m22s
kube-vip-ds-hjnfg 1/1 Running 0 5m22s
kube-vip-ds-qxbxz 1/1 Running 0 5m22s
验证 KubeVIP 对 APIServer 的效果
这里 VIP 会被 kubevip daemonset 分配到一台主机上,当你关闭这台主机,kubevip 会自动把 VIP 迁移到另外一台节点上。每次只有一台主机来充当 VIPServer 的入口 IP。对于容器管理平台接入集群可以实现高可用。
参考资料
- https://kube-vip.io/docs/installation/daemonset/