9/5(日本は9/5)、サービス検出とイベントを管理する、Consul v0.4 がリリースされました。以下 Hashicorp の blog です。
Consul 0.4 – HashiCorp
https://www.hashicorp.com/blog/consul-0-4.html
新機能が色々出てきました。Serfのeventと、リモート実行をサポート。event実行のタイミングはwatchで処理。ACLも実環境だと必用だし、着々と色々揃ってきた感があります。
今回、Serf の機能を内包したことで、Consul はオーケストレーションツールでもある、と言えるようになったのかなと思います。それにしても Hashicorp すごい(小並艦
Consul v0.4 is very cool! Its event and exec are very useful for me. I want to make operation more easier and more effective :)
というわけで、以下参考訳です。例によって未保証、かつ正確な内容は、原文が優先されます。
■ Consul 0.4
今日、私たちは Consul 0.4 を自信を持ってリリースします。Consul は、サービス検出・設定・オーケストレーションのための解決策です。Consul は完全に分散され、高い可用性を持ち、何千ものノードにスケールアップし、複数のデータセンタにまたがって利用することができます。
Consul 0.3 を2ヶ月前にリリースしましたが、私たちはバグの修正や、改善、新機能を追加するために忙しかったです。
主な新機能は、きめ細かな ACL システム(アクセス制御)、変更が発生した時にコールバックを実行する watch 機構、デプロイやサービスの再起動といったカスタムイベントを処理する event システム、そして管理を簡単にするリモート実行(remote execution)です。
こちらから Consul 0.4 をダウンロードできます。変更点については、こちらをご覧ください。
0.4 での主な新機能を詳しく知りたい場合は、引き続きお読みください。
■ ACL システム(アクセス制御)
Consul に対して寄せられた多くの機能リクエストのうち、その1つが、Key-Value スペースにアクセ制限を施すための、使いやすい ACL システムでした。Consul が採用した方法は、AWS の IAM と類似しているもので、非常に簡単で、すぐに使えます。
Consul ACL がブラックリスト・モードで動作するときは、指定された処理は全て拒否されます。ホワイトリスト・モードで動作しますと、特定の許可された処理以外は拒否されるということを意味しています。
ポリシーは ACL トークンごとに設定します。HCL 又は JSON 形式での記述です。ポリシーは次のように記述します。
# 標準は全てのキーを read-only に key "" { policy = "read" } # service フォルダだけ書き込みを許可 key "service/my-app/" { policy = "write" } # secrets に対するアクセスを拒否! key "secrets/" { policy = "deny" }
加えて、Web UI は ACL が管理できるようにアップデートされました。
以上の情報は Consul における ACL の概要ですが、更に詳しい挙動を知りたい場合は、詳細な説明をお読みください。
■ ウォッチ (Watches)
Consul の一般的な利用方法として、ノードやサービスや key 等の一覧を監視し、それらの変更が発生したときに外部のアプリケーションに対する更新を行うことです。Consul 0.4 で導入された “watch” を使い、常に API を利用可能であれば、このやりかたを更に簡単にします。
watch は Consul が参照(view)しているデータと、変更を検出したときのハンドラの組み合わせです。watch は、KV データやサービス、ノード、へルスチェック、ユーザイベント等々に適用できます。
watch を使うには、エージェントの設定において適切な設定を行うか、あるいは新しい consul watch コマンドを用います。
例えば、ノードの一覧を取得するには、次のように watch コマンドを使います。
$ consul watch -type nodes /usr/local/bin/nodes-handler.sh
これはノード一覧に何らかの変化があったとき、自動的に /usr/local/bin/nodes-handler.sh スクリプトを実行させるものです。
使い道も増えていきます。動的なロードバランサのセットアップ、DNS の設定、アプリケーション設定の更新、デプロイ時のフックに使うなど。watch システムを使えば、コードを書かなくても、リアルタイムに Consul とやりとりができます。
■ イベント・システム (event system)
Consul は、クラスタにおける信頼性のあるイベント伝搬機構を備える Serf の上で構築されています。Serf の持つ event コマンドは、 Consul においても同様に使えるようになりました。
ピア・ツー・ピアのゴシップ層を使い、event をあらゆる大きさのクラスタに対して、スケーラブルかつ信頼できる方法で迅速に伝播させることができます。新しい watch 機能を使ってできることに加え、あらゆる種類のイベントハンドラを扱えます。
次の例は、watch を使い、アプリケーションのデプロイハンドラを設定します。
$ consul watch -type event -name web-deploy /usr/local/bin/web-deploy.sh
それから、event コマンドを使って、実際の処理を進行させます。
$ consul event -name web-deploy sha:24323e0
event はノード名やサービス、タグを使ってフィルタすることもできます。イベント実行対象を特定のノードに対してフィルタできますので、オーケストレーションを簡単にすることでしょう。
■ リモート実行 (remote execution)
0.4 における最後の主要機能は exec コマンドです。このコマンドを使うことで、新しいイベントシステムを用いてリモート上で処理を行えるようになります。
以下は uptime コマンドを複数のノードで実行する例です。
$ consul exec uptime
node1: 16:40:22 up 2 days, 18:46, 1 user, load average: 0.12, 0.10, 0.09
node1:
==> node1: finished with exit code 0
(中略)
==> node6: finished with exit code 0
node4: 16:40:22 up 2 days, 18:47, 0 users, load average: 0.00, 0.01, 0.05
node4:
==> node4: finished with exit code 0
6 / 6 node(s) completed / acknowledged
リモート実行機能を使うことで、複数のノード群やサブセットをまたがるオーケストレート(一斉処理)が簡単になります。リモート実行は、ノード名、サービス、タグによってフィルタできます。この機能を使うことで、ウェブサーバのみ apache の再起動を行ったり、memcached ノードのバウンシング等に使えるでしょう。
■ ロードマップ
Consul の開発は、引き続き 0.5 のリリースに向けて進撃が続きます。当面、私たちは 0.4 の安定正と正確性に集中し、何らかの問題があれば修正を行うために、マイナーバージョンを幾つか提供するでしょう。Consul 0.5 では、サービスの抽象化、カタログと KVS 間の深い統合と豊富なロックを用いたセッション命令群の改善に集中していきます。それまでの間、私たちは Consul 0.4 を楽しんでほしいと思っています!