使用kubespray搭建k8s集群, 如果没有外部LB做高可用的话, 对于node节点, kubespray默认为通过选择nginx或haproxy做apiserver的HA, 在master节点上, 是用127.0.0.1:6443来访问本机的apiserver, 而且程序调用apiserver时也没有做HA, 传统HA方式会搭建keepalived和haproxy, 本次是通过kube-vip来做HA

这是kube-vip官方对于ha的架构文档:

https://github.com/kube-vip/kube-vip/blob/main/kubernetes-control-plane.md

https://kube-vip.io/architecture/

尝试着按照官方方法来运行: https://kube-vip.io/install_static/ , 始终失败, 由于docker run –network host –rm ghcr.io/kube-vip/kube-vip:v0.3.8 manifest pod的方式生成的配置默认是用的/etc/kubernetes/admin.conf来做backend的, 但是kubespray init集群时也是用的admin.conf来做认证的, 这就陷入了死循环.

后来通过直接配置文件的方式来做成功了. 参考:

https://github.com/kube-vip/kube-vip/blob/main/kubernetes-control-plane.md

https://www.codeleading.com/article/58065570523/

ansible如下:

注: 其中,templates/kube-vip.yaml.j2这个文件是通过这个来生成的:

docker run –network host –rm 172.20.48.169:81/yks/kube-vip:v0.3.9 sample config | sudo tee /etc/kubernetes/manifests/kube-vip.yaml

kubespray定义的默认k8s apiserver监听端口为6443(变量: kube_apiserver_port), 这里kube-vip定义的vip绑定的域名是k8s.apiserver.io, 监听端口是8443(变量: loadbalancer_apiserver.port)

tasks/main.yml:

 

templates/config.yaml.j2:

templates/kube-vip.yaml.j2:

 

Categories: KUBERNETES

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *