Rancher搭建K8S集群并配置GPU共享完整流程
本文最后更新于:7 个月前
声明
本文所有内容基于Docker,k8s集群由rancher提供工具搭建,GPU共享技术采用了阿里GPU Sharing。使用了其他容器技术的本文不一定适用,或者使用了kubeadm进行k8s搭建的可能有部分不适用,kubeadm搭建的k8s在部署GPU Sharing时网上可查的资料和官网资料都很多,而rancher版本的k8s和原生kubernetes有所差别,后面会夹带一些具体说明。
安装docker和nvidia-docker2
安装Docker,直接执行官方安装脚本安装:
1 |
|
安装完成后,使用Docker version
查看版本,目前安装的话一般为20.10版本,能成功查询版本说明安装成功。
安装之后,执行以下命令设置docker自启动:
1 |
|
nvidia-docker2安装参见上一篇文章《Ubuntu实现K8S调度NVIDIA GPU小记》安装nvidia-docker安装部分。
在安装完之后,我们需要修改docker默认的运行时,使其支持nvidia的调度,编辑/etc/docker/daemon.json
配置(不存在则新建):
1 |
|
其中:runtimes
参数是定义运行时,这里定义了一个名为nvidia的运行时环境,default-runtime
表示指定默认的运行时为刚刚定义的nvidia
。
最后一句"exec-opts": ["native.cgroupdriver=systemd"]
的作用是,因为K8S的文件驱动为cgroupfs,而docker的文件驱动为systemd,两者不同会导致镜像无法启动,因此需要将K8S文件驱动也指定为systemd。
GPU驱动
GPU驱动安装和简单调度参见本站上一篇文章《Ubuntu实现K8S调度NVIDIA GPU小记》英伟达驱动部分。
K8S集群搭建
K8S集群搭建部分参见本站《Rancher安装以及创建K8S集群》,搭建完成后,将config文件保存至主机的~/.kube/config;
之后,安装kubectl来管理集群:
1 |
|
使用kubectl查看pod:
1 |
|
GPU Sharing部署
- 我们从github上获取scheduler-policy-config.json,放到主机/etc/kubernetes/ssl/下,如果有多个master节点,则每个master节点都需要执行:
1
2cd /etc/kubernetes/ssl/
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/scheduler-policy-config.json
部署GPU共享调度插件gpushare-schd-extender:
1
2
3
4
5
6
7cd /tmp/
curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/gpushare-schd-extender.yaml
# 因为是使用单节点,因此需要能够在master上进行调度,所以需要在gpushare-schd-extender.yaml中将
# nodeSelector:
# node-role.kubernetes.io/master: ""
# 这两句删除,使k8s能够在master上进行调度
kubectl create -f gpushare-schd-extender.yaml部署设备插件gpushare-device-plugin
如果你的集群不是新搭建的,之前如果已经安装了nvidia-device-plugin,需要将其删除,rancher版本的k8s可以使用kubectl get pods看到nvidia-device-plugin相应的pod,删除即可。然后部署设备插件gpushare-device-plugin:
1 |
|
- 为GPU节点打标签
为了将GPU程序调度到带有GPU的服务器,需要给服务打标签gpushare=true
:
1 |
|
- 更新kubectl可执行程序:
1 |
|
然后执行kubectl inspect gpushare
,若能看到GPU信息,则代表安装成功:
可以看到,此时GPU显存总数为7981MiB,使用为0。
测试
接下来进行测试,我们获取阿里云的示例程序:
1 |
|
这四个文件分别是四个需要调度GPU的示例容器的yaml,直接使用kubectl create -f x.yaml
启动即可,这些文件中调度的GPU都是以G为单位的,这里我修改了调度数值,调度数值的参数名为:aliyun.com/gpu-mem
,第一个为128,第二个是256,第三个是512,逐个启动,观察GPU占用率:
启动第一个:
启动第二个:
启动第三个:
至此,rancher版本k8s配置GPU共享成功。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!