Kubernetes目前主要在很小程度上支持CPU和内存的发现。Kubelet本身处理的设备非常少。
Kubernetes对于硬件都使用都依赖于硬件厂商的自主研发kubernetes插件,通过硬件厂商的插件从而让kubernetes进行硬件支持。
实现的逻辑如下:
Kubernetes的NVIDIA设备插件是一个Daemonset,允许您自动:
公开群集的每个节点上的GPU数量
跟踪GPU的运行状况
在Kubernetes集群中运行启用GPU的容器。
该存储库包含NVIDIA的Kubernetes设备插件的官方实现。
运行Kubernetes NVIDIA设备插件的先决条件列表如下所述:
运行nvidia-docker 2.0 先决条件列表如下所述:
在继续之前,必须彻底删除nvidia-docker软件包的1.0版。
您必须停止并删除所有使用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 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、获取镜像
方法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 .
2、在本地运行
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
3、kubernetes部署为守护进程集:
kubectl create -f nvidia-device-plugin.yml
1、构建
C_INCLUDE_PATH=/usr/local/cuda/include LIBRARY_PATH=/usr/local/cuda/lib64 go build
2、在本地运行
./k8s-device-plugin
Kubernetes1.11.1 使用Nvidia显卡配置方法
原文:https://www.cnblogs.com/hzw97/p/11726193.html