2017年1月26日木曜日

docker-compose で JobScheduler Agent を使う


docker-comose で JobScheduler のテスト環境を作る」で構築した JobSchedulerのテスト環境に JobSchedulerAgent をインストールしたコンテナを追加します。


JobScheduler Agent のイメージ作成


JobScheduler Agent の Dockerfile を作成します。
内容は以下のとおり。
[root@centos0702 js_agent]# cat Dockerfile
FROM java:8-jre
WORKDIR /root

RUN wget https://download.sos-berlin.com/JobScheduler.1.10/jobscheduler_unix_universal_agent.1.10.0.tar.gz && \
tar xfvz jobscheduler_unix_universal_agent.1.10.0.tar.gz

CMD ["/root/jobscheduler_agent/bin/jobscheduler_agent.sh", "start_docker"]

イメージを作成します。
[root@centos0702 js_agent]# docker build -t js_agent .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM java:8-jre
 ---> e44d62cf8862
Step 2 : WORKDIR /root
 ---> Using cache
 ---> 929d91235aed
Step 3 : RUN wget https://download.sos-berlin.com/JobScheduler.1.10/jobscheduler_unix_universal_agent.1.10.0.tar.gz && tar xfvz jobscheduler_unix_universal_agent.1.10.0.tar.gz
 ---> Using cache
 ---> ba19b86027e9
Step 4 : CMD /root/jobscheduler_agent/bin/jobscheduler_agent.sh start_docker
 ---> Using cache
 ---> df211a9ec34d
Successfully built df211a9ec34d

イメージを確認します。
[root@centos0702 js_agent]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
js_agent                             latest              df211a9ec34d        About an hour ago   445.8 MB

docker-compose に追加


「docker-comose で JobScheduler のテスト環境を作る」で作成した docker-compose.yml に JobSchedulerAgent のコンテナを追加します。(赤字部分)
[root@centos0702 sosjs]# cat docker-compose.yml
jobscheduler:
  image: floedermann/jobscheduler
  links:
    - db:mysql
  volumes_from:
    - datastore
  ports:
    - "4444:4444"
    - "40444:40444"

db:
  image: mariadb
  environment:
    MYSQL_USER: jobscheduler
    MYSQL_PASSWORD: jobscheduler
    MYSQL_ROOT_PASSWORD: scheduler
    MYSQL_DATABASE: jobscheduler

datastore:
   image: busybox
   command: /bin/true
   volumes:
     - ./live:/opt/jobscheduler/data/scheduler/config/live

js_agent:
   image: js_agent

コンテナの起動


JobScheduler のテスト環境を起動します。
[root@centos0702 sosjs]# docker-compose up -d
Creating sosjs_datastore_1
Creating sosjs_db_1
Creating sosjs_js_agent_1
Creating sosjs_jobscheduler_1

コンテナの状態を確認します。 sosjs_js_agent_1 がJobSchedulerAngetコンテナです。
[root@centos0702 sosjs]# docker-compose ps
            Name                         Command                         State                          Ports
-------------------------------------------------------------------------------------------------------------------------
sosjs_datastore_1              /bin/true                      Exit 0
sosjs_db_1                     docker-entrypoint.sh mysqld    Up                             3306/tcp
sosjs_jobscheduler_1           bash                           Up                             0.0.0.0:40444->40444/tcp,
                               /opt/startup_scheduler.sh                                     0.0.0.0:4444->4444/tcp,
                                                                                             48444/tcp
sosjs_js_agent_1               /root/jobscheduler_agent/b     Up
                               ...

sosjs_js_agent_1 のIPアドレスを確認します。
[root@centos0702 sosjs]# docker inspect sosjs_js_agent_1 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",

JOB動作確認


sosjs_js_agent_1 でジョブを実行するために、プロセスクラスを定義します。
[root@centos0702 sosjs]# cat ./live/js_agent01.process_class.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<process_class  max_processes="10" remote_scheduler="http://172.17.0.4:4445"/>

sosjs_js_agent_1 で実行する JobChain と Job を定義します。
Job は IPアドレスを表示します。
[root@centos0702 sosjs]# cat ./live/job_chain1.job_chain.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain  process_class="js_agent01">
    <job_chain_node  state="job01" job="job01" next_state="success" error_state="error"/>
    <job_chain_node  state="success"/>
    <job_chain_node  state="error"/>
</job_chain>
[root@centos0702 sosjs]# cat ./live/job01.job.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<job  order="yes">
    <script  language="shell">
        <![CDATA[
ip a
        ]]>
    </script>
    <run_time />
</job>

JOC でJobChainを実行して確認してみます。
プロセスクラスは下図のとおり


JobChain は下図のとおり


Job実行結果を見ると下図のとおり。
sosjs_js_agent_1 のIPアドレスが表示されます。