K3S 集群搭建
· 阅读需 4 分钟
最近学习了K8S集群的部署,期间使用了很多的部署方式,例如官方给出的 kubeadm 工具,青云的KK工具一键部署,也有github上开源免费或收费的一键部署工具,都尝试过,但最后选择了K3S-up 来进行集群的部署。
为什么选择 K3S
相对于K8S来说,K3S系统容器数量少,轻量级,并且默认使用 containerd 作为容器运行时,内部的 ingress 使用的是 go 语言开发的 traefik,集成了 SQLite 代替 Etcd。但在多个 master 节点的场景下最好使用 Etcd 组件来保证数据一致性,从而实现 HA。
环境规划
本次搭建选用阿里云 6 台共享型服务器,搭建 HA-etcd 高可用 k3s 集群:
- 3 台 master(2核4g)
- 3 台 worker(2核4g)
系统使用 Debian 10.10。
前提条件
- 先关闭防火墙,并更新软件源:
apt-get update
- 安装 cgroupfs-mount,然后重启机器:
apt-get install cgroupfs-mount
-
下载 K3s 部署软件。由于 k3s 资源在 github 上,国内服务器下载过慢,可以优先去 github 下载 k3s 安装二进制放入服务器中,从而免去下载耗时。
-
检查环境是否有问题:
k3s help # 查看基础命令
k3s check-config # 检测环境是否满足运行条件
所有服务器均需重复以上 1-4 步骤。如果嫌麻烦,可以先把一台服务器执行好这些步骤后复制系统盘镜像,后续创建云服务器时直接选择该镜像即可。
集群部署
- 环境检查没有问题后,使用 k3sup 初始化第一个控制平面 master 节点:
# --cluster 表示以嵌入式 etcd 的集群模式启动
k3sup install --ip #{your_service_ip} --user root --cluster --k3s-version v1.23.4+k3s1 --print-command
- 其他 master 节点加入集群:
# --server 表示以 master 身份加入,--server-ip 指向第一台 master
k3sup join --ip #{next_service_ip} --user root --server-user root --server-ip #{first_service_ip} --server --k3s-version v1.23.4+k3s1 --print-command
- 其他 worker 节点加入集群:
k3sup join --user root --server-ip $SERVER1 --ip $AGENT1 --print-command
- 执行节点状态检查:
kubectl get nodes
k3sup 常用参数
--cluster— 使用嵌入式 etcd(嵌入式 HA)在集群模式下启动此服务器--skip-install— 如果已经安装了 k3s,可以运行此命令来获取 kubeconfig--ssh-key— 为远程登录指定 SSH 密钥路径--local-path— 设置 kubeconfig 保存路径,默认值为./kubeconfig,默认情况下此文件会被覆盖--merge— 将配置合并到现有文件中而不是覆盖,例如将配置添加到默认的 kubectl 配置中:--local-path ~/.kube/config --merge--context— 设置 kubeconfig 上下文的名称,默认值为default--ssh-port— 指定 SSH 端口,默认为 22--k3s-extra-args— 传递给 k3s 安装程序的可选额外参数,需用引号括起来,例如--k3s-extra-args '--no-deploy traefik'或--k3s-extra-args '--docker';多个参数合并写在单引号内:--k3s-extra-args '--no-deploy traefik --docker'--k3s-version— 设置 k3s 的特定版本,例如v1.21.1--k3s-channel— 按通道设置 k3s 版本,例如stable--ipsec— 强制 k3s 使用--flannel-backend ipsec--print-command— 打印出通过 SSH 发送到远程计算机的命令--datastore— 将 SQL 连接字符串传递给 k3s 的--datastore-endpoint,格式必须按 Rancher 文档中 k3s 要求的格式填写
集群控制面板
k3s 可以和 kuboard 组合使用。kuboard 控制面板文档:Kuboard介绍 | Kuboard
小结
这样我们就拥有了一个 k3s 集群,并且可以横向扩展我们的业务规模了。整个流程用 k3sup 通过 SSH 远程完成,比手工执行 kubeadm 省事不少,也适合在国内网络环境下反复重建。K3S 本身轻量,配合嵌入式 etcd 就能做到 master 高可用,对小规模集群是个不错的选择。后续再集成我们的各种监控以及 service mesh 套件。
评论 / COMMENTS