我需要什么样的集群搭建工具

背景

k3s 是一个精简的 k8s 发行版,之前在 记一次k3s环境搭建记录 中有过描述。

相比于 k3s_install.sh 而言, k3sup 最大的价值在于 可以通过 ssh 远程安装,而不是登录到某台机器上再执行安装。另外,通了很简洁的命令行参数。

无疑,k3sup 作为一个轻量级的集群安装工具,还是很不错的。

但逐渐我也发现了一些问题:

  1. k3sup 写死了获取 k3s_install.sh 的脚本地址,这对于国内网络环境来说,不是很友好
  2. k3sup 只能采用有网环境部署,对于 k3s 的 air gap 状况没有支持
  3. k3s_install.sh 中的众多环境变量,无法排上用场

调研过社区中很多的集群部署工具,各工具都有自己的一些特色。

  • 有些十分轻量简单,例如 k3sup 以及一些简单封装的 ansible ;
  • 有些有图形界面,例如 autok3s ;
  • 有些非常庞大,把集群部署、集群管理、应用管理等融于一体的,例如 kubeoperator 之类;
  • 还有一些发行版自带支持的工具,例如 microk8s、minikube ,包含基础的集群部署 以及 常用的一些插件(ingress、dashboard等) ;
  • 也有一些工具和云厂商适配得比较好,例如 kops 。

可以看出来,现在社区中大多数工具,都是基于 网络良好 的条件的。但受制于一些特殊的条件,有些时候,我们希望在一个地方把所有依赖都解决好,然后去到局域网环境下进行部署。

我比较多使用 k3sup 进行远程搭建集群,但是大多数情况下,网络环境都不是很好,因此用 k3sup 不是很友好。

我希望的 k3s 集群安装工具,最好有这些特性:

  1. 支持远程安装
  2. 比较好地支持 airgap 场景
  3. 可以做版本管理 (不可变基础设施)
  4. 可以有一些自定义的基础服务
  5. 工具依赖少

我决定启动一个项目,解决网络受限环境下的集群搭建问题。
这个项目是以解决问题为主,不求追求大而全,也不求追求何等的优雅和极致,毕竟我还有很多的事等着做。当真的觉得某些点不好用,或者某些能力无法支持时,再去考虑解决方案,整体采用渐进式的开发方式,毕竟,我也不是专门搞这个的,无法很充分地考虑到各种问题,这很正常。

项目的考虑

使用方式

有两种使用方式:

  1. 命令行
  2. 配置式

我倾向配置式的,这样方便重复使用,而命令行则容易无法记录。但命令行也有一个好处,可以很方便地进行修改。

能力支持

  1. k8s master 、k8s worker 安装启动
  2. 支持 单master 节点以及 多master 节点
  3. 支持基础的 storage 方案 (longhorn、nfs)
  4. 支持基础的网络插件 (flannel)
  5. 支持 nginx-ingress、lb
  6. 支持 air gap 的场景
  7. 可选择性包含 dashboard
  8. 将来可选择性包含其他插件 (包括业务系统插件)

生态选择

就目前来看,k3s 是一个很好的能解决问题的方案,官方做了很多将 k3s 放到资源受限环境的事。
microk8s 也很不错,两者有些差异,但对我的场景来看,差异不大。从 air gap 的场景来看,microk8s 的支持没有 k3s 好。

以 k3s 作为底层实现,对当下而言,是一个不错的选择。

具体资料可以参考:

最直接的方式

网络受限环境k3s安装记录

2020-07-21: 先完善上面的记录,把相关工具打包,看看够不够用,不够再往下一步 (todo: 采用配置文件安装)

重新看了下 sealer 这个项目,从理念上来看,还是很不错的,借由 docker 把 操作系统的依赖打包到一个镜像中 的理念,sealer 把所有基础设施层和业务层全部打包到一个镜像中,恢复的是一个基于 k8s 的所有应用集群。
把这个作为一个主要交付物,还是很简洁的。