Openpai v1.3.0部署总结

前提条件

  1. 集群内主机系统为Ubuntu 16.04 LST,且具有相同用户名和密码的管理员账户。

  2. 每一台机器的代理软件监听地址为http://127.0.0.1:8118和hostIP:8118,自己部署,不在本文范围以内。

初始化

所有机器

切换清华源

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

更新依赖

1
2
sudo apt update
sudo apt upgrade

安装openssh-server

1
sudo apt install openssh-server

安装docker

https://docs.docker.com/engine/install/ubuntu/

1
2
3
4
5
6
7
8
9
10
11
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo nano /etc/apt/sources.list.d/download_docker_com_linux_ubuntu.list

这里不按照上面官网提供的方法做的原因是pai是这样操作的,否则会导致源重复,apt update会报错。

1
deb https://download.docker.com/linux/ubuntu xenial stable
1
2
3
sudo dpkg --remove-architecture i386
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

安装python

按理说Ubuntu默认是有安装python的,但是我在实际操作的时候发现有的机器就是没有python,所以手动确认以下,以避免报错。

1
sudo apt install python

master

安装ntp

1
sudo apt install ntp

worker

安装GPU驱动

https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa

https://openpai.readthedocs.io/zh_CN/latest/manual/cluster-admin/installation-faqs-and-troubleshooting.html#how-to-check-whether-the-gpu-driver-is-installed

https://howtoinstall.co/en/ubuntu/xenial/xserver-xorg?action=remove

1
2
3
4
5
6
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-430
sudo apt-get autoremove xserver-xorg
sudo apt-get autoremove --purge xserver-xorg
sudo reboot

安装nvidia-container-runtime

https://github.com/NVIDIA/nvidia-container-runtime#installation

https://openpai.readthedocs.io/zh_CN/latest/manual/cluster-admin/installation-faqs-and-troubleshooting.html#how-to-install-nvidia-container-runtime

1
2
3
4
5
6
7
8
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
sudo apt-get install nvidia-container-runtime
sudo nano /etc/docker/daemon.json
1
2
3
4
5
6
7
8
9
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
1
sudo systemctl restart docker

测试驱动是否正常

1
sudo docker run nvidia/cuda:10.0-base nvidia-smi

devbox

配置免密登录

  1. 生成密钥
1
ssh-keygen
  1. 向远程主机注册密钥
1
ssh-copy-id username@remote_host
  1. 测试是否可免密登录
1
ssh username@remote_host

启动代理

集群中的机器由于需要拉取gcr.io的镜像,这在国内是无法访问的,故需要配置docker代理(openpai官网给的镜像已不可用)。devbox机器要下载pai的源码,如果访问github速度慢的话,可配置代理。

启动docker代理

https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

这是docker命令用的代理

1
2
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
1
2
3
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8118"
Environment="HTTPS_PROXY=http://127.0.0.1:8118"
1
2
3
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker
1
sudo docker pull gcr.io/google-containers/kube-apiserver:v1.15.11

启动docker容器代理

这是docker容器用的代理,按需配置,注意要将集群内所有机器加入到noProxy列表,否则无法互相访问。

1
2
mkdir -p ~/.docker
nano ~/.docker/config.json
1
2
3
4
5
6
7
8
9
10
11
{
"proxies":
{
"default":
{
"httpProxy": "http://hostIP:8118",
"httpsProxy": "http://hostIP:8118",
"noProxy": "MasterIP, WorkerIP"
}
}
}

启动git代理

1
2
git config --global http.proxy http://127.0.0.1:8118
git config --global https.proxy http://127.0.0.1:8118

开始安装

下面都在devbox中操作

https://openpai.readthedocs.io/zh_CN/latest/manual/cluster-admin/installation-guide.html#_4

编写参数文件

参考上面格式直接在家目录建立三个文件,分别为master.csvworker.csvconfig

由于已经使用了代理,故不再使用官方文档里面的gcr.io镜像!所以我们只需要下面这个简单的配置文件即可。

1
2
3
4
5
6
7
user: <your-ssh-username>
password: <your-ssh-password>
branch_name: pai-1.3.y
docker_image_tag: v1.3.0

kubeadm_download_url: "https://shaiictestblob01.blob.core.chinacloudapi.cn/share-all/kubeadm"
hyperkube_download_url: "https://shaiictestblob01.blob.core.chinacloudapi.cn/share-all/hyperkube"

按步骤运行

1
2
3
4
5
6
git clone https://github.com/microsoft/pai.git
cd pai
git checkout pai-1.3.y
cd contrib/kubespray
/bin/bash quick-start-kubespray.sh -m ~/master.csv -w ~/worker.csv -c ~/config
/bin/bash quick-start-service.sh -m ~/master.csv -w ~/worker.csv -c ~/config

后续

成功启动service之后,除了安装MarketPlace插件以外,其他个性化配置过程一般不会有问题,除非配置文件写错了。

MarketPlace配置

感觉插件有很多对部署不友好的bug,我折腾了好几天也没在master机器上部署成功。

主要体现在以下:

  1. 官方的给的镜像用不起来,没有识别我传进去的rest_server入口参数;

  2. 与master主机上的服务端口冲突,而且修改端口后rest_server无法访问数据库,应该也是没有识别外部传入的参数;

  3. master机器的许多参数被openpai部署程序修改,导致无法个性化定制,比如在master机器上启动自己的docker容器会无法联网等等。

最后我的实现方案是在Worker机器上自己构建镜像来部署MarketPlace。过程比较复杂,还得去学Nginx,Dockerfile,docker-compose等,所以我也没想要写教程。我把我的配置文件共享出来即可,有兴趣的自己研究,没兴趣那就直接用。

项目地址:https://github.com/siaimes/openpaimarketplace

执行步骤:

  1. 将项目克隆到worker机器家目录;

  2. 修改openpaimarketplace/webportal_plugin/Dockerfile中的WrokerIP为你的工作节点IP;

  3. 运行./build.sh构建镜像;

  4. 修改nginx配置文件中的ssl为你的ssl证书信息,证书的生成按照这个文档执行即可,区别在于加密参数写2048,1024太短了,nginx不接受;

  5. 运行sudo docker-compose up -d启动服务。

  6. 在openpai配置文件中相关位置填入https://WorkerIP/openpaimarketplace_webportal/plugin.js

这样部署有一个缺点:若是使用了自签证书,默认情况下,插件无法被加载,需要在浏览器中输入5中的地址,手动允许不安全的链接。当然,如果有公网机器和域名的话,这个问题就不是问题了。

0%