环境:
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正常