K3s初体验
最近搞了个树莓派4B,有点想搞搞事情,所以先把基础环境搭建一下,如果好的话就考虑再来几个~ 现在想先搭建个 K3s 集群,后面有什么项目工程的就直接可以容器化了。
K3s 是个啥
K3s 是 rancher 公司开发维护的一套 K8s 发行版。所谓发行版,就类似于 debian 之于 Linux。内核机制还是和 K8s 一样,但是剔除了很多外部依赖以及 K8s 的 alpha、beta 特性,同时改变了部署方式和运行方式,目的是轻量化 K8s,并将其应用于 IoT 设备(比如树莓派)。 简单来说,K3s 就是阉割版 K8s,消耗资源极少。 K3s 官网文档中有详细介绍,本文下面大部分也是基于此文档进行部署等操作。
架构 & 运行机制
虽说 K3s 其内核就是个 K8s,但是他的整体架构和运行机制都被 rancher 魔改了。K3s 相较于 K8s 其较大的不同点如下:
- 存储etcd 使用 嵌入的 sqlite 替代,但是可以外接 etcd 存储
- apiserver 、schedule 等组件全部简化,并以进程的形式运行在节点上
- 网络插件使用 Flannel, 反向代理入口使用 traefik 代替 ingress nginx
- 默认使用 local-path-provisioner 提供本地存储卷
在真正使用K3s之前,最好先了解一下他的大体架构和运行方式,这里先上他的架构图:
单点测试模式HA高可用模式
从架构图里,我们就能看出来 K3s 分为两大种部署方式:单点测试 和 高可用模式。这样看对比下来可以看出,单点测试模式只有一个控制节点(在 K3s 里叫做server node,相当于 K8s 的 master node),而且K3s的数据存储使用 sqlite 并内置在了控制节点上;高可用模式则是扩展 server node 变为3个,并且需要外接存储(etcd、mysql等),保证了集群的高可用。
再来看 K3s 的运行机制:
运行机制
这可以看出来,K8s 所有控制面组件最终都以进程的形式运行在 server node 上,不再以静态pod的形式。数据库使用 SQLite ,没有etcd 那么重了。也就是说,当我们安装部署好 K3s 后,使用kubectl get po -n kube-system
时,则不会有 apiserver、scheduler 等控制面的pod了。
Agent 端 kubelet 和 kube proxy 都是进程化了,此外容器运行时也由docker 改为 containerd。
server node 和 agent node 通过特殊的代理通道连接。
从这个运行机制确实能感受到 K3s 极大的轻量化了 K8s。
部署安装和使用
准备过程
- OS: debian系操作系统
- 1G 内存, 1核 CPU
- dockers / containerd installed
部署server端
curl -sfL https://get.k3s.io | sh -
我用的参数
--docker # 使用docker 作为runtime
--kube-apiserver-arg --feature-gates ServerSideApply=false # 关闭了 ServerSideApply 特性,毕竟不太想在yaml看到一堆 field,同时也能够减少占用的磁盘空间和内存
--disable servicelb # 我只有一个树莓派,就暂时先不用 lb 了吧
--disable traefik # K3s 使用 1.8 版本,自己部署使用2.x版本
--disable-cloud-controller # 不需要
当然还有其它参数,可以在官网参数列表找到
部署完成之后,上面所有的进程都由 k3s 这个 service 来创建管理。可以使用 systemctl status k3s 查看。
使用
使用起来其实和 K8s 基本无差别,切换到root 用户后,执行命令
$ kubectl get node
NAME STATUS ROLES AGE VERSION
ubuntu Ready master,node 36m v1.18.9+k3s1
$ kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-7566d596c8-vflfk 1/1 Running 0 36m
kube-system local-path-provisioner-6d59f47c7-xm2vr 1/1 Running 0 36m
kube-system coredns-7944c66d8d-d594g 1/1 Running 0 36m
果然pod 很少,只有必要的 dns、metrics 和 存储卷。
卸载
卸载server端
/usr/local/bin/k3s-uninstall.sh
卸载 agent 端
/usr/local/bin/k3s-agent-uninstall.sh
最后
rancher 公司还是很牛的,把 K8s 这么个大家伙给优化成现在这个样子,实测用树莓派跑是一点问题没有,空跑情况下,cpu用的很少, 内存也只用了400+M 。如果 K3s 仅作为 paas 平台来用,了解上述的内容就大差不差了,目前来看在树莓派上也不会用过多较深的功能。就先到这吧,如果后续有问题也会在这里贴出来。