単機Docker-compose編成pbspro_maya


単機Docker-compose編成pbspro_maya

  • 単機Docker-compose編成pbspro_maya
  • 前提
  • Component編成
  • プロファイル
  • pbs共有ボリューム
  • 起動容器
  • clustershスクリプトプロセス
  • を実行
  • Pbspro取付
  • cluster_master_1
  • cluster_worker_
  • 計算ノード
  • を追加
  • テスト
  • 問題
  • 改良スクリプト登録コンテナインストールPBS
  • 1追加ボリューム
  • 2コンテナ
  • を再作成する.
  • 3 Master自動インストールPbspro
  • 4ロット量子化worker取付Pbspro
  • 5 Masterコンテナにworkerコンテナ
  • を追加する.
  • 6テスト


  • 1前提


    1 dockerのインストール
    参考centos 7インストールdocker
    2 docker composeのインストール
    方法1:
    $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

    方法2: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ミラーの準備
    方法1:pullpbspro-mayaミラーリング
    #     pullpbspro-maya  push docker hub  
    docker pull akunisnice/pbspro-maya

    方法2:pbspro-mayaミラーを作成する
    参考:Centos 7+Maya 2017+Pbsproインストール

    2 Component編成


    フォルダ: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

    プロファイル


    ビルドを推奨する場合、ミラー名は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

    スターティングコンテナ


    3つのコンテナを起動
    # 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ファイルを変更し、最後から2行目を次のように変更します.
    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