跳到主要内容

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。

前提条件

  1. 先关闭防火墙,并更新软件源:
apt-get update
  1. 安装 cgroupfs-mount,然后重启机器:
apt-get install cgroupfs-mount
  1. 下载 K3s 部署软件。由于 k3s 资源在 github 上,国内服务器下载过慢,可以优先去 github 下载 k3s 安装二进制放入服务器中,从而免去下载耗时。

  2. 检查环境是否有问题:

k3s help # 查看基础命令
k3s check-config # 检测环境是否满足运行条件

所有服务器均需重复以上 1-4 步骤。如果嫌麻烦,可以先把一台服务器执行好这些步骤后复制系统盘镜像,后续创建云服务器时直接选择该镜像即可。

集群部署

  1. 环境检查没有问题后,使用 k3sup 初始化第一个控制平面 master 节点:
# --cluster 表示以嵌入式 etcd 的集群模式启动
k3sup install --ip #{your_service_ip} --user root --cluster --k3s-version v1.23.4+k3s1 --print-command
  1. 其他 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
  1. 其他 worker 节点加入集群:
k3sup join --user root --server-ip $SERVER1 --ip $AGENT1 --print-command
  1. 执行节点状态检查:
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