我需要什么样的集群搭建工具
背景
k3s 是一个精简的 k8s 发行版,之前在 记一次k3s环境搭建记录 中有过描述。
相比于 k3s_install.sh 而言, k3sup 最大的价值在于 可以通过 ssh 远程安装,而不是登录到某台机器上再执行安装。另外,通了很简洁的命令行参数。
无疑,k3sup 作为一个轻量级的集群安装工具,还是很不错的。
但逐渐我也发现了一些问题:
- k3sup 写死了获取 k3s_install.sh 的脚本地址,这对于国内网络环境来说,不是很友好
- k3sup 只能采用有网环境部署,对于 k3s 的 air gap 状况没有支持
- k3s_install.sh 中的众多环境变量,无法排上用场
调研过社区中很多的集群部署工具,各工具都有自己的一些特色。
- 有些十分轻量简单,例如 k3sup 以及一些简单封装的 ansible ;
- 有些有图形界面,例如 autok3s ;
- 有些非常庞大,把集群部署、集群管理、应用管理等融于一体的,例如 kubeoperator 之类;
- 还有一些发行版自带支持的工具,例如 microk8s、minikube ,包含基础的集群部署 以及 常用的一些插件(ingress、dashboard等) ;
- 也有一些工具和云厂商适配得比较好,例如 kops 。
可以看出来,现在社区中大多数工具,都是基于 网络良好
的条件的。但受制于一些特殊的条件,有些时候,我们希望在一个地方把所有依赖都解决好,然后去到局域网环境下进行部署。
我比较多使用 k3sup 进行远程搭建集群,但是大多数情况下,网络环境都不是很好,因此用 k3sup 不是很友好。
我希望的 k3s 集群安装工具,最好有这些特性:
- 支持远程安装
- 比较好地支持 airgap 场景
- 可以做版本管理 (不可变基础设施)
- 可以有一些自定义的基础服务
- 工具依赖少
我决定启动一个项目,解决网络受限环境下的集群搭建问题。
这个项目是以解决问题为主,不求追求大而全,也不求追求何等的优雅和极致,毕竟我还有很多的事等着做。当真的觉得某些点不好用,或者某些能力无法支持时,再去考虑解决方案,整体采用渐进式的开发方式,毕竟,我也不是专门搞这个的,无法很充分地考虑到各种问题,这很正常。
项目的考虑
使用方式
有两种使用方式:
- 命令行
- 配置式
我倾向配置式的,这样方便重复使用,而命令行则容易无法记录。但命令行也有一个好处,可以很方便地进行修改。
能力支持
- k8s master 、k8s worker 安装启动
- 支持 单master 节点以及 多master 节点
- 支持基础的 storage 方案 (longhorn、nfs)
- 支持基础的网络插件 (flannel)
- 支持 nginx-ingress、lb
- 支持 air gap 的场景
- 可选择性包含 dashboard
- 将来可选择性包含其他插件 (包括业务系统插件)
生态选择
就目前来看,k3s 是一个很好的能解决问题的方案,官方做了很多将 k3s 放到资源受限环境的事。
microk8s 也很不错,两者有些差异,但对我的场景来看,差异不大。从 air gap 的场景来看,microk8s 的支持没有 k3s 好。
以 k3s 作为底层实现,对当下而言,是一个不错的选择。
具体资料可以参考:
最直接的方式
2020-07-21: 先完善上面的记录,把相关工具打包,看看够不够用,不够再往下一步 (todo: 采用配置文件安装)
重新看了下 sealer 这个项目,从理念上来看,还是很不错的,借由 docker 把 操作系统的依赖打包到一个镜像中 的理念,sealer 把所有基础设施层和业务层全部打包到一个镜像中,恢复的是一个基于 k8s 的所有应用集群。
把这个作为一个主要交付物,还是很简洁的。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!