1 安装docker
参考centos7 安装docker
2 安装docker compose
方法一:
$curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$chmod +x /usr/local/bin/docker-compose
#查看版本
$docker-compose version
方法二:用pip方式安装(备用)
#安装pip
yum -y install epel-release
yum -y install python-pip
#确认版本
pip --version
#更新pip
pip install --upgrade pip
#安装docker-compose
pip install docker-compose
#查看版本
docker-compose version
3 准备pbspro-maya镜像
方法一:pullpbspro-maya镜像
#自己制作的pullpbspro-maya已经push到docker hub上了
docker pull akunisnice/pbspro-maya
方法二:制作pbspro-maya镜像
参考:Centos7+Maya2017+Pbspro安装
文件夹:centos-maya-openpbs目录结构如下:
centos-maya-openpbs
|__ base:基础Dockerfile(centos7+maya+pbspro的Dockerfile)
|__ cluster:使用脚本构建并启动多个容器在单机上
|__ cluster.sh :Compose编排启动容器
|__ Dockerfile :添加镜像(akunisnice/pbspro-maya:onbuild)
|__ docker-compose.yml : 定义master和worker容器
|__ onbuild
|__ Dockerfile : 触发器 ssh配置 copy文件
下载地址:稍等
开始编排
建议build时,镜像名字符合push镜像的规则,便于后续编排
$cd centos-maya-openpbs/onbuild
#不清楚这一步是否真的需要 待续
$docker build -t akunisnice/pbspro-maya:onbuild .
#脚本构建启动文件夹
$cd centos-maya-openpbs/cluster
#修改Dockerfile文件,将上一步的build的镜像写在FROM中
##########################################################################
FROM akunisnice/pbspro-maya:onbuild
##########################################################################
#修改docker-compose.yml文件,给master文件添加hostname和privileged
$vi docker-compose.yml
##########################################################################
master:
image: $REGISTRY_ADDR:$REGISTRY_PORT/$IMAGE_NAME
user: root
hostname: master
privileged: true
entrypoint: ["mpi_bootstrap", "role=master", "mpi_master_service_name=master", "mpi_worker_service_name=worker"]
ports:
- "${SSH_PORT}:22"
networks:
- net
##########################################################################
#给cluster.sh授权
$chmod +x cluster.sh
#执行脚本启动三个容器在单机上
$./cluster.sh up size=3
查看
$docker ps
./cluster.sh up size=3的过程
CLEAN UP CLUSTER
SPIN UP REGISTRY
BUILD IMAGE
PUSH IMAGE TO REGISTRY
SPIN UP MASTER NODE
SPIN UP WORKER NODES
CLUSTER READY
#进入容器
$docker exec -it cluster_master_1 bash
$cd /root/rpmbuild/RPMS/x86_64
$yum install -y pbspro-server-14.1.0-0.x86_64.rpm
#修改/etc/pbs.conf,使其cluster_master_1也为计算节点
$vi /etc/pbs.conf
PBS_START_MOM=1
#启动pbs
$/etc/init.d/pbs start
#进入容器
$docker exec -it cluster_worker_1 bash
$cd /root/rpmbuild/RPMS/x86_64
$yum install -y pbspro-execution-14.1.0-0.x86_64.rpm
#修改/etc/pbs.conf文件,PBS_SERVER为cluster_master_1的hostname,此处我的为master
$vi /etc/pbs.conf
PBS_SERVER=master
#修改/var/spool/pbs/mom_priv/config文件,指定为cluster_master_1的hostname
$vi /var/spool/pbs/mom_priv/config
$clienthost master
#启动pbs
$/etc/init.d/pbs start
#进入容器
$docker exec -it cluster_worker_2 bash
$cd /root/rpmbuild/RPMS/x86_64
$yum install -y pbspro-execution-14.1.0-0.x86_64.rpm
#修改/etc/pbs.conf文件,PBS_SERVER为cluster_master_1的hostname,此处我的为master
$vi /etc/pbs.conf
PBS_SERVER=master
#修改/var/spool/pbs/mom_priv/config文件,指定为cluster_master_1的hostname
$vi /var/spool/pbs/mom_priv/config
$clienthost master
#启动pbs
$/etc/init.d/pbs start
$. /etc/profile.d/pbs.sh
$qmgr -c 'create node cluster_master_1'
$qmgr -c 'create node cluster_worker_1'
$qmgr -c 'create node cluster_worker_2'
前提在所有的计算节点添加相同的非root用户,使用普通用户登录master节点,然后运行
$adduser user1
$su user1
# 查看节点状态 free则节点添加正常
$pbsnodes -a
# 提交作业
$echo 'sleep 10' | qsub
# 查看作业
$qstat -a
1 cannot create directory ‘/sys/fs/cgroup/systemd/system.slice’: Read-only file system
原因:权限不够,给master节点创建容器时,添加:privileged
2 要是在build openpbs时报错,错误发生在rpmbuild -ba pbspro.spec,检查Dockerfile
修改Dockerfile文件,倒数第二行,改为如下:
tar zxvf v14.1.0.tar.gz && mv v14.1.0.tar.gz pbspro-14.1.0.tar.gz
3 Failed to recv data from background qsub
在提交作业时,重复提交时,会出现这个问题,但重复第三次就没有事了,未解决
回到2 Compose编排
修改docker-compose.yml
文件时,添加挂载卷,用于容器之间共享脚本文件
添加volumes
volumes:
- /pbs:/pbs
添加volumes_from
volumes_from:
- master
清除已创建的容器,重新$./cluster.sh up size=3
,或者修改./cluster.sh 使用自定义的容器名
在卷pbs文件下中:文件地址
pbs
|__master
|__login_master.sh : 登陆master节点,执行installpbs_master.sh
|__installpbs_master.sh :安装pbspro,配置,启动pbs
|__worker
|__login_worker.sh : 批量登陆worker节点,分别执行installpbs_worker.sh
|__installpbs_worker.sh :安装pbspro,配置,启动pbs
#查看容器
$docker ps
$cd /pbs/master/
$chmod +x login_master.sh installpbs_master.sh
#./login_master.sh [容器ID/Name]
$./login_master.sh cluster_master_1
#若是提示没有TTY,则修改login_master.sh, 加-d使用后台执行,如果这样的话,需要等待一会
#执行完毕后,进入cluster_master_1容器
$docker exec -it cluster_master_1 bash
#查看pbs状态
$/etc/init.d/pbs status
$cd /pbs/master/
$chmod +x login_worker.sh installpbs_worker.sh
$./login_worker.sh
#worker安装Pbspro运载后台运行,所以在./login_worker.sh执行完后稍等一会
这里也可以写成脚本,自动化添加,但是感觉没有必要了,手动添加
$. /etc/profile.d/pbs.sh
$qmgr -c 'create node cluster_master_1'
$qmgr -c 'create node cluster_worker_1'
$qmgr -c 'create node cluster_worker_2'
#查看节点状态 free则节点添加正常
$pbsnodes -a
在所有的计算节点添加相同的非root用户,也可以写成脚本,自动化添加
$docker exec -d [containerId] adduer user1
使用普通用户登录master节点,然后运行
$adduser user1
$su user1
#查看节点状态 free则节点添加正常
$pbsnodes -a
#提交作业
$echo 'sleep 10' | qsub
#查看作业
$qstat -a