architecture
DOK 的架构是建立在 kubeadm 之上,通过引入一些很容易维护的脚本来增强 kubeadm 的功能,总而言之 DOK 可以让用户在5分钟左右构建出一个生产环境级别的 Kubernetes 集群,并且具备很多集群运维的能力。
目前社区关于部署 Kubernetes 集群的工具也比较多,官方的 kubeadm, kubespray,还有 rancher 的 rke,青云的 kubekey,以及阿里之前开源的 sealos,此外对于这种复杂软件的部署方案,也可以选择用 ansible 等工具来封装,在综合调研和比较之后,主要是基于下面的几点决定自研:
- ansible的变量处理很复杂,模板提供的
{{}}
等符号让配置文件的可读性变低 - 部分工具不完全支持离线安装,但在私有化场景下能够直连公网的可能性比较低
- 支持的版本太多,导致脚本和工具的复杂度提高
DOK 的核心能力主要有两点:
- 封装了ssh, scp, cmd可以让用户在本地或者远程执行命令以及分发文件
- 大部分组件都是通过二进制或者压缩包集成在安装包中可以完全支持离线创建集群
关于脚本的编写,个人更推崇的是非常简洁的脚本,脚本行数不是越多越好。总体上,DOK 使用的脚本建议不要超过100行,也没必要用太多函数之类或者自定义变量的写法,这样会导致脚本可读性变差,不好维护也不好理解,简洁的脚本要求在设计时需要有更深入的思考,DOK 尽量会保持脚本可以独立于程序运行。
- 执行机分发安装包到集群各机器
- 远程执行命令解压安装包并且按照脚本初始化二进制、配置文件以及镜像文件等
- 执行机通过kubeadm创建master0
- 远程执行kubeadm命令串行加入其他master节点
- 远程执行kubeadm命令并行加入worker节点
- 执行机上执行安装网络插件的命令
- 执行机上执行安装Helm应用的命令
DOK分发安装包
DOK安装包安装流程
DOK集群创建的核心逻辑
DOK集群高可用原理
生产环境建议至少六台 2c/4g/200G 的机器,三个控制节点,三个工作节点,这是 DOK 集群能够运行所有组件的最低配置要求。
仔细查看 DOK 的代码,可以发现,在部署 Kubernetes 集群中,DOK 的框架代码是用 go 写的,但是核心部署流程都是一堆脚本。选择这样的架构的原因是,因为大部分 SRE 部署的 Kubernetes 都是通过脚本来完成的,使用脚本更加符合 SRE 的习惯,通过 go 语言的框架,丰富了脚本的使用,另外在调试、测试部署脚本也非常方便,只要稍作修改就可以重新编译使用了,可以想象这么多的脚本要转化成 go 的代码,工作量不仅很大,还会导致部署的流程代码过于晦涩,不容易进行二次开发。