官方文档

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

集群规划

根据OpenPAI的要求,至少需要三台机器用于构建。

master 192.168.0.131
worker 192.168.0.130
dev 192.168.0.132

基础环境准备

操作系统

官网目前仅支持ubuntu,官方推荐 16.04,这里测试用的 ubuntu20.04

root密码设置(每台)

建议大家都使用root来进行操作,避免各种权限问题,也可以使用具有sudo权限的用户

sudo passwd root

网络设置

根据自己具体环境设置

ip

类型

硬件要求

软件要求

192.168.0.130

dev

它可以与所有其他机器(master和worker机器)通信。 它是独立于master机器和worker机器之外的一台机器。 它可以访问Internet。尤其是可以访问Docker Hub。部署过程会从Docker Hub拉取Docker镜像。

1、Ubuntu 16.04 (18.04、20.04应该可用,但没有经过完整测试) 2、SSH服务已开启。 可以免密登录所有master和worker机器。 Docker已被正确安装。

192.168.0.131

master

1、 至少40GB内存。 2、必须有固定的局域网IP地址(LAN IP address),且可以和其他所有机器通信 3、可以访问Internet。尤其是可以访问Docker Hub。部署过程会从Docker Hub拉取Docker镜像。

1、Ubuntu 16.04 (18.04、20.04应该可用,但没有经过完整测试) 2、SSH服务已开启。 和所有worker机器有同样的SSH用户名和密码,且该SSH用户有sudo权限。 3、Docker已被正确安装。 NTP已被成功开启。您可以用命令apt install ntp来检查。 它是OpenPAI的专用服务器。OpenPAI管理它的所有资源(如CPU、内存、GPU等)。如果有其他工作负载,则可能由于资源不足而导致未知问题

192.168.0.132

worker



安装Docker

由于Open PAI是基于K8s来进行实现的,所以要先安装Docker

更新操作系统配置(每台)

这一步是预防使用apt-get install update操作失败

vim /etc/apt/sources.list

直接注释掉红框这一行

Open PAI v1.8.0完整安装部署教程_Open PAI

执行安装Docker的命令(每台)

apt-get remove docker docker-engine docker-ce docker.io
apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install -y docker-ce
systemctl start docker

安装nvidia-container-runtime(master、worker)

安装后重启一下docker

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
apt-get update
apt-get install nvidia-container-runtime

添加阿里云镜像源地址(每台)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

配置Master机器(master)

在基础服务的基础上master机器上面只需要单独配置NTP即可

apt install ntp

安装Open PAI

根据官网步骤来即可,里面超级多的坑,我们来慢慢填平,下面为官网地址 https://openpai.readthedocs.io/zh_CN/latest/manual/cluster-admin/installation-guide.html

克隆Open PAI项目

在dev box机器上,使用下面的命令来克隆OpenPAI的repo:

cd ~
git clone https://github.com/microsoft/pai.git
如果无法下载可以使用下面国内镜像地址下载
git clone https://hub.nuaa.cf/microsoft/pai.git
cd pai

checkout到某一个tag,来选择需要安装的OpenPAI版本:

git checkout v1.8.0

配置config文件

vim /root/pai/contrib/kubespray/config/config.yaml

官网指南坑:官方建议的配置方式,其中gcr.azk8s.cn以及shaiictestblob01.blob.core.chinacloudapi.cn早已经停止维护,官方还没更新新的地址,造成报错无法拉取到镜像!!!

Open PAI v1.8.0完整安装部署教程_Open PAI_02

经过无数次试错,使用了阿里云的镜像和docker hub的镜像进行搭配,直接拷贝过去修改用户名密码即可,你们得到这个配置文件就已经成功一半了。

user: root
password: your password
docker_image_tag: v1.8.0

gcr_image_repo: "registry.cn-hangzhou.aliyuncs.com"
kube_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers"

openpai_kubespray_extra_var:
  pod_infra_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers/pause-{{ image_arch }}"
  dnsautoscaler_image_repo: "docker.io/mirrorgooglecontainers/cluster-proportional-autoscaler-{{ image_arch }}"
  tiller_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-helm/tiller"
  registry_proxy_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-registry-proxy"
  metrics_server_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64"
  addon_resizer_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer"
  dashboard_image_repo: "registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-{{ image_arch }}"

配置layout文件

vim /root/pai/contrib/kubespray/config/layout.yaml

