docker RAを使ってみる...

# 改訂履歴
2017/02/10  Linux-ha-japanで公開されているpacemaker1.1.15のリポジトリパッケージで再確認した為、内容を更新しました。

***

resourece-agentにあるdocker RAを利用してみました。
なお、確認は、CentOS7.3上でPacemakerのバージョンは、1.1.15、リソースエージェントは3.9.7を使っています。

# 準備
dockerをインストールしておきます。確認した時のdockerのバージョンは、1.13.1-rc2でした

```
[root@docker01 ~]# docker --version
Docker version 1.13.1-rc2, build 54f71fd

[root@docker01 ~]# ps -ef |grep docker
root       908     1  0 16:16 ?        00:00:01 /usr/bin/dockerd
root      1002   908  0 16:16 ?        00:00:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root      2116  1165  0 16:26 pts/0    00:00:00 grep --color=auto docker

```

今回は事前にdockerのイメージをローカルに用意しておく方式を取ります。
用意したイメージは、centos:latestです。

```
[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
remote              latest              7c4ab4ed16fd        4 days ago          312 MB
busybox             latest              7968321274dc        5 weeks ago         1.11 MB
centos              latest              67591570dd29        2 months ago        192 MB

```

# 内容
## CLIファイルの準備
以下の内容でCLIファイルを作成しておきます。
なお、今回はstonithは考慮していません。(dockerのコンテナのSTONITHには、fence_dockerを利用する必要があります）

```files:CLI.crm

property no-quorum-policy="ignore" \
        stonith-enabled="false" \
        startup-fencing="false" \

rsc_defaults resource-stickiness="INFINITY" \
        migration-threshold="1"

primitive container1 ocf:heartbeat:docker \
        params \
                name="test1" \
                run_opts="-t -i" \
                run_cmd="/bin/bash" \
                image="docker.io/centos:centos7" \
        op start interval="0s" timeout="90s" on-fail="restart" \
        op monitor interval="3s" timeout="30s" on-fail="restart" \
        op stop interval="0s" timeout="90s" on-fail="fence"

```
### 起動
Pacemaker(corosyncも)を起動します。
起動後、crmコマンドで先のCLIファイルを投入します。

```
[root@docker01 ~]# systemctl start pacemaker
[root@docker01 ~]# crm configure load update docker.crm 

[root@docker01 ~]# crm_mon -1 -Af
Stack: corosync
Current DC: docker01 (version 1.1.15-1.el7-e174ec8) - partition WITHOUT quorum
Last updated: Mon Feb 20 16:21:58 2017          Last change: Mon Feb 20 16:21:53 2017 by root via cibadmin on docker01

1 node and 1 resource configured

Online: [ docker01 ]

 container1     (ocf::heartbeat:docker):        Started docker01

Node Attributes:
* Node docker01:

Migration Summary:
* Node docker01:

[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a77497bf8c80        centos:latest       "/bin/bash"         47 seconds ago      Up 46 seconds                           test1

```

### エラー検知
とりあえず、起動したコンテナをkill（故障）してみます。

```
[root@docker01 ~]# docker kill test1
test1

[root@docker01 ~]# crm_mon -1 -Af
Stack: corosync
Current DC: docker01 (version 1.1.15-1.el7-e174ec8) - partition WITHOUT quorum
Last updated: Mon Feb 20 16:23:45 2017          Last change: Mon Feb 20 16:21:53 2017 by root via cibadmin on docker01

1 node and 1 resource configured

Online: [ docker01 ]


Node Attributes:
* Node docker01:

Migration Summary:
* Node docker01:
   container1: migration-threshold=1 fail-count=1 last-failure='Mon Feb 20 16:23:32 2017'

Failed Actions:
* container1_monitor_3000 on docker01 'not running' (7): call=7, status=complete, exitreason='none',
    last-rc-change='Mon Feb 20 16:23:32 2017', queued=0ms, exec=0ms

```

ちゃんと、エラー検知してますね。

次は、fence_dockerでSTONITHをしてみたいと思います。
 - 2015/10/30補足：現状、Pacemakerでfence_dockerでのSTONITHを実行させる為には、dockerコンテナ内でPacemakerクラスタを構成する必要がある。(dockerコンテナ内のリソース故障～STONITH～ホストへfence_dockerでSTONITHを依頼)