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安装
文件夹:compose-pbspro-maya目录结构如下:
compose-pbspro-maya
|__ base:基础Dockerfile(centos7+maya+pbspro的Dockerfile)
|__ onbuild
|__ Dockerfile : 触发器 ssh配置 copy配置文件
|__ cluster:使用脚本构建并启动多个容器在单机上
|__ cluster.sh :Compose编排启动容器
|__ Dockerfile :添加镜像(akunisnice/pbspro-maya:onbuild)
|__ docker-compose.yml : 定义master和worker容器
|__ .evn : 设置环境变量REGISTRY_ADDR、REGISTRY_PORT、IMAGE_NAME
下载地址:pbspro_maya
建议build时,镜像名字符合push镜像的规则,便于后续编排
$cd compose-pbspro-maya/onbuild
#不清楚这一步是否真的需要 待续
$docker build -t akunisnice/pbspro-maya:onbuild .
#脚本构建启动文件夹
$cd compose-pbspro-maya/cluster
#修改Dockerfile文件,将上一步的build的镜像写在FROM中
##########################################################################
FROM akunisnice/pbspro-maya:onbuild
##########################################################################
#修改docker-compose.yml文件,给master文件添加hostname、privileged和volumes
$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
volumes:
- /pbs:/pbs
worker:
image: $REGISTRY_ADDR:$REGISTRY_PORT/$IMAGE_NAME
user: root
entrypoint: ["mpi_bootstrap", "role=worker", "mpi_master_service_name=master", "mpi_worker_service_name=worker"]
networks:
- net
volumes_from:
- master
...
##########################################################################
在本机根目录创建pbs文件夹,pbs文件下载:文件地址
pbs共享卷:用于登陆容器安装pbs
pbs
|__master
|__login_master.sh : 登陆master节点,执行installpbs_master.sh
|__installpbs_master.sh :安装pbspro,配置,启动pbs
|__worker
|__login_worker.sh : 批量登陆worker节点,分别执行installpbs_worker.sh(存在点问题)
|__login_Singleworker.sh : 登陆某个worker节点,然后执行installpbs_worker.sh
|__installpbs_worker.sh :安装pbspro,配置,启动pbs
启动三个容器
#给cluster.sh授权
$chmod +x cluster.sh
#执行脚本启动三个容器在单机上
$./cluster.sh up size=3
查看
$docker ps
CLEAN UP CLUSTER
SPIN UP REGISTRY
BUILD IMAGE
PUSH IMAGE TO REGISTRY
SPIN UP MASTER NODE
SPIN UP WORKER NODES
CLUSTER READY
进入共享卷pbs,使用脚本在cluster_master_1容器节点安装Pbspro
$cd /pbs/master/
#执行脚本./login_master.sh, 添加要登陆master容器的参数
$./login_master.sh cluster_master_1
#然后,等待...,脚本执行完毕后,查看cluster_master_1容器是否成功安装并启动Pbspro
$docker exec -it cluster_master_1 /etc/init.d/pbs status
或者执行按照以下的命令手动进入容器进行安装Pbspro
#进入容器
$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
进入共享卷pbs,使用脚本在cluster_worker_*
容器节点安装Pbspro
备注:本来可以使用login_worker.sh
进行批量安装的,但貌似执行docker exec
不能循环使用
#给cluster_worker_1安装Pbspro
$cd /pbs/worker
#执行脚本./login_Singleworker containerId/Name
$./login_Singleworker cluster_worker_1
#执行结束后,查看pbs状态
查看pbs状态
$docker exec -it cluster_worker_* /etc/init.d/pbs status
状态正常,继续重复按照上述步骤进行给其他worker容器安装Pbspro
或者手动执行如下命令给每个worker容器安装Pbspro
#进入容器
$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
进入cluster_master_1节点,添加计算节点(此处也可以写成脚本,但感觉没有太大必要了)
$docker exec -it cluster_master_1 bash
$. /etc/profile.d/pbs.sh
$qmgr -c 'create node cluster_worker_1'
$qmgr -c 'create node cluster_worker_2'
前提在所有的计算节点添加相同的非root用户
$docker exec -it cluster_master_1 adduser user1
$docker exec -it cluster_worker_1 adduser user1
$docker exec -it cluster_worker_2 adduser user1
使用普通用户登录master节点,然后运行
$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
至此结束!后面的已经添加到上面了
回到2 Compose编排
修改docker-compose.yml
文件时,添加挂载卷,用于容器之间共享脚本文件
添加volumes
volumes:
- /pbs:/pbs
添加volumes_from
volumes_from:
- master
停止,清除已创建的容器,network
$./cluster.sh down
重新$./cluster.sh up size=3
,可以在.env中修改仓库的名称和镜像名
在卷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
20171207-Boy