我使用的是虚拟机所有没有gpu因此worker使用的是cpu,如果大家有gpu可以参考layout.yaml原始模板,以下为根据我的机器配置修改后的模板

machine-sku:
  master-machine: # define a machine sku
    # the resource requirements for all the machines of this sku
    # We use the same memory format as Kubernetes, e.g. Gi, Mi
    # Reference: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#meaning-of-memory
    mem: 40Gi
    cpu:
      # the number of CPU vcores
      vcore: 8 # 如果是虚拟机建议分配8核
  cpu-machine:
    mem: 20Gi
    cpu:
      vcore: 8 # 如果是虚拟机建议分配8核

machine-list:
  - hostname: master # name of the machine, **do not** use upper case alphabet letters for hostname
    hostip: 192.168.0.131
    machine-type: master-machine # only one master-machine supported
    pai-master: "true"
  - hostname: worker
    hostip: 192.168.0.130
    machine-type: cpu-machine
    pai-worker: "true"

为集群安装K8s

Open PAI提供了一键安装的脚本,直接执行这个脚本即可,因为我们配置了config.yaml因此会从docker hub以及阿里云下载,请保证机器能正常访问这两个网站,除此之外安装过程中会从github上面拉取文件。

如果访问github经常无法拉取文件,可以修改刚才 /pai/contrib/kubespray/script# cat environment.sh
将
git clone -b release-2.11 https://github.com/kubernetes-sigs/kubespray.git ${HOME}/pai-deploy/kubespray
修改为
git clone -b release-2.11 https://hub.nuaa.cf/kubernetes-sigs/kubespray.git ${HOME}/pai-deploy/kubespray
即可下载,修改完毕执行下面的脚本

cd /root/pai/contrib/kubespray
/bin/bash quick-start-kubespray.sh -v

控制台正常退出代表安装成功,如果不是正常退出请查看报错信息,然后根据报错信息去修改,我出现的问题是镜像拉取失败,经过无数次试错后使用上面的config.yaml则不会再出错。

在K8s的基础上部署OpenPAI组件

跟部署k8s一样,也是一键部署,只要网络能访问阿里云镜像源和github同样没有任何问题,这个过程要下载很多pod 比较慢,耐心等即可

cd /root/pai/contrib/kubespray
/bin/bash quick-start-service.sh

部署完成后会出现以下信息,到这里眼泪已经止不住了!

登录OpenPAI
http://192.168.0.130    master节点ip 
用户名:admin
密码:admin-password

集群所使用到的镜像

master节点

Open PAI v1.8.0完整安装部署教程_Open PAI_03

Open PAI v1.8.0完整安装部署教程_Open PAI_04

worker节点

Open PAI v1.8.0完整安装部署教程_Open PAI_05

集群安装建议

解决网络访问github总是失败

安装过程发现从github下载文件出现超时,建议在master和worker都配置一个vpn保证能正常访问github

如果没有就将 github 地址https://github.com/ 替换成国内镜像地址 https://hub.nuaa.cf

解决部署k8s集失败重试还需要执行git clone

当部署k8s的过程中出现错误,重新执行下面命令部署发现又会从github重复下载pai-deploy这个文件夹

/bin/bash quick-start-kubespray.sh -v

解决方法,注释掉每次都重新下载这两行代码

vim /root/pai/contrib/kubespray/script/environment.sh
#sudo rm -rf ${HOME}/pai-deploy/kubespray
#git clone -b release-2.11 https://github.com/kubernetes-sigs/kubespray.git ${HOME}/pai-deploy/kubespray

解决下载过程中无法下载下来的文件

在部署过程中我就出现cni-plugins-linux-amd64-v0.8.1.tgzcalicoctl 这两个文件下载不下来,可以单独下载,然后传到报错所输出的路径下面

wget https://hub.nuaa.cf/containernetworking/plugins/releases/download/v0.8.1/cni-plugins-linux-amd64-v0.8.1.tgz
wget https://hub.nuaa.cf/projectcalico/calicoctl/releases/download/v3.7.3/calicoctl-linux-amd64  
(如果名字不一样,下载完毕后按照报错提示修改文件名 mv  calicoctl-linux-amd64 calicoctl)

解决下载镜像慢的问题

镜像下载下来后,可以打包成本地文件,后续安装直接通过docker load -i 直接加载到Docker

打包命令,以master机器上的镜像为例,worker同理

docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o openpai_master.tar.gz

在新master加载打包好的镜像命令,worker同理

docker load -i openpai_master.tar.gz