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 の機能で自動再起動を有効化されています。

photon-vha-image-01.png

たとえば、Docker コンテナが障害などで停止した場合は、

そのコンテナが Docker の仕組みで(vSphere HA に関係なく)自動再起動されます。

photon-vha-image-02.png

 

Photon Linux(Docker ホスト)のゲスト OS や VM が停止してしまった場合は、

ゲスト OS の VMware Tools ハートビートが途切れて、

vSphere HA によって VM がリセットされます。

そして VM の自動起動に合わせて、コンテナも自動起動されます。

photon-vha-image-03.png

 

Photon の VM が起動している ESXi が停止した場合は、

他の ESXi で Photon の VM (Docker ホスト自体)が起動され

その VM に含まれるコンテナも自動起動されます。

vSphere HA では、保護対象の VM は共有ストレージ配置するので、

Docker ホストごと、別の ESXi で起動されます。

photon-vha-image-04.png

 

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-vha-01.png

 

疑似障害を起こすため、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 がリセットされました。

photon-vha-02.png

 

VM のイベントにも、

「この仮想マシンは vSphere HA によってリセットされました。

原因: VMware Tools のハートビート障害。~」と表示されます。

VM のリセットにより、Photon のゲスト OS は

(物理サーバでいうところの)電源 Off → On と同じような状態になっています。

photon-vha-03.png

 

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 対応させる話でした。