概要
docker-machine にはいくつかドライバが用意されており、その中に「vmwarevsphere」というドライバあります
https://docs.docker.com/machine/drivers/
今回はそれを使って vCenter 上に docker 用のホストを作成してみました
また、docker-swarm を使ってホストをクラスタリングしてみました
環境
仮想環境
- ESXi 5.5.0
- CPU: Xeon E5-2690 (Sandy Bridge 世代)
- Memory: 400GB
- VMware vCenter Server 5.5.0
クライアント側
- Ubuntu 16.04
- docker-machine 0.8.2
docker-machine のインストール
こちらを参考にインストールしてください
コンテナホストの作成
それでは、docker-machine を使ってコンテナホストを作成sます
docker-machine create --driver vmwarevsphere --vmwarevsphere-username "vcenter_username" --vmwarevsphere-password "vcenter_pass" --vmwarevsphere-vcenter "192.168.10.10" --vmwarevsphere-network "network1" --vmwarevsphere-datastore "datastore1" --vmwarevsphere-datacenter dc1 --vmwarevsphere-hostsystem "cluster/hostname" docker-host1
という感じです
vCenter の IP とログインするためのユーザ名とパスワードを指定します
あとはネットワークとデータストアを指定します
データセンタがある場合はデータセンター名を指定してください
あとはコンテナホストを作成するとクラスタとホストを指定します
作成が完了したら docker-machine ls
で確認してみましょう
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker-host1 - vmwarevsphere Running tcp://192.168.10.11:2376 v1.12.6
という感じで作成されていれば OK です
ちなみにゲスト OS は boot2docker が CD ブートで起動しています
http://boot2docker.io/
コンテナを作成してみる
コンテナホストが作成できたらコンテナを作成してみましょう
- eval $(docker-machine env docker-host1)
- docker pull nginx
- docker run -d -p 8080:80 nginx
とりあえず nginx が起動していることが確認できれば OK です
docker-swarm を試してみる
では今度はコンテナホストを swarm でクラスタリングしてみましょう
先程作成した docker-host1 はそのまま使います
まず swarm というコンテナを docker-host1 上で動作させます
- docker run swarm create
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
3ff891db6a4d: Pull complete
5e01cc94d2a7: Pull complete
692b182fbe11: Pull complete
Digest: sha256:e20f9cf2b432451f99100acceac562a2b6620aad1301f8679e8ff8afe0360bef
Status: Downloaded newer image for swarm:latest
a1c0e3cd866eb1e2bb0875355ff1e5a5
ここで最後の一行に表示された文字列 (トークン) をメモしておきましょう
swarm を構築する際に使います
起動したらクラスタを構成するホストコンテナを追加していきます
swarm にはマスタとノードという 2 役があり、master が必ず必要なので先に master を作成しましょう
swarm master 作成
docker-machine create --driver vmwarevsphere --vmwarevsphere-username "vcenter_username" --vmwarevsphere-password "vcenter_pass" --vmwarevsphere-vcenter "192.168.10.10" --vmwarevsphere-network "network1" --vmwarevsphere-datastore "datastore1" --vmwarevsphere-datacenter dc1 --vmwarevsphere-hostsystem "cluster/hostname" --swarm --swarm-master --swarm-discovery token://a1c0e3cd866eb1e2bb0875355ff1e5a5 docker-host-swarm-master1
長い、、、ですが追加しているのは --swarm
以降のオプションだけです
--swarm --swarm-master --swarm-discovery token://a1c0e3cd866eb1e2bb0875355ff1e5a5 docker-host-swarm-master1
今回は master なので --swarm-master
オプションを指定しています
ではこの調子でノード役を追加していきます
swarm node 作成
docker-machine create --driver vmwarevsphere --vmwarevsphere-username "vcenter_username" --vmwarevsphere-password "vcenter_pass" --vmwarevsphere-vcenter "192.168.10.10" --vmwarevsphere-network "network1" --vmwarevsphere-datastore "datastore1" --vmwarevsphere-datacenter dc1 --vmwarevsphere-hostsystem "cluster/hostname" --swarm --swarm-discovery token://a1c0e3cd866eb1e2bb0875355ff1e5a5 docker-host-agent-node1
長い、、、ですが、これも --swarm
以降のオプションを追加してるだけです
しかもノード役の場合は --swarm-master
オプションもないので少し短くなっています
今回は折角なので docker-host-agent-node2 も作成しましょう
できたら docker-machine ls
で確認してみます
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker-host1 * vmwarevsphere Running tcp://192.168.10.11:2376 v1.13.0
docker-host-agent-node1 - vmwarevsphere Running tcp://192.168.10.13:2376 docker-host-swarm-master1 v1.13.0
docker-host-agent-node2 - vmwarevsphere Running tcp://192.168.10.14:2376 docker-host-swarm-master1 v1.13.0
docker-host-swarm-master1 - vmwarevsphere Running tcp://192.168.10.12:2376 docker-host-swarm-master1 (master) v1.13.0
swarm モードで起動しているコンテナホストには SWARM 欄に master ノードが書かれており、更に master には (master) と書かれています
コンテナを作成してみる
では、swarm 環境にコンテナを構築してみましょう
eval "$(docker-machine env --swarm docker-host-swarm-master1)"
- docker pull nginx
- docker run -d -p 8080:80 nginx
一度、環境変数を変更して master に向ける必要があります
あとはいつも通りに pull して run します
ps すると、おそらくコンテナがノード役のコンテナホストで動作してることがわかると思います
大量のコンテナを作成してみる
大量にコンテナを作成してちゃんとクラスタとして動作しているか確認してみましょう
とりあえず 20 個ほど作成してみます
for i in `seq -w 1 20`; do echo $i; docker run -d -p 80${i}:80 nginx; done;
これで ps してみるとずらっーとコンテナが表示されると思います
コンテナホストの IP が docker-machine ls でわかっているので、それぞれの IP で grep してカウントしてみましょう
するとちゃんと分散されてコンテナが作成されていることがわかると思います
swarm に属していないコンテナホストには作成されないようです
[root@ubuntu]# docker ps | grep 192.168.10.11 | wc -l
0
[root@ubuntu]# docker ps | grep 192.168.10.13 | wc -l
7
[root@ubuntu]# docker ps | grep 192.168.10.14 | wc -l
7
[root@ubuntu]# docker ps | grep 192.168.10.12 | wc -l
6
ちなみに vSphere Web Client で確認すると各コンテナホストにコンテナ分の仮想 IP が振られていることが確認できると思います
最後に
docker-machine の vmwarevsphere ドライバを使って vCenter 環境に docker クラスタを構築してみました
これをやったあとに気づいたのですが、swarm の管理が素の docker コマンドでもできるようになったようです
service という機能や join などのコマンドがあったので swarm 環境がより操作制御しやすく使いやすくなっていると思います
最近 VIC を触っているのでよく比べてしまうのですが VIC はまだ swarm に対応していないので、swarm を使いたい人は、docker-machine 方式を使ったほうが良いのかもしれません
Tips
マシンの停止と削除は以下のように実施します
削除したあとで環境変数を unset する必要があるので unset しておきましょう
- docker-machine stop docker-host1
- docker-machine rm docker-host1
- eval $(docker-machine env -u)
0 件のコメント:
コメントを投稿