Rancher搭建K8S集群并配置GPU共享完整流程

本文所有内容基于,k8s集群由提供工具搭建,GPU共享技术采用了阿里GPU。使用了其他容器技术的本文不一定适用,或者使用了进行k8s搭建的可能有部分不适用,搭建的k8s在部署GPU 时网上可查的资料和官网资料都很多,而版本的k8s和原生有所差别,后面会夹带一些具体说明 。
安装和-
安装,直接执行官方安装脚本安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
安装完成后,使用 查看版本,目前安装的话一般为20.10版本,能成功查询版本说明安装成功 。
安装之后,执行以下命令设置自启动:
systemctl start dockersystemctl enable docker
【Rancher搭建K8S集群并配置GPU共享完整流程】-安装参见上一篇文章《实现K8S调度 GPU小记》安装-安装部分 。
在安装完之后,我们需要修改默认的运行时,使其支持的调度,编辑/etc//.json配置(不存在则新建):
{"runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}},"default-runtime": "nvidia","exec-opts": ["native.cgroupdriver=systemd"]}
其中:参数是定义运行时,这里定义了一个名为的运行时环境,-表示指定默认的运行时为刚刚定义的 。
最后一句"exec-opts": [".="]的作用是,因为K8S的文件驱动为,而的文件驱动为,两者不同会导致镜像无法启动,因此需要将K8S文件驱动也指定为 。
GPU驱动
GPU驱动安装和简单调度参见本站上一篇文章《实现K8S调度 GPU小记》英伟达驱动部分 。
K8S集群搭建

Rancher搭建K8S集群并配置GPU共享完整流程

文章插图
K8S集群搭建部分参见本站《安装以及创建K8S集群》,搭建完成后,将文件保存至主机的~/.kube/;
之后,安装来管理集群:
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"# 配置kubectlchmod 755 ./kubectlmv ./kubectl /usr/local/bin/kubectl# 查看版本kubectl version
使用查看pod:
# 查看podkubectl get pods
GPU 部署 我们从上获取--.json,放到主机/etc//ssl/下,如果有多个节点,则每个节点都需要执行:
cd /etc/kubernetes/ssl/curl -O https://raw.githubusercontent.com/AliyunContainerService/gpushare-scheduler-extender/master/config/scheduler-policy-config.json
部署GPU共享调度插件-schd-:
cd /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
部署设备插件--
如果你的集群不是新搭建的,之前如果已经安装了--,需要将其删除,版本的k8s可以使用 get pods看到--相应的pod,删除即可 。然后部署设备插件--:
cd /tmp/wget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-rbac.yamlkubectl create -f device-plugin-rbac.yamlwget https://raw.githubusercontent.com/AliyunContainerService/gpushare-device-plugin/master/device-plugin-ds.yaml# 默认情况下,GPU显存以GiB为单位,若需要使用MiB为单位,需要在这个文件中,将--memory-unit=GiB修改为--memory-unit=MiBkubectl create -f device-plugin-ds.yaml