前段时间,我们在 「使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群」一文中介绍了如何使用 Kind
这个开箱即可快速部署 Kubernetes
高可用集群的神器,相信不少同学用上这个神器后大大的降低了 Kubernetes
集群的部署难度和提高了 Kubernetes
集群的部署速度。
不过有一点比较遗憾的是 Kind
当前仅仅支持在本地快速构建一个开发或者测试环境,目前暂时还是不支持在生产环境中部署 Kubernetes
高可用集群的。今天,我们就要给大家介绍另一款可以支持在生产环境中部署 Kubernetes
高可用集群的利器 Sealos
。
什么是 Sealos ?
Sealos
是一个 Go 语言开发的简单干净且轻量的 Kubernetes
集群部署工具,Sealos
能很好的支持在生产环境中部署高可用的 Kubernetes
集群。
Sealos
架构图
Sealos 特性与优势
支持离线安装,工具与部署资源包分离,方便不同版本间快速升级。
证书有效期默认延期至 99 年。
工具使用非常简单。
支持使用自定义配置文件,可灵活完成集群环境定制。
使用内核进行本地负载,稳定性极高,故障排查也极其简单。
Sealos 设计原则和工作原理
1. 为什么不使用 Ansilbe 实现
Sealos 1.0
版本时是使用 Ansible
实现的,这样在使用时就必须先安装 Ansible
及一些 Python
的依赖包和进行一些必须的相关环境配置,使用起来还是比较复杂的。
为了解决这个问题,目前新版本的 Sealos
采用二进制文件方式提供。新版本 Sealos
没有任何依赖,开箱即用。
文件分发与远程命令都通过调用对应
SDK
实现,不依赖其它任何环境。
2. 为什么不用 KeepAlived 和 HAProxy 实现集群高可用
无论是通过 KeepAlived
还是 HAProxy
进行高可用集群调度都会存在以下一些劣势。
软件源不一致可能导致容器中安装的软件版本也不一致,进而会引起相应检查脚本不生效等故障。
可能因为系统依赖库问题,在某些特定环境下就直接无法完成安装。
只依靠检测
HAProxy
进程是否存活是无法保证集群高可用的,正确的检测方式应该是判断ApiServer
是否healthz
状态。Keepalived
可能存在Cpu
占满的情况。
3. 本地负载为什么不使用 Envoy 或者 Nginx 实现
Sealos
高可用实现是通过本地负载方式完成的。本地负载实现方式有多种,比如:IPVS
、Envoy
、Nginx
等,而 Sealos
采用的是通过内核 IPVS
来实现的。
本地负载:在每个
Node
节点上都启动一个负载均衡,同时监听集群中的多个Master
节点。
Sealos
选择通过内核 IPVS
来实现主要有以下几个原因:
如果使用
Envoy
等需要在每个节点上都跑一个进程,消耗更多资源。虽然IPVS
实际上也会多跑一个lvscare
进程 ,但是lvscare
只是负责管理IPVS
规则,原理和Kube-Proxy