Elo*_*zos 2 gpu docker kubernetes nvidia-docker docker-in-docker
我遇到了 K8S+DinD 问题:
could not select device driver "nvidia" with capabilities: [[gpu]]
完全错误
http://localhost:2375/v1.40/containers/long-hash-string/start: Internal Server Error ("could not select device driver "nvidia" with capabilities: [[gpu]]")
Run Code Online (Sandbox Code Playgroud)
exec
K8S pod 内的 DinD 映像nvidia-smi
不可用。
一些调试,似乎是由于 DinD 缺少 Nvidia-docker-toolkit,当我直接在本地笔记本电脑 docker 上运行相同的作业时,我遇到了相同的错误,我通过安装nvidia-docker2 sudo apt-get install -y nvidia-docker2
修复了相同的错误。
我想也许我可以尝试将 nvidia-docker2 安装到 DinD 19.03 (docker:19.03-dind),但不知道该怎么做?通过多阶段 docker 构建?
非常感谢!
更新:
吊舱规格:
spec:
containers:
- name: dind-daemon
image: docker:19.03-dind
Run Code Online (Sandbox Code Playgroud)
我自己搞定了。
参考
首先,我修改了 ubuntu-dind 镜像(https://github.com/billyteves/ubuntu-dind)来安装 nvidia-docker(即将 nvidia-docker 站点中的说明添加到 Dockerfile 中)并将其更改为基于在 nvidia/cuda 上:9.2-runtime-ubuntu16.04。
然后我创建了一个包含两个容器的 pod,一个是前端 ubuntu 容器,另一个是作为 sidecar 的特权 docker 守护进程容器。sidecar的图像是我上面提到的修改后的图像。
但由于这篇文章是 3 年前的文章,我确实花了相当多的时间来匹配依赖项版本、3 年多的仓库迁移等。
我修改后的 Dockerfile 版本来构建它
ARG CUDA_IMAGE=nvidia/cuda:11.0.3-runtime-ubuntu20.04
FROM ${CUDA_IMAGE}
ARG DOCKER_CE_VERSION=5:18.09.1~3-0~ubuntu-xenial
RUN apt-get update -q && \
apt-get install -yq \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable" && \
apt-get update -q && apt-get install -yq docker-ce docker-ce-cli containerd.io
# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies
RUN set -eux; \
apt-get update -q && \
apt-get install -yq \
btrfs-progs \
e2fsprogs \
iptables \
xfsprogs \
xz-utils \
# pigz: https://github.com/moby/moby/pull/35697 (faster gzip implementation)
pigz \
# zfs \
wget
# set up subuid/subgid so that "--userns-remap=default" works out-of-the-box
RUN set -x \
&& addgroup --system dockremap \
&& adduser --system -ingroup dockremap dockremap \
&& echo 'dockremap:165536:65536' >> /etc/subuid \
&& echo 'dockremap:165536:65536' >> /etc/subgid
# https://github.com/docker/docker/tree/master/hack/dind
ENV DIND_COMMIT 37498f009d8bf25fbb6199e8ccd34bed84f2874b
RUN set -eux; \
wget -O /usr/local/bin/dind "https://raw.githubusercontent.com/docker/docker/${DIND_COMMIT}/hack/dind"; \
chmod +x /usr/local/bin/dind
##### Install nvidia docker #####
# Add the package repositories
RUN curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add --no-tty -
RUN distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && \
echo $distribution && \
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
tee /etc/apt/sources.list.d/nvidia-docker.list
RUN apt-get update -qq --fix-missing
RUN apt-get install -yq nvidia-docker2
RUN sed -i '2i \ \ \ \ "default-runtime": "nvidia",' /etc/docker/daemon.json
RUN mkdir -p /usr/local/bin/
COPY dockerd-entrypoint.sh /usr/local/bin/
RUN chmod 777 /usr/local/bin/dockerd-entrypoint.sh
RUN ln -s /usr/local/bin/dockerd-entrypoint.sh /
VOLUME /var/lib/docker
EXPOSE 2375
ENTRYPOINT ["dockerd-entrypoint.sh"]
#ENTRYPOINT ["/bin/sh", "/shared/dockerd-entrypoint.sh"]
CMD []
Run Code Online (Sandbox Code Playgroud)
当我使用exec
登录Docker-in-Docker容器时,我可以成功运行nvidia-smi
(之前返回未找到错误,然后无法运行任何与GPU资源相关的docker run)
欢迎拉取我的图片brandsight/dind:nvidia-docker
归档时间: |
|
查看次数: |
1242 次 |
最近记录: |