MacにDocker Swarmクラスタを構築 ①
Docker Swarm
最近Dockerを本番環境(オンプレミス)への導入を検討しています。となると、オーケストレーションどうしようかという話になると思いますが、 選択肢がいろいろあってどうしようかなーと思っていました。
- Kubernetes
- Docker Swarm
- Mesos
- Nomad
Nomad
がだいぶ良さそうでしたが、いかんせん日本語の情報、導入事例などが少なかったので、まず今回はとりあえずはお手軽そうな Docker Swarm
を候補として触ってみました。尚、Docker Swarmの特徴は以下です。
構築
MacなのでDocker-machineを使います。
Docker for Mac/Windows
をお使いの方は適宜読み解いて下さい。
(執筆時点ではプライベートベータなので、ほぼいらっしゃらないとは思いますが・・)
検証バージョン
以下の通りです。
$ docker version Client: Version: 1.10.3 API version: 1.22 Go version: go1.6 Git commit: 20f81dd Built: Sat Mar 12 04:08:57 UTC 2016 OS/Arch: darwin/amd64 Server: Version: 1.11.0-rc3 API version: 1.23 Go version: go1.5.3 Git commit: eabf97a Built: Fri Apr 1 23:33:49 2016 OS/Arch: linux/amd64 $ docker-machine version docker-machine version 0.6.0, build e27fb87 $ docker-swarm --version docker-swarm version 1.1.3 (HEAD)
Swarm Discovery
公式ドキュメントにもあるとおり、Swarmクラスタの構築にはService DiscoveryとしてのKVSが必要となります。 etcdでもconsulでも何でも良かったのですが、Zookeeperの環境が手元にあったので、今回はZookeeperでやってみます。
Zookeeperのコンテナを起動します。(もちろんコンテナである必要は特にありません)
$eval "$(docker-machine env zk-host)" $docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 wurstmeister/zookeeper docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d58f1a1b5b70 wurstmeister/zookeeper "/bin/sh -c '/usr/sbi" About an hour ago Up About an hour 0.0.0.0:2181->2181/tcp, 0.0.0.0:2888->2888/tcp, 22/tcp, 0.0.0.0:3888->3888/tcp furious_mahavira $ docker-machine ls docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS zk-host * virtualbox Running tcp://192.168.99.108:2376 v1.11.0-rc3
Docker swarm manager用のホストを作成
さきほど起動したZookeeperホストを -swarm-discovery zk://
と指定します。
その他 --swarm
などswarm関連のオプションを指定します。
$ docker-machine create --driver virtualbox --swarm --swarm-master --swarm-discovery zk://192.168.99.108:2181 swarm-manager $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS zk-host * virtualbox Running tcp://192.168.99.108:2376 v1.11.0-rc3 swarm-manager - virtualbox Running tcp://192.168.99.109:2376 swarm-manager (master) v1.11.0-rc3
Docker swarm node用のホストを作成
managerを起動したコマンドから --swarm-master
だけを取り除いてnode用のホストを立ち上げます。
今回は2つ立ち上げてみます。
$ docker-machine create --driver virtualbox --engine-insecure-registry 10.6.215.231:5000 --swarm --swarm-discovery zk://192.168.99.108:2181 swarm-node01 $ docker-machine create --driver virtualbox --engine-insecure-registry 10.6.215.231:5000 --swarm --swarm-discovery zk://192.168.99.108:2181 swarm-node02
確認
swarmの情報を得る為にいつものeval..に --swarm
を付けます
eval "$(docker-machine env --swarm swarm-manager)"
こんな感じでクラスタが立ち上がっています。
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS zk-host * virtualbox Running tcp://192.168.99.108:2376 v1.11.0-rc3 swarm-manager - virtualbox Running tcp://192.168.99.109:2376 swarm-manager (master) v1.11.0-rc3 swarm-node01 - virtualbox Running tcp://192.168.99.110:2376 swarm-manager v1.11.0-rc3 swarm-node02 - virtualbox Running tcp://192.168.99.111:2376 swarm-manager v1.11.0-rc3 $ docker info Containers: 3 Running: 1 Paused: 0 Stopped: 2 Images: 13 Server Version: 1.11.0-rc3 Storage Driver: aufs Root Dir: /mnt/sda1/var/lib/docker/aufs Backing Filesystem: extfs Dirs: 44 Dirperm1 Supported: true Logging Driver: json-file Plugins: Volume: local Network: bridge null host Kernel Version: 4.1.19-boot2docker Operating System: Boot2Docker 1.11.0-rc3 (TCL 7.0); HEAD : fed36ed - Sat Apr 2 00:03:40 UTC 2016 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 996.1 MiB Name: zk-host ID: PXK5:IAL6:DVXA:33ZH:CTMP:GVES:HJUG:KW5U:PZOX:PXWV:3HJC:55MY Debug mode (server): true File Descriptors: 15 Goroutines: 36 System Time: 2016-04-18T06:39:56.693979855Z EventsListeners: 0 Init SHA1: Init Path: Docker Root Dir: /mnt/sda1/var/lib/docker Labels: provider=virtualbox
ちなみに、managerが1nodeして動いてしまっていたり、そもそもレプリケーション出来てなかったりと 本番環境の参考とするには色々まずいのでご注意下さい。
せっかくなので、zk-webを使ってZooKeeperの中身も少し覗いてみました。 swarmのノード情報が書き込まれています。
Blue/Green Deployment
長くなりそうなので今回はこの辺で。 次回はこの環境下での Blue/Green Deployment実現方法を投稿しようと思います。