我是不会告诉你为啥要用docker,nvidia-docker,k8s的! 百度和google一堆,自己找找! 这里只教你怎么部署坑最少!
1 所需环境
可能大部分人喜欢用ubuntu
来进行,但是我喜欢用centos
,所以本文就用centos7
谁让我是作者,就是这么任性!
- docker(版本小于19.03)
- centos7
- gpu驱动
- cuda
使用该方案的前提下,需要你的linux机器已经安装好gpu的驱动和cuda gpu驱动和cuda要两者单独安装,不要听信网上的可以一起安装,不然坑死你
2 安装和配置docker
去上一篇文章看看吧! 最完善的docker安装和配置教程
3 安装和配置nvidia-docker
我们要想在docker中使用gpu,就需要安装nvidia官方出的nvidia-docker
我们按照官方的文档来进行吧!Nvidia-Docker GitHub
3.1 配置安装源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | \
sudo tee /etc/yum.repos.d/nvidia-docker.repo
3.2 安装nvidia-docker
安装nvidia-docker会覆盖我们上面2.5.2
中所配置的镜像加速,会在3.3
中重新配置
sudo yum install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
让我们来测试下是否可以使用gpu吧,如果出现了熟悉的nvidia-smi的界面,说明就成功啦!
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
3.3 配置nvidia-docker
在我们安装nvidia-docker后,docker的默认执行引擎还是原生的,那么有没有更加简单便捷的方法来使用nvidia-docker呢,我们一起来看看吧
默认情况下,我们需要每次都加
--runtime=nvidia
参数来声明使用gpu
sudo systemctl stop docker
sudo echo '{"registry-mirrors":["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://xgb5chrw.mirror.aliyuncs.com"],"default-runtime":"nvidia","runtimes":{"nvidia":{"path":"nvidia-container-runtime","runtimeArgs":[]}},"insecure-registries":["192.168.101.253:1234"]}' > /etc/docker/daemon.json
sudo systemctl start docker
上面这条命令又配置了镜像加速源,又配置了nvidia-docker作为执行引擎!
4 安装和配置k8s
安装过k8s的小伙伴都知道因为国内万能的墙的原因,我们安装k8s是相当痛苦的
下面我就介绍一种方法来快速安装k8s
,那就是rancher
Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。
让我们跟着文档一起吧!Rancher
偷偷告诉你Rancher可不止支持k8s呦!
4.1 安装Rancher
rancher有
单点版本
和HA高可用版本
,在这里我们主要使用k8s,所以对这个就洒洒水啦!(生产别用单点,小心被打死!)
使用这条命令就可以启动安装Rancher了,docker真tm方便!
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /var/lib/rancher:/var/lib/rancher/ \
-v /root/var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable
在上方我们发现映射了80和443端口,这两个端口就是web控制台的端口! 配置密码什么的,要是需要我告诉你,你就别往下看了!
对了,有个坑的地方!rancher的 server url 最好使用ip,不然可能有坑!
4.2 安装k8s
在rancher的界面依次进行如下操作
4.2.1 添加集群
4.2.2 CUSTOME,输入集群名称
4.2.3 添加节点
1.k8s环境配置:
一. 主机名(hostname)配置只支持包含
-
和.
两种特殊符号,所有节点主机名不能相同
二. 配置每台主机的
hosts
(/etc/hosts
),添加host_ip $hostname
到/etc/hosts文件中。
三. CentOS关闭selinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/>config
四. 关闭防火墙
sudo systemctl stop firewalld
sudo chkconfig firewalld off
五. 配置主机时间、时区、系统语言
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile
2.在已经安装配置了nvidia-docker的机器上,运行下方的docker命令
etcd:k8s注册中心
controller:k8s控制器
worker:k8s工作节点
我这里全部选中,如果多节点可以搭配选择!
3.因为这些机器需要运行rancher-agent
,需要pull 这个镜像,所以可能要等等
运行命令后直到下方显示绿色框,框中显示已添加节点数跟你的相同,你再点击确定!
点击确定后,下面的状态代表pull k8s的镜像,因为k8s的部署也是节点形式,需要pull
k8s
的镜像
4.下面这个状态的时候,代表k8s集群已经安装完成啦!
4.2.4 安装kubectl
rancher默认不安装kubectl
,但是没有kubect
就是没有灵魂的k8s
,下面我们就来安装吧!
1.进入页面 kubectl下载
2.选择对应版本下载
查看k8s版本:
点击rancher页面的集群
红线处标明了k8s的版本
3.下载
这里我们选择1.13.7版本下载
wget https://www.cnrancher.com/download/kubernetes/linux-amd64-v1.13.7-kubectl
4.安装kubectl
改名,授权,移动
mv linux-amd64-v1.13.7-kubectl kubectl
sudo chmod 777 ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
然后测试下,看看是否安装成功
kubectl version
你以为这就安完了?no!我们还要配置
kubectl
连接我们的k8s集群,毕竟kubectl
只是个客户端
5.配置kubectl
进入rancher页面,点击集群
点击右方的kubeconfig文件,然后你会看到一大片yaml
滑动到底部,点击复制到剪贴板
这时候用vim或者其他方式写入文件吧!
mkdir ~/.kube
vim ~/.kube/config
#然后写入进去
6.运行试试
运行下面的命令,如果出现了你部署k8s的机器,那就说明成功啦!
kubectl get nodes
4.3 安装k8s-device-plugin
请确定你已经安装了
nvidia-docker
并且docker
使用nvidia
作为默认引擎
使用下面的命令就可以安装k8s-device-plugin了! k8s-device-plugin GitHub
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
到目前为止,我们已经搭建好了一个可以用gpu资源的k8s集群啦!
下面我将介绍如何打包使用gpu的镜像
5 打包GPU镜像
dockerfile相关知识不在这里介绍了,自己去学!
要想在k8s里使用gpu资源,同时也需要我们的镜像支持!
nvidia/cuda dockerhub就是nvidia提供的基础镜像
nvidia目前只提供
ubuntu
和centos
镜像,我们打包只需要最基础的base版本就可以了
base版本还100多M(还没安装语言呢),让我很是怀念
alpine-glib
(alpine-glib才8M)
比如下面这个,我就是使用了cuda10版本的centos7系统镜像
FROM nvidia/cuda:10.0-base-centos7
...
好了!终于结束了!我可是踩了好几天的坑啊!