Docker容器安装-多节点PbsPro

  • Docker容器安装-多节点PbsPro
  • 简介
    • 1 Docker简介
    • 2 PBS简介
  • 安装Docker
  • 建立SSH互信
  • 安装配置PbsPro
    • 1 配置管理节点
    • 2 配置计算节点
    • 3 启动PBS添加计算节点
    • 3 测试
  • PBS命令
    • 1 qsub 命令
    • 2 qstat 命令
    • 3 qdel 命令
    • 4 qmgr 命令用于队列管理
    • 5 基本脚本写法和选项
  • 可能出现的问题
  • 总结
  • 相关博客
  • 参考资料

Docker容器安装-多节点PbsPro

名称 版本 下载
系统 CentOS-7-x86_64-DVD-1708 点我
镜像 pbspro/pbspro docker pull pbspro/pbspro

1 简介:

1.1 Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

1.dockerClient客户端

2.Docker Daemon守护进程

3.Docker Image镜像

4.DockerContainer容器

Docker总架构

Docker容器安装-多节点PbsPro_第1张图片

详情:Docker源码分析(一):Docker架构

1.2 PBS简介

PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需要,如集群系统、超级计算机和大规模并行系统。

PBS是功能最为齐全, 历史最悠久, 支持最广泛的本地集群调度器之一。PBS的主要特点有:代码开放,免费获取;支持批处理、交互式作业和串行、多种并行作业,如MPI、PVM、HPF、MPL。

PBS的目前包括:openPBS, PBS Pro和Torque三个主要分支.

OpenPBS:是最早的PBS系统, 目前已经没有太多后续开发

PBS pro:是PBS的商业版本, 功能最为丰富

Torque:是Clustering公司接过了OpenPBS, 并给与后续支持的一个开源版本

应用PBS提交任务则会形成任务队列,依次执行,有效分配资源,避免资源竞争。否则CPU时间片会轮流分配给各个人的任务,从而影响所有人的正常作业。

torque主要由三个主要部件组成:

PBS服务守护进程: pbs_server 负责接收作业提交,位于服务节点

PBS调度守护进程: pbs_sched 负责调度作业,位于服务节点

PBS MOM守护进程: pbs_mom 负责监控本机并执行作业,位于所有计算节点

2 安装Docker

就不具体介绍了,网上的安装资料很多

#卸载老版本的 docker 及其相关依赖
$sudo yum remove docker docker-common container-selinux docker-selinux docker-engine
#安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源
$sudo yum install -y yum-utils
#添加yum源
$sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#更新yum索引
$sudo yum makecache fast
#安装 docker-ce
$sudo yum install docker-ce
#启动 docker
$sudo systemctl start docker
#验证是否安装成功
$sudo docker info
#通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
$vi /etc/docker/daemon.json
#添加
{
  "registry-mirrors": ["https://w5z91a3d.mirror.aliyuncs.com"]
}
#开放管理端口映射
$vi /lib/systemd/system/docker.service
#修改ExecStart=/usr/bin/dockerd为以下内容 
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654
#将管理地址写入 /etc/profile
$echo 'export DOCKER_HOST=tcp://0.0.0.0:2375' >> /etc/profile  
$source /etc/profile  
$systemctl daemon-reload && service docker restart  
#测试docker
$sudo docker run hello-world 
#若成功,显示:
Hello from Docker!
This message shows that your installation appears to be working correctly.
#安装OK!

Docker 安装完成后,下载pbspro/pbspro镜像,此镜像中已经安装了pbspro

$Docker pull pbspro/pbspro

下一步,运行此镜像创建三个容器建立SSH互信。

3 建立SSH互信

参考:使用ssh在容器间建立互信.md

使用pbspro/pbspro镜像创建三个容器,分别指定镜像名称、hostname、自定义网络、IP并且添加互信的hostname到/etc/hosts中,如下表:

容器名称 容器hostname ip
pbs1 pbs1 172.18.0.3
pbs2 pbs2 172.18.0.4
pbs3 pbs3 172.18.0.5

镜像创建三个容器,pbs1作为主节点进行管理,pbs2和pbs3作为计算节点进行计算

$docker run -tid --name pbs1 -h pbs1 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.3 pbspro/pbspro bash

