VMware Photon Linux の Docker コンテナを、
簡易的に vSphere HA 対応にしてみました。
Docker では、run コマンドに、「--restart」オプションをつけることで、
コンテナを自動再起動されるように起動できます。
Docker run reference
https://docs.docker.com/reference/run/#restart-policies-restart
今回は、自動再起動の Docker コンテナをのせた Photon Linux(Docker ホスト)を、
vSphere HA の疑似障害でリセットしてみます。
Photon Linux と vSphere HA の関係。
vSphere HA と Docker コンテナの関係は、こんな感じになります。
Photon(Docker ホスト)は、普通の VM としてHA 保護されていて、
その上の Docker コンテナは、Docker の機能で自動再起動を有効化されています。
たとえば、Docker コンテナが障害などで停止した場合は、
そのコンテナが Docker の仕組みで(vSphere HA に関係なく)自動再起動されます。
Photon Linux(Docker ホスト)のゲスト OS や VM が停止してしまった場合は、
ゲスト OS の VMware Tools ハートビートが途切れて、
vSphere HA によって VM がリセットされます。
そして VM の自動起動に合わせて、コンテナも自動起動されます。
Photon の VM が起動している ESXi が停止した場合は、
他の ESXi で Photon の VM (Docker ホスト自体)が起動され
その VM に含まれるコンテナも自動起動されます。
vSphere HA では、保護対象の VM は共有ストレージ配置するので、
Docker ホストごと、別の ESXi で起動されます。
Photon Linux + vSphere HA してみる。
今回は、VMware Photon Linux 1.0 TP1 を
vSphere 5.5(vCenter 5.5 / ESXi 5.5)の VM にインストールしています。
root [ ~ ]# cat /etc/photon-release
VMware Photon Linux 1.0 TP1
root [ ~ ]# docker --version
Docker version 1.5.0, build a8a31ef
それでは、コンテナを自動再起動オプション付きで起動(docker run)してみます。
今回は「cont01」、「cont02」という名前で、2つのコンテナを起動しています。
- 「cont01」コンテナは、自動再起動なし。
- 「cont02」コンテナは、自動再起動あり。(--restart=always)
root [ ~ ]# docker run -d -p 8001:80 --name cont01 vmwarecna/nginx
21ed69a0e2508079e6381f5b52886c31941634c48393315f075a8017b8428dc6
root [ ~ ]# docker run -d -p 8002:80 --name cont02 --restart=always vmwarecna/nginx
941488dd344d7be3ed73aa7c456947826f6b152de8d8c980f99b56ff1366d943
root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
941488dd344d vmwarecna/nginx:latest "nginx -g 'daemon of 6 seconds ago Up 6 seconds 443/tcp, 0.0.0.0:8002->80/tcp cont02
21ed69a0e250 vmwarecna/nginx:latest "nginx -g 'daemon of 15 seconds ago Up 15 seconds 443/tcp, 0.0.0.0:8001->80/tcp cont01
コンテナの情報を表示してみます。
「cont02」コンテナの「RestartPolicy」 に、「always」が設定されていることがわかります。
root [ ~ ]# docker inspect -f "{{ .HostConfig.RestartPolicy }}" cont01
map[MaximumRetryCount:0 Name:]
root [ ~ ]# docker inspect -f "{{ .HostConfig.RestartPolicy }}" cont02
map[MaximumRetryCount:0 Name:always]
Photon のゲスト OS は、vSphere HA が有効な状態にしてあります。
Photon Linux には VMware Tools (open-vm-tools)が含まれるので、
HA を有効化してあるクラスタの ESXi で起動されている Photon ゲストも HA で保護されます。
疑似障害を起こすため、Photon Linux の VMware Tools を停止します。
root [ ~ ]# systemctl status vmtoolsd | grep Active
Active: active (running) since Wed 2015-05-13 22:58:11 UTC; 2 days ago
root [ ~ ]# systemctl stop vmtoolsd
root [ ~ ]# systemctl status vmtoolsd | grep Active
Active: inactive (dead) since Sat 2015-05-16 14:33:15 UTC; 3s ago
少し待つと、VMware Tools のハートビートが途切れたことで障害検知され
vSphere HA により Photon の VM がリセットされました。
VM のイベントにも、
「この仮想マシンは vSphere HA によってリセットされました。
原因: VMware Tools のハートビート障害。~」と表示されます。
VM のリセットにより、Photon のゲスト OS は
(物理サーバでいうところの)電源 Off → On と同じような状態になっています。
Photon の VM が自動起動した後に
Photon に再度ログインしてコンテナの状態を確認すると、
自動起動にしておいた「cont02」コンテナだけ自動起動されています。
root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
941488dd344d vmwarecna/nginx:latest "nginx -g 'daemon of 15 minutes ago Up 3 minutes 443/tcp, 0.0.0.0:8002->80/tcp cont02
自動起動にしたコンテナは、docker stop コマンドなどで停止できます。
root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
941488dd344d vmwarecna/nginx:latest "nginx -g 'daemon of 50 minutes ago Up 38 minutes 443/tcp, 0.0.0.0:8002->80/tcp cont02
root [ ~ ]# docker stop cont02
cont02
root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root [ ~ ]# ★「cont02」が停止され、なにも表示されない。
以上、Photon を簡易的に vSphere HA 対応させる話でした。