k8s 集群高可用
如图,k8s集群里,我们只需要保证这4个组件的高可用,就能保证集群的高可用
1.1 etcd高可用
如上图,etcd我们使用raft,raft是一种共识算法。我们最少需要3,5,7,9这样奇数的节点才能实现etcd的高可用,ledger,flolower,candidate
2.1 scheduler高可用
scheluder的选主模式:
多个schedluer与api-server间接连接etcd。当第一个schedluer到api-server的时候,说嗨,兄弟我来了。api-server就会到etcd查询当前endpoint端点信息的。查看调度器的信息有没有,如果key-value里的value为空,说明没人来注册,就会把当前调度器写入进去,api-server识别这个调度器为老大。如果有一天这个调度器挂了,一群调度器中来看老大还在不在,发现老大没了,这时候调度器老大没了,于是再注册的就成了新的老大
简而言之,就是多个调度器同时向etcd发起注册功能,后续的调度器只能进入阻塞并不断尝试,所以需要两个相同的scheduler即可,他们会自动抢
3.1 controller-manager高可用
同scheduler原理一样
4.1 api-server高可用
api-server是无状态的,所以这一步是最简单的
5.1 总结
etcd的高可用集群是自身的,controller-manager和scheduler搭建多个,他们会有自己的选主机制。api-server可以用keepalived实现
我们的 api-server,controller-manaber,schedluer,etcd数量应该是2 2 2 3,但是因为我们使用kubeadm部署的k8s,我们的api-server,controller-manaber,schedluer,etcd都在master节点,所以我们一般搭建3个master端,我们的api-server,controller-manaber,schedluer,etcd数量是 3 3 3 3
我们可以修改kubeadm的源码,把有效期1年改为100年。然后用新的kubeadm签发正式就可以了
6.1 安装k8s集群的方案
6.1.1 kubeoperator
官网地址: https://kubeoperator.io/
下载kubeoperator的镜像,run起来之后会得到一个仪表盘组件,在仪表盘定义k8s的机器节点,并定义每个机器节点的角色,他的底层基于kubeadm,安装完成户就得到一个k8s集群。
并且他自己里面自带了需要FQ下载的k8s镜像,不需要自己去下载镜像,100年有效期
6.1.2 rancher
官网地址: https://www.rancher.cn/ 刚开始是我国科学院士带领去开发的一个平台,后来演化成集成k8s安装,运行,管理的平台。集成了商店功能,选择mysql点击就可以在k8s集群里得到一个mysql。底层逻辑走的helm,后来被苏susei公司收购了,成了国外软件。
6.1.3 睿云智合
官网地址:https://github.com/wise2c-devops/breeze/blob/master/BreezeManual-CN.md 它是国内第一家经过k8s一致性认证的软件,通过google官方认证。它安装出来的k8s与原生安装的没有区别,可以完全信任
6.1.4 sealos
官网地址: https://github.com/labring/sealos
说起apache和nginx,以前我们的思想是keepavlice实现高可用,上面三家都是用的haproxy实现的高可用,唯独这家,他用了k8s自身的ipvs模块自身的调度器。
6.1.5 kubeasz
从github上找到一个ansible部署k8s集群的,同sealos类似,添加删除节点方便
https://github.com/easzlab/kubeasz