kubernetes 1.14.3 调度GPU资源

Posted on Mon 18 November 2019 in kubernetes

因公司研究院的同学工作需要, 研究院那边申请了一台装有10个NVIDIA 2080TI的显卡, 需要把这台机器加入到k8s集群里面去,正好借此机会研究了下kubernetes调度GPU。

先说下环境:

kubernetes: 1.14.3
docker: docker-ce-18.0.6.3
  • 安装libtool 在centos下面, 执行命令yum install libtool-ltdl, 在ubuntu环境下,执行 apt install libtool

  • 安装 Nvidia-docker2 如果之前安装过nvidia-docker 1.0 的话, 执行如下命令进行删除

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f

然后卸载nvidia-docker

sudo yum remove nvidia-docker
  • 安装 docker-ce-18.0.6.3 去官网找repo源,安装就完事儿了

  • 安装nvdia-docker2 执行如下命令

yum install  -y nvidia-docker2

安装完,先别急着重启docker, 还需要配置下 /etc/docker/daemon.json, 添加如下配置:

{
    ...,
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    ...
 }

然后在重启docker,

  • 验证

执行如下命令

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

会打印GPU的详细信息,如同在宿主机器上直接敲出命令 nvidia-smi, 即证明安装完成

  • k8s集群安装 NVDIA device plugin 执行如下命令
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.12/nvidia-device-plugin.yml

然后执行 在该节点上执行 kubeadm join把该节点加入到kubernetes 集群即可。当通过 kubectl get nodes 获取到该节点状态为Ready时, 执行如下 命令:

kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

//output
NAME                GPU
gpu-node-01         10

这时就可以在你的资源配置里面加上添加 nvidia.com/gpu: "2"即可。