本文描述了如何利用autok3s搭建k3s集群,同时支持对gpu的调用和切分。
前言
公司新进了一台8卡a800的机器,老板要求将这台机器做成算力节点。之前利用autok3s在单机上搭建过k3d集群(autok3s单机搭建k3d集群并支持gpu调度),尝到了autok3s部署k3s集群的方便与快捷,并且autok3s支持部署native模式的k3s集群,所以再次基于autok3s部署native的k3s集群。本文详细记录了部署过程。
方案:3 masters + n workers。
master节点找3台比较稳定的机器,首先部署master节点,worker节点可以采用pve进行虚拟化,然后创建出一台worker,在worker上面安装好相应的nvidia驱动等前置操作,然后再将worker做成pve的模板,后续worker可以直接从模板启动并通过autok3s快速join进现有的集群
一、autok3s是什么
1. k3s
k3s的学习请查阅官方文档:k3s
2. autok3s
autok3s是一款k3s的带ui界面操作的自动部署工具,目前支持了k3d,native k3s,k3s on aws,k3s on gcp,k3s on tencent等模式的部署场景。具体使用请查阅官方文档:autok3s
二、部署步骤
- k3s: v1.22.1-k3s1
- 集群规划:3 master (ha mode) + n workers
- autok3s配置ssh keys(参考官方文档)
- nvidia-driver: 525.125.06
1. autok3s部署
我们在工作站上用docker部署autok3s
# 注意:我们需要将k3d的隐藏目录挂载到宿主机,这样删除autok3s容器后之前生成的k3d集群信息就不会丢失
docker run -itd --restart=unless-stopped --net host --name autok3s-0.8 -v /var/run/docker.sock:/var/run/docker.sock -v /root/.k3d:/root/.k3d --volumes-from autok3s cnrancher/autok3s:v0.8.0
2. 创建集群
-
部署master节点
-
制作worker 节点模板 (pve虚拟化)
- 安装nvidia驱动:ubuntu20.04系统安装nvidia显卡驱动
- 安装nvidia-container-runtime
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list apt-get update apt-get install -y nvidia-container-toolkit
- 将containerd binary(见k3d-gpu-image) copy进/usr/bin目录下
cp containerd-shim* /usr/bin/
- 创建
/var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl
,内容见:k3d-gpu-image
-
autok3s ui界面join worker node
三、QA
- Q:误删除(在master节点执行了
/usr/local/bin/k3s-uninstall.sh
)了master节点如何恢复集群
A:只删除的master节点上执行命令curl -sfL https://get.k3s.io | K3S_URL=https://<现有 master 节点 IP>:6443 K3S_TOKEN=<集群 token> sh -s - server
,其中token在现有的master节点上的/var/lib/rancher/k3s/server/node-token
文件里面 - Q: 节点重启后,ubuntu掉显卡驱动
A: 解决方案如下: ubuntu Nvidia dkms 驱动恢复
总结
本文详细描述了使用autok3s部署k3s高可用集群,并且实现了对gpu资源的调用和切分。整个过程和autok3s部署k3d集群有相似之处,包括制作镜像过程其实是k3d gpu node容器的dockerfile描述的过程。