Kubernetes目前主要在很小程度上支持CPU和内存的发现。Kubelet自己处理的设备很是少。
Kubernetes对于硬件都使用都依赖于硬件厂商的自主研发kubernetes插件,经过硬件厂商的插件从而让kubernetes进行硬件支持。git
实现的逻辑以下:github
Kubernetes的NVIDIA设备插件是一个Daemonset,容许您自动:docker
公开群集的每一个节点上的GPU数量
跟踪GPU的运行情况
在Kubernetes集群中运行启用GPU的容器。
该存储库包含NVIDIA的Kubernetes设备插件的官方实现。json
运行Kubernetes NVIDIA设备插件的先决条件列表以下所述:ubuntu
运行nvidia-docker 2.0 先决条件列表以下所述:centos
在继续以前,必须完全删除nvidia-docker软件包的1.0版。
您必须中止并删除全部使用nvidia-docker 1.0启动的容器。api
docker volume ls -q -f driver = nvidia-docker | xargs -r -I {} -n1 docker ps -q -a -f volume = {} | xargs -r docker rm -f sudo apt-get purge nvidia-docker
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f sudo yum remove nvidia-docker
确保已为您的发行版安装了NVIDIA驱动程序和受支持的Docker 版本(请参阅先决条件)。
若是有自定义/etc/docker/daemon.json,则nvidia-docker2程序包可能会覆盖它,先作好相关备份。架构
安装nvidia-docker2软件包并从新加载Docker守护程序配置:学习
sudo apt-get install nvidia-docker2 sudo pkill -SIGHUP dockerd
安装nvidia-docker2软件包并从新加载Docker守护程序配置:测试
sudo yum install nvidia-docker2 sudo pkill -SIGHUP dockerd
若是必需要使用旧版本的docker进行安装nvidia-docker 2.0
必须固定nvidia-docker2以及nvidia-container-runtime安装时的版本,例如:
sudo apt-get install -y nvidia-docker2=2.0.1+docker1.12.6-1 nvidia-container-runtime=1.1.0+docker1.12.6-1
使用
apt-cache madison nvidia-docker2 nvidia-container-runtime
或
yum search --showduplicates nvidia-docker2 nvidia-container-runtime
列出可用版本。
基本用法
nvidia-docker向Docker守护程序注册一个新的容器运行时。使用时必须选择nvidia运行时docker run:
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
nvidia-docker 2.0安装和使用方法详见《docker在Ubuntu下1小时快速学习》
须要启用nvidia运行时做为节点上的默认运行时。须要编辑docker守护进程配置文件,该文件一般出如今/etc/docker/daemon.json,配置内容以下:
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } }
若是runtimes不存在,请从新安装nvidia-docker,或参考nvidia-docker官方页面
在您但愿使用的全部 GPU节点上启用此选项后,您能够经过部署如下Daemonset在群集中启用GPU支持:
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v1.11/nvidia-device-plugin.yml
可使用资源属性nvidia.com/gpu配置,来经过容器级资源使用NVIDIA GPU要求:
apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: cuda-container image: nvidia/cuda:9.0-devel resources: limits: nvidia.com/gpu: 2 #请求2个GPU - name: digits-container image: nvidia/digits:6.0 resources: limits: nvidia.com/gpu: 2 #请求2个GPU
警告: 若是在使用带有NVIDIA映像的设备插件时,未配置GPU请求个数,则宿主机上全部GPU都将暴露在容器内。
一、获取镜像
方法1,从Docker Hub中提取预构建的映像:
docker pull nvidia/k8s-device-plugin:1.11
方法2,不使用镜像,采用官方build方法:
docker build -t nvidia/k8s-device-plugin:1.11 https://github.com/NVIDIA/k8s-device-plugin.git#v1.11
方法3,采用自定义build文件方法:
git clone https://github.com/NVIDIA/k8s-device-plugin.git && cd k8s-device-plugin docker build -t nvidia/k8s-device-plugin:1.11 .
二、在本地运行
docker run --security-opt=no-new-privileges --cap-drop=ALL --network=none -it -v /var/lib/kubelet/device-plugins:/var/lib/kubelet/device-plugins nvidia/k8s-device-plugin:1.11
三、kubernetes部署为守护进程集:
kubectl create -f nvidia-device-plugin.yml
一、构建
C_INCLUDE_PATH=/usr/local/cuda/include LIBRARY_PATH=/usr/local/cuda/lib64 go build
二、在本地运行
./k8s-device-plugin