K3S 是 Rancher 为物联网(IoT)和边缘计算环境开发的轻量级 Kubernetes 发行版本。相比原生的 Kubernetes,其移除了很多非必要的组件,例如云控制管理器(CCM)、内置的(In-Tree)的存储插件等,以及为ARM架构的基础设施做了优化。
K3s 的轻量级同时也体现在其打包成一个二进制可执行文件进行分发,状态存储除了支持 etcd 外,还支持 Sqlite3、MySQl和Postgres。其跟多特性可参考官方文档。
K3s 支持单节集群部署(可用于开发测试环境),也支持高可用的多节点集群。同时还可以通过 k3d 项目快速在本地开发环境使用Docker容器部署 k3s 集群作为开发环境。
这里我将演示通过虚拟机部署一个高可用的多节点集群(3个Servers节点 + 3个Agent节点)。
k3S架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3I2DzwSO-1658505658738)(https://k3s.io/img/how-it-works-k3s-revised.svg)]
上图是来自k3s官网的架构图,其架构与Kubernetes的架构是相似的,k3s的server节点也就是控制面节点,agent节点是工作负载节点。k3s默认使用 containerd 作为容器运行时。
更信息的部署架构可参考官方文档。
准备虚拟机节点
这里我们将部署 3 + 3 的集群,需要6台虚拟机,基本配置如下
主机名 | IP | vCPU | 内存 |
---|---|---|---|
homek3s-server1 | 192.168.0.150 | 1 | 2 GB |
homek3s-server2 | 192.168.0.151 | 1 | 2 GB |
homek3s-server3 | 192.168.0.152 | 1 | 2 GB |
homek3s-agent1 | 192.168.0.154 | 2 | 4 GB |
homek3s-agent2 | 192.168.0.155 | 2 | 4 GB |
homek3s-agent3 | 192.168.0.156 | 2 | 4 GB |
部署的最小需求,可参考官方文档。
K3s 支持大部分主流的Linux操作系统,这里我使用的是 openSUSE Leap Micro 15.2,其是一个基于openSUSE,为容器负载而设计的操作系统。
为了部署简单,这里我们禁用了系统的防火墙,如果开启防火墙,需要为Server节点开放如下端口
- 6443/TCP - Kubernetes API 服务
- 8472/UDP - Flannel VXLAN模式需要
- 51820/UDP - Flannel Wireguard后端需要
- 10250/TCP - Kubelet metrics需要
- 2379-2380/TCP - 基于内嵌etcd高可用部署模式需要
启动Server节点
首先登陆到第一个Server节点 homek3s-server1,然后下载最新版本(v1.24.3+k3s1)的 k3s 二进制文件
# curl -sfL https://github.com/k3s-io/k3s/releases/download/v1.24.3%2Bk3s1/k3s -o /usr/local/bin/k3s
# chmod +x k3s
# k3s --version
k3s version v1.24.3+k3s1 (990ba0e8)
go version go1.18.1
k3s 支持一下几个子命令
- k3s server - 用于运行管理服务节点
- k3s agent - 用于运行agent工作节点
- k3s kubectl - 运行 kubectl 命令
- k3s crictl - 运行 crictl 容器管理命令
其他的命令帮助,请通过 k3s --help
查看。
这里我们将要创建一个使用内置etcd数据库的高可用集群,执行如下命令
# k3s server --cluster-init --advertise-address=192.168.0.150 --tls-san=homek3s.mengz.lan --write-kubeconfig-mode=644
参数 --cluster-init 是使用内置的etcd初始户一个新的集群;
参数 --advertise-address 是指定API服务器的监听IP地址,如果不指定,默认为节点的IP地址;
参数 --tls-san 是指定额外的域名或者IP地址作为TLS证书的SAN,使得我们从客户端可通过域名访问而API服务器。
运行成功后,在 homek3s-server1 打开另一个终端执行
# k3s kubectl get no
NAME STATUS ROLES