$docker run -tid --name pbs2 -h pbs2 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.4 pbspro/pbspro bash

$docker run -tid --name pbs3 -h pbs3 --add-host pbs1:172.18.0.3 --add-host pbs2:172.18.0.4 --add-host pbs3:172.18.0.5 --net=mynetwork --ip=172.18.0.5 pbspro/pbspro bash

查看刚刚创建的三个制定镜像,如下图所示:

分别进入这三个容器,参考使用ssh在容器间建立互信.md进行建立ssh互信

建立完毕后,在分别进行配置PbsPro

4 安装配置PbsPro

因为下载的这个镜像已经安装有了Pbspro,所以只需要配置,如果想制作自己的PbsPro,请参考:使用RPM包安装PBS Pro

4.1 配置管理节点

登录管理节点pbs1,然后以root用户运行,修改/etc/pbs.conf

$vi /etc/pbs.conf
#修改PBS_SERVER和PBS_START_MOM
PBS_SERVER=pbs1
PBS_START_MOM=0

备注:如果是单机安装pbspro,要将PBS_START_MOM改为1

修改/var/spool/pbs/mom_priv/config

$vi /var/spool/pbs/mom_priv/config
#修改clienthost为pbs1
clienthost pbs1

4.2 配置计算节点

分别登录计算节点pbs2和pbs3,然后以root用户运行,修改/etc/pbs.conf

$vi /etc/pbs.conf
#修改PBS_SERVER和PBS_START_MOM
PBS_SERVER=pbs1
PBS_START_MOM=1

修改/var/spool/pbs/mom_priv/config

$vi /var/spool/pbs/mom_priv/config
#修改clienthost为pbs1
clienthost pbs1

4.3 启动PBS添加计算节点

分别在pbs1和pbs2、pbs3节点上运行以下命令启动pbs,第一次启动会创建数据库

$/etc/init.d/pbs start 

备注:

$/etc/init.d/pbs start    #启动pbs
$/etc/init.d/pbs stop     #停止pbs
$/etc/init.d/pbs restart  #重启pbs
$/etc/init.d/pbs status   #查看pbs状态

在管理节点添加计算机节点pbs2、pbs3

$. /etc/profile.d/pbs.sh
$qmgr -c "create node pb2"
$qmgr -c "create node pb3"

查看添加的计算节点,节点的状态显示为free即就是计算节点添加成功

$pbsnodes -a

4.3 测试

在管理节点pbs1创建用户,进行提交作业,状态显示R为任务正在运行,同时也需要在其他计算节点也添加相同的用户,使其UID个GID一样

$useradd user1
$su user1
$cd
$qsub -- /bin/sleep 10
$qstat -a
#使用tracejob JobID查看作业的进度
$tracejob 13.pbs1

备注:**pbs任务提交脚本及查看任务状态

#B  只用于任务向量,表示任务向量已经开始执行 
#E  任务在运行后退出 
#H  任务被服务器或用户或者管理员阻塞 
#Q  任务正在排队中,等待被调度运行 
#R  任务正在运行 
#S  任务被服务器挂起,由于一个更高优先级的任务需要当前任务的资源 
#T  任务被转移到其它执行节点了 
#U  由于服务器繁忙,任务被挂起 
#W  任务在等待它所请求的执行时间的到来(qsub -a) 
#X  只用于子任务,表示子任务完成

5 PBS命令

5.1 qsub 命令

qsub 命令:用于提交作业脚本

#命令格式:
$qsub -a date_time [-C directive_prefix]
      -e path -j join -l resource_list
      -M user_list -o path -q destination
      -S path_list-v variable_list
      -W additional_attributes

参数说明:因为所采用的选项一般放在pbs 脚本中提交,所以具体见PBS 脚本选项。

例:# qsub aaa.pbs 提交某作业,系统将产生一个作业号

5.2 qstat 命令

qstat 命令:用于查询作业状态信息

#命令格式:
$qatat -f-i-s -Q-B

参数说明:

参数 作用
-f jobid 列出指定作业的信息
-a 列出系统所有作业
-i 列出不在运行的作业
-n 列出分配给此作业的结点
-s 列出队列管理员与scheduler 所提供的建议
-R 列出磁盘预留信息
-Q 操作符是destination id,指明请求的是队列状态
-q 列出队列状态,并以alternative 形式显示
-au userid 列出指定用户的所有作业
-B 列出PBS Server 信息
-r 列出所有正在运行的作业
-Qf queue 列出指定队列的信息
-u 若操作符为作业号,则列出其状态。

