使用k0sctl轻松构建家庭Kubernetes集群
最近很流行使用多台树莓派创建Kubernetes集群作为学习的材料。
尽管Docker Desktop等工具可以在单个机器上运行Kubernetes,但我认为只有在由多台物理机器构成的集群上运行时,才会真正提升对其理解的程度。
我家也有一個Raspberry Pi的Kubernetes集群,這裡是其中搭建時的過去文章。
从第一次使用Raspberry Pi 3B搭建集群已经过去了大约四年了。Kubernetes的情况也发生了很大变化。尤其是k0s工具的出现,使得集群的初始设置和节点的添加变得非常简单。
“k0s是什么意思?”
根据官方的步骤建立Kubernetes集群是非常困难的,我觉得这是一连串非常具有挑战性的步骤。作为一个希望快速启动容器并进行试验的人,这样的步骤对我来说是一道很高的门槛。而能够帮助我省去这样麻烦的工具就是k0s。
引用部分如下…
零摩擦
k0s大幅降低了安装和运行完全符合要求的Kubernetes分发的复杂性。新的kube集群可以在几分钟内启动。开发人员的摩擦力降低到零,使任何人,无需特殊的Kubernetes技能或专业知识,都能轻松入门。
翻译 yì)
k0s可以大大简化安装和运行符合完全兼容Kubernetes发行版的复杂性。您可以在几分钟内启动一个全新的Kube集群。开发者几乎没有任何障碍,并且任何人都可以轻松开始,无需特殊的Kubernetes技能或专业知识。
我认为对于那些想要尽快尝试Kubernetes的人来说,这可能是一个绝佳选择。此外,它宣称官方支持arm架构,同时对于工作节点所需的最低内存要求为0.5GB,这意味着它也考虑到了使用树莓派构建集群的需求。
k0sctl非常方便
另一个更方便的工具是k0sctl。使用它可以通过代码来管理Kubernetes集群的配置。
我认为,如果要在RaspberryPi上构建Kubernetes集群,那么我推荐使用k0sctl。由于它是一台小型机器,所以可能会遇到microSD卡等硬件故障的问题,并且经常需要重新进行操作系统的清洁安装和集群搭建。在这种情况下,使用k0sctl可以方便地一次性复制代码管理的集群配置,非常实用。
预先准备
要使用k0sctl,需要先进行以下预备工作。
-
- 各RaspberryPiのIPアドレスを固定すること
-
- k0sctlを実行するマシンからそれぞれのRaspberryPiへSSH接続できること
- cgroupを有効にすること
这个就足够了,以前的文章中有写着要禁用swap,因为开启了swap会导致工作节点无法启动,但是在最近的Kubernetes中已经不再需要这样做了。然而,从减少microSD卡的消耗的角度来看,禁用swap也是一个不错的选择。
执行k0sctl的机器不必是属于集群的机器。只要每个节点都能够进行SSH就可以了。如果可以使用brew,则可以使用以下命令进行安装。其他方法请参考官方的github页面。
brew install k0sproject/tap/k0sctl
撰写设置文件
我家的集群定义文件大致是这样的。在这个例子中,我们使用了4台树莓派来构建集群,控制平面(controller)节点同时也充当了工作节点(worker)。关于具体的记录方式,请参考官方文档。
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s-pi
spec:
k0s:
version: v1.26.1+k0s.0
hosts:
- role: controller+worker
os: debian
ssh:
address: 192.168.10.41
user: commojun
keyPath: ~/.ssh/id_rsa
- role: worker
os: debian
ssh:
address: 192.168.10.31
user: commojun
keyPath: ~/.ssh/id_rsa
- role: worker
os: debian
ssh:
address: 192.168.10.32
user: commojun
keyPath: ~/.ssh/id_rsa
- role: worker
os: debian
ssh:
address: 192.168.10.33
user: commojun
keyPath: ~/.ssh/id_rsa
有一个特殊的地方,对于我的情况来说,我安装的是RaspberryPi OS,所以必须在spec.hosts[*].os参数中指定debian。如果没有指定,系统会自动从/etc/os-release等文件中读取并判断Linux发行版,但RaspberryPi OS不在k0s支持的OS列表中,导致安装错误。因此,我指定了RaspberryPi OS的基础debian,成功完成了安装。
申请吧!
如果准备工作一切就绪,那么只需使用这个命令来执行,然后稍等片刻即可。相比手动从头构建,真是轻松得多。即使不小心搞砸了集群,也可以重新建立,这让人感到宽慰。
$ k0sctl apply --config ./k0sctl.yml
版本更新和集群更改也很方便。
如果想要使用Kubernetes的新版本,只需编辑配置文件中的 spec.k0s.version 字段并执行 apply 命令即可。似乎还可以进行更详细的集群配置。然而,根据设置项的不同,有些项可能需要先删除集群(k0sctl reset),然后重新安装才能生效。
总结
我觉得有了k0s和k0sctl的出现,构建Kubernetes集群变得相当容易了。虽然通过手动搭建可以增进理解,但我认为大部分实际操作Kubernetes的人都是作为使用Google或Amazon云平台上的Kubernetes的一方,所以能够快速使用家庭级Kubernetes是降低学习难度的好事情!