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
参考链接
发表评论