基于kube-vip 0.4.4搭建BGP负载集群

环境:

kubernetes:v1.23.6

containerd:1.6.4

10.10.1.1 master01

10.10.1.2 master02

10.10.1.3 master03

10.10.1.4 node04

10.10.1.5 node05

10.10.1.6 node06

10.10.1.100 kubernetes-VIP

前提条件:

在所有节点上安装完kubernetes和containerd

由于BGP需要走三层交换,所以必须有三层交换机

将上述所有的节点写入了hosts文件内

在master01上面操作:

mkdir -p /etc/kubernetes/manifests/ # 创建目录

export VIP=10.10.1.100 # 设置vip地址

export INTERFACE=lo # 设置网卡,将IP绑定在lo上,可以避免很多麻烦

ctr image pull ghcr.io/kube-vip/kube-vip:v0.4.4 或者 ctr image pull docker.io/plndr/kube-vip:v0.4.4 # 下载镜像

ctr run –rm –net-host docker.io/plndr/kube-vip:v0.4.4 vip /kube-vip manifest pod –interface $INTERFACE –vip $VIP –controlplane –services –bgp –localAS 65000 –bgpRouterID 10.10.1.1 –bgppeers 10.10.1.2:65000::false,10.10.1.3:65000::false | tee /etc/kubernetes/manifests/kube-vip.yaml # 生成yaml文件

–bgp 启用 BGP 对等互连

–localAS 对等的AS,默认是65000,具体还要根据交换机来调整

–bgpRouterID 本地节点IP

–bgppeers BGP 对等体列表,一般为 <address:AS:password:multihop>

kubeadm init –image-repository=registry.aliyuncs.com/google_containers –kubernetes-version=v1.23.6 –apiserver-advertise-address=10.10.1.1 –cri-socket=/run/containerd/containerd.sock –pod-network-cidr=10.244.0.0/16 –control-plane-endpoint=kubernetes-VIP:6443 –upload-certs # 执行初始化

–control-plane-endpoint 指名VIP地址

初始化操作会生成两个join命令,上面那个给master使用

kubeadm join kubernetes-VIP:6443 –token ******************** \

–discovery-token-ca-cert-hash sha256:************************* \

–control-plane –certificate-key ***************************

kubeadm join kubernetes-VIP:6443 –token *********************** \

–discovery-token-ca-cert-hash sha256:********************************

在master02和03上面操作:

kubeadm join kubernetes-VIP:6443 –control-plane # 执行join命令

ctr run –rm –net-host docker.io/plndr/kube-vip:v0.4.4 vip /kube-vip manifest pod –interface $INTERFACE –vip $VIP –controlplane –services –bgp –localAS 65000 –bgpRouterID 10.10.1.2 –bgppeers 10.10.1.1:65000::false,10.10.1.3:65000::false | tee /etc/kubernetes/manifests/kube-vip.yaml

ctr run –rm –net-host docker.io/plndr/kube-vip:v0.4.4 vip /kube-vip manifest pod –interface $INTERFACE –vip $VIP –controlplane –services –bgp –localAS 65000 –bgpRouterID 10.10.1.3 –bgppeers 10.10.1.1:65000::false,10.10.1.2:65000::false | tee /etc/kubernetes/manifests/kube-vip.yaml

由于文件在/etc/kubernetes/manifests内,所以会自动创建kube-vip的pod

在三个node节点操作:

kubeadm join kubernetes-VIP:6443 # 执行join命令

在master01上面操作:

kubectl apply -f calico.yaml # 部署calico

kubectl get pods -A -o wide && kubectl get nodes -o wide # 查看所有的node和pod

测试:

随机关闭某一个master,再使用kubectl命令一切正常

由于etcd和master节点在一起,同时重启两个master的时候,etcd不可用,整个集群就不可用

我测试过部署5个etcd,同时关闭两个master的情况,集群一切正常,VIP正常

留下评论

error: Content is protected !!