单机Docker-compose编排pbspro_maya

单机Docker-compose编排pbspro_maya

  • 单机Docker-compose编排pbspro_maya
    • 前提
    • Compose编排
      • 配置文件
      • pbs共享卷
      • 启动容器
      • 执行clustersh脚本过程
    • Pbspro安装
      • cluster_master_1
      • cluster_worker_
      • 添加计算节点
      • 测试
    • 问题
    • 改进脚本登陆容器安装PBS
      • 1 添加卷
      • 2 重新创建容器
      • 3 Master自动化安装Pbspro
      • 4 批量化worker安装Pbspro
      • 5 在Master容器上添加worker容器
      • 6 测试

1 前提

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安装

2 Compose编排

文件夹: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

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

执行cluster.sh脚本过程

CLEAN UP CLUSTER

SPIN UP REGISTRY

BUILD IMAGE

PUSH IMAGE TO REGISTRY

SPIN UP MASTER NODE

SPIN UP WORKER NODES

CLUSTER READY

3 Pbspro安装

1 cluster_master_1

进入共享卷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

2 cluster_worker_*

进入共享卷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

3 添加计算节点

进入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'

4 测试

前提在所有的计算节点添加相同的非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

4 问题

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

至此结束!后面的已经添加到上面了


5 改进:脚本登陆容器安装PBS

回到2 Compose编排

5.1 添加卷

修改docker-compose.yml文件时,添加挂载卷,用于容器之间共享脚本文件

添加volumes

volumes:
  - /pbs:/pbs

添加volumes_from

volumes_from:
      - master

5.2 重新创建容器

停止,清除已创建的容器,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

5.3 Master自动化安装Pbspro

#查看容器
$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

5.4 批量化worker安装Pbspro

$cd /pbs/master/
$chmod +x login_worker.sh installpbs_worker.sh
$./login_worker.sh
#worker安装Pbspro运载后台运行,所以在./login_worker.sh执行完后稍等一会

5.5 在Master容器上添加worker容器

这里也可以写成脚本,自动化添加,但是感觉没有必要了,手动添加

$. /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

5.6 测试

在所有的计算节点添加相同的非root用户,也可以写成脚本,自动化添加

$docker exec -d [containerId] adduer user1

使用普通用户登录master节点,然后运行

$adduser user1
$su user1
#查看节点状态 free则节点添加正常
$pbsnodes -a
#提交作业
$echo 'sleep 10' | qsub
#查看作业
$qstat -a


                               20171207-Boy

你可能感兴趣的:(安装教程)