Blog
Swarmpit で快適な Docker Swarm の WebUI を手に入れる
こんにちは。
CIA の青山真也です。
今回は Swarmpit についてお話したいと思います。
Docker Swarm には dockersamples/visualizer などの WebUI がありますが、全機能が網羅されているわけではなく、Web UIから出来ることはほとんどありません。
さらに Kubernetes Dashbaord のようにリッチな WebUI が無いか探したところ、1 件だけ非常に完成度の高い素晴らしい OSS がありました。
日本では全く有名になっておらず、日本語の記事もないため、是非皆様に知って頂けたらなと思います。
その名も Swarmpit です。(https://github.com/swarmpit/swarmpit)
Swarmpit
百聞は一見にしかず。ということでまずは UIを確認していただきたいと思います。
認証は勿論あります。
Docker Service の確認もわかりやすくなっています。
UI があると安心感がありますね。
Docker Node の状態も詳細なレベルで確認できますし、docker service update –availavility drain NODENAME などを行なうと、即時反映されます。
通常、何かのイメージを探す場合は DockerHub や Private Registry (GCP Contaienr Registry など) でイメージを探してきてから作る必要がありましたが、Swarmpit ではサービス作成時に検索が可能です。
Private Registry や DockerHub のアカウントを登録しておくことも可能なため、Private なイメージの検索もできるようになっており、Swarmpit で全てが完結できるようになっているのは素晴らしいと思います。
サービスを作成する際もフロー毎に選択を行っていくだけでカスタマイズ出来るため、初心者でも Swarm を簡単に使うことができます。
DockerHub などのイメージ更新時に自動で再デプロイしてくれる機能などもありますし、Docker 17.04.0 から自動ロールバック機能も追加されたため、自動デプロイ/自動ロールバック環境も簡単に構築することが可能です。
また、確認している範囲では細かい機能も Swarmpit 上からできるようになっている点も素晴らしいです。
Swarmpit のアーキテクチャ
Swarmpit は Clojure Application (Swarmpit 本体)と CouchDB の 2 つから構成されています。
公式で Docker Compose のマニュフェストが用意されているため、docker stack deploy を使って簡単に展開することが可能です。
1 2 |
git clone https://github.com/swarmpit/swarmpit -b 1.1 docker stack deploy -c swarmpit/docker-compose.yml swarmpit |
Docker Swarm では、クラスタ管理 Swarm Manager からしか受け付けない仕様になっています。
そのため、Swarm Manager のノードではなく Swarm Node のノードで行なうと下記の用に失敗します。
1 2 |
# docker service ls Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager. |
Swarmpit は /var/run/docker.sock をマウントして利用することで、Docker Swarm クラスタの管理を行っているため、Swarmpit が動作するノードは docker service create 時に –constraints “node.role == manager” を付与するなどして下さい。
ちなみに現状は Docker Socket を利用した形で Swarm クラスタを管理するため、Manager 上に起動させることが必須となっていますが、CLI では下記のようにClient Certs を使った TCP 経由での操作などもサポートしているため、ここらへんはカスタマイズできるようになるとなお嬉しいところです。
1 2 3 4 5 6 |
docker service ls \ -H tcp://10.0.0.1:2376 \ --tlsverify=true \ --tlscacert=./ca.pem \ --tlscert=./cert.pem \ --tlskey=./key.pem |
プロダクション利用時の注意点
現状のままだと Production 利用をするには
・CouchDB の認証がない
・Swarmpit の認証がデフォルトパスワード(admin:admin)
・CouchDB の volume が永続化されていない
・CouchDB の冗長化がされていない
などの問題点があります。
CoudhDB の認証化
CouchDB に認証をかける場合には環境変数として
COUCHDB_USER=user
COUCHDB_PASSWORD=password
を渡してあげて下さい。
MySQL などもそうですが、Docker ではユーザやパスワードの設定が用意に出来るように作られていることが多く、IaaS に近い使い方が出来るのは非常に嬉しいところです。
Swarmpit の認証情報の変更
Swarmpit はデフォルトでは admin:admin でログイン可能です。
弊社ではプライベートクラウド環境でマルチコンテナオーケストレーションエンジン対応の GKE ライクな Container as a Service 環境を提供しており、初期ユーザを変更して提供する必要がありました。
Swarpit ではユーザ登録用の API が用意されているため、TOKEN を取得して登録を行います。
また、admin ユーザに関してはパスワードを変更しても良いですし、削除しても問題ありません。
CouchDB から直接削除する場合には、revision と document id を取得して削除します。
1 2 3 4 5 6 7 8 |
# Swarmpit への新規ユーザ登録 (Swarmpit API 経由で登録) TOKEN=`curl -s -XPOST -u admin:admin http://${IPADDR}:$$swarmpit_dashboard_port/login | jq -r .token` curl -i -H "Content-Type: application/json" -H "Authorization: $TOKEN" -XPOST http://${IPADDR}:$$swarmpit_dashboard_port/admin/users -d "{\"username\":\"USER\",\"password\":\"PASSWORD\",\"email\":\"aoyama@example.com\",\"role\":\"admin\",\"isValid\":true}" # デフォルトユーザの削除 (CouchDB から直接削除) ADMIN_REV=`curl -s -XGET "${IPADDR}:15984/swarmpit/_all_docs?include_docs=true" | jq .rows | jq -r 'map(select(.doc.type == "user" and .doc.username == "admin").value.rev)[0]'` ADMIN_DOC_ID=`curl -s -XGET "${IPADDR}:15984/swarmpit/_all_docs?include_docs=true" | jq .rows | jq -r 'map(select(.doc.type == "user" and .doc.username == "admin").id)[0]'` curl -i -u USER:PASSWORD -X DELETE "${IPADDR}:15984/swarmpit/${ADMIN_DOC_ID}?rev=${ADMIN_REV}" |
CouchDB の Volume 永続化
Compose で立てた場合、通常の local driver の Volume が作成されるため、別ノードでコンテナがリスタートされた場合にはデータが損失してしまいます。
永続化を行なう場合には、適切なドライバと設定を利用して下さい。
弊社では Dashboard の SLA 自体もそこまで高くない点からも Node を固定する Constraints を入れて local driver を利用しています。
CouchDB の冗長化
こちらは今回は詳細には説明を行いませんが、CouchDB では Master – Slave 相当の Replication 機能が用意されているため、これを使うのが一般的だと思います。
しかし、CouchDB のデータが失われたとしても、Swarm クラスタには影響がないため、復旧しやすくしておく程度でも良いかもしれません。
Docker Swarm の Playground
以前はここで Swarmpit の Playground が公開されていたのですが、現在は仕様が変わったようでそのまま Swarmpit を試すことができなくなってしまいました。
Swarm の Playground としては利用可能なようですので、ユーザ登録後に Playground として利用してみます。
ログインすると、下記のような画面になるので、左上のスパナボタンから Template を呼び出し、Swarm クラスタをデプロイします。
その後、compose ファイルから Stack をデプロイし、
1 2 |
git clone https://github.com/swarmpit/swarmpit -b 1.1 docker stack deploy -c swarmpit/docker-compose.yml swarmpit |
画面中央上部の 888 の部分を押すと、Swarmpit をお試しすることが可能です。
Author