集群规划
根据OpenPAI的要求,至少需要三台机器用于构建。
master 192.168.0.131
worker 192.168.0.130
dev 192.168.0.132
基础环境准备
操作系统
官网目前仅支持ubuntu,最好是用官方推荐的ubuntu 16.04
root密码设置(每台)
建议大家都使用root来进行操作,避免各种权限问题,也可以使用具有sudo权限的用户
sudo passwd root
网络设置
根据自己具体环境设置
master
auto ens33
iface ens33 inet static
address 192.168.0.131
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
worker
auto ens33
iface ens33 inet static
address 192.168.0.130
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
dev
auto ens33
iface ens33 inet static
address 192.168.0.130
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
更新网络服务(每台)
设置完网络后需要进行刷新
sudo /etc/init.d/networking restart
此时三台机器就可以在同一个局域网内相互访问了!
ssh远程访问设置
安装ssh服务(每台)
apt-get install openssh-server
配置ssh允许root用户登录(每台)
vim /etc/ssh/sshd_config
注释掉下面第一行,并添加下面第二行
# PermitRootLogin prohibit-password
PermitRootLogin yes
启动ssh(每台)
sudo service ssh start
安装Docker
由于Open PAI是基于K8s来进行实现的,所以要先安装Docker
更新操作系统配置(每台)
这一步是预防使用apt-get install update操作失败
vim /etc/apt/sources.list
直接注释掉红框这一行
执行安装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
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早已经停止维护,官方还没更新新的地址,造成报错无法拉取到镜像!!!
经过无数次试错,使用了阿里云的镜像和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上面拉取文件。
cd /root/pai/contrib/kubespray
/bin/bash quick-start-kubespray.sh -v
控制台正常退出代表安装成功,如果不是正常退出请查看报错信息,然后根据报错信息去修改,我出现的问题是镜像拉取失败,经过无数次试错后使用上面的config.yaml则不会再出错。
在K8s的基础上部署OpenPAI组件
跟部署k8s一样,也是一键部署,只要网络能访问阿里云镜像源和github同样没有任何问题
cd /root/pai/contrib/kubespray
/bin/bash quick-start-service.sh
部署完成后会出现以下信息,到这里眼泪已经止不住了!
登录OpenPAI
http://192.168.0.130 master节点ip
用户名:admin
密码:admin-password
集群所使用到的镜像
master节点
worker节点
集群安装建议
解决网络访问github总是失败
安装过程发现从github下载文件出现超时,建议在master和worker都配置一个vpn保证能正常访问github
解决部署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.tgz这个文件下载不下来,可以单独下载,然后传到报错所输出的路径下面
解决下载镜像慢的问题
镜像下载下来后,可以打包成本地文件,后续安装直接通过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