例:# qstat -f 211 查询作业号为211 的作业的具体信息。

5.3 qdel 命令

qdel 命令:用于删除已提交的作业

#命令格式:
$qdel [-W 间隔时间] 作业号

例:# qdel -W 15 211 #15秒后删除作业号为211 的作业

5.4 qmgr 命令—用于队列管理

qmgr 命令—用于队列管理

qmgr -c "create queue batch queue_type=execution"

qmgr -c "set queue batch started=true"

qmgr -c "set queue batch enabled=true"

qmgr -c "set queue batch resources_default.nodes=1"

qmgr -c "set queue batch resources_default.walltime=3600"

qmgr -c "set server default_queue=batch"

5.5 基本脚本写法和选项

当多个用户使用同一个计算资源时,每个用户用PBS脚本提交自己的任务,由PBS对这些任务进行管理和资源的分配。下面是一个简单的PBS脚本:

#!/bin/bash
#PBS -l nodes=20
#PBS -N snaphu
#PBS -j oe
#PBS -l walltime=24:00:00
#PBS -l cput=1:00:00
#PBS -q dque
$cd $PBS_O_WORKDIR
$cat PBS_NODEFILE PBS_NODEFILE> NODEFILE
$mpirun -np ./mpitest

将这个脚本保存成submit然后qsub submit就将这个mpitest的任务提交给了系统。脚本中#PBS为脚本选项,用于设置一些参数。

#PBS -l 表示资源列表,用于设定特定任务所需的一些参数。这里的nodes表示并行环境下可以使用的节点数,而walltime表示任务最大时限,而cput表示cpu时间的最大时限,运行时间和cpu使用时间超过对应的时限,任务就会以超时退出。这三个参数不是PBS脚本参数,而是并行环境所需的参数。

#PBS -N 表示任务名称。

#PBS -j 表示系统输出,如果是oe,则标准错误输出(stderr)和标准输出(stdout)合并为stdout,如果是eo,则合并为stderr,如果没有设定或设定为n,则stderr和stdout分开。

#PBS -q 表示当前任务选用的队列。在并行环境下,一个系统中往往有多个队列,任务提交后,将在所选的队列中排除等候。系统中有哪些队列可以用qstat -q查看。

PBS脚本文件由脚本选项和运行脚本两部分组成。

1) PBS作业脚本选项 (若无-C选项,则每项前面加‘#PBS’)

2) 运行脚本同LINUX下一般的运行脚本文件格式如下:

​ mpirun –np 进程数 ./可执行程序名

6 可能出现的问题

1 防火墙

出于简单,可以关闭防火墙

$systemctl stop firewalld.service #停止firewall
$systemctl disable firewalld.service #禁止firewall开机启动

2 下载源

更换 CentOS 7 的下载源为阿里云

$yum install -y wget
#备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除YUM缓存
yum clean all
#重建数据库
rpm --rebuilddb
#生成缓存
$yum makecache

3 IPv4 forwarding is disabled

若出现WARNING IPv4 forwarding is disabled. Networking will not work


#解决办法:
$vi /usr/lib/sysctl.d/00-system.conf
#添加如下代码:
net.ipv4.ip_forward=1
#重启network服务
$systemctl restart network
#查看是否修改成功
$sysctl net.ipv4.ip_forward
#如果返回为net.ipv4.ip_forward = 1则表示成功了

4 yum 安装时错误 Errno 14 Couldn’t resolve host

修改一下 /etc/resolv.conf,添加一个nameserver 8.8.8.8完成

$vi  /etc/resolv.conf
nameserver 8.8.8.8

7 总结

待续。。。

8 相关博客

参考资料

1 :Using Docker to Instantiate PBS

2:使用RPM包安装PBS Pro

3:How to install PBS Pro using the configure script

4:如何在Rocks HPC集群里安装PBS Pro开源版

4:PBS服务开启操作流程


​ 2017/11/16-Boy

你可能感兴趣的:(docker,pbs,pbspro,容器,安装教程)