Consul Template の紹介
本日、驚くべき新機能が満載のスタンドアロン アプリケーションである Consul Template をリリースします。
Consul Template は Consul インスタンスを問い合わせ、ファイルシステム上の任意の数のテンプレートを指定し、更新します。 追加機能として、Consul Template はテンプレートの更新が完了したときに任意のコマンドを実行できます。
“Demo
“Use Cases
Consul Template は Consul のサービスエントリ、キー、キーバリューを照会することが可能です。 強力な抽象化とテンプレートクエリ言語により、Consul Template は次のような動的な設定を作成するのに最適です:
“Apache/Nginx Proxy Balancers
複数のアプリケーションサーバーが、単一の公開用プロキシインスタンスの後ろにプロキシされていることはよくあることです。 この構成は通常次のようになります。
<proxy balancer:="" frontend="">BalanceMember 1.2.3.4:80 BalanceMember 5.6.7.8:80</proxy>
しかし、ロード バランサーへのノードの追加と削除は、しばしば苦痛で時間がかかり、退屈な作業となります。 さらに悪いことに、フロントエンドノードが「不健全」になると、オペレータはロードバランサーから手動でそれを削除する必要があります。 Consul テンプレートはこのプロセス全体を簡単にします。
<Proxy balancer://frontend>{{range service "app.frontend"}} BalanceMember {{.Address}}{{end}}</Proxy>
Nginx 構成の同様の例を示します。
upstream frontend { {{range service "app.frontend"}} server {{.Address}};{{end}}}
Consul にノードが追加および削除されると、ロードバランサー構成にも自動的に追加および削除が行われます。 Consul Template の service
メソッドは健全なノードにのみ問い合わせを行うため、健全でないノードもダウンが報告されるとすぐにロードバランサーから削除されます。 これにより、ダウンタイムとオペレータの介入の両方を最小限に抑え、重要なことに集中できます!
“HAProxy Backends
HAProxy は非常に一般的で高性能なロードバランシング ソフトウェアです。 典型的な HAProxy 設定ファイルは次のようになります:
backend frontendbalance roundrobinserver web1 web1.yourdomain.com:80 checkserver web2 web2.yourdomain.com:80 check
しかしながら、Apache/Nginx プロキシバランサーと同様に、HAProxy からのノードの追加と削除は痛みを伴い、しばしば怖い経験です。 Consul Template は HAProxy から恐怖を取り除きます:
backend frontendbalance roundrobin{{range "app.frontend"}}service {{.ID}} {{.Address}}:{{.Port}}{{end}}
check
属性が削除されていることにお気づきでしょう。 健全性チェックは Consul で定義され、Consul テンプレートはサービスクエリから健全なノードのみを返すので、HAProxy はノードの健全性をチェックする作業を省き、そのロジックを Consul に任せます。
オプションのコマンド引数により、テンプレートが更新されると自動的に HAProxy の再ロードをトリガーすることが可能です。 ノードが動的に Consul に追加および削除されると、ロードバランサーは直ちにその変更を知らされ、ダウンタイムを最小限に抑えることがこれまで以上に容易になります。
“Varnish Servers
Varnish は、データやプロキシ要求をキャッシュする複数のバックエンドへのクエリをサポートする強力なキャッシュサーバーです。 典型的な Varnish 設定ファイルは次のようになります:
import directors;backend app_01 { .host = "1.2.3.4"; .port = "8080"; }backend app_02 { .host = "5.6.7.8"; .port = "8080"; }sub vcl_init { new bar = directors.round_robin() bar.add_backend(app_01); bar.add_backend(app_02); }sub vcl_recv { set req.backend_hint = bar.backend(); }
HAProxy の例と同様に、Consul テンプレートは Varnish バックエンドに動的に情報を入力し管理することを容易にします:
import directors;{{range service "app.frontend"}}backend {{.ID}} { .host = "{{.Address}}"; .port = "{{.Port}}";}{{end}}sub vcl_init { new bar = directors.round_robin() {{range service "app.frontend"}} bar.add_backend({{.ID}});{{end}}}sub vcl_recv { set req.backend_hint = bar.backend();}
「アプリケーション設定」
直観的かつ強力なキーバリュー ストアはアプリケーション開発者とオペレーターが Consul でグローバル設定情報を保存できるよう支援します。 Consul テンプレートは、それらの値の 1 つに変更が発生したときに動的に更新されます。 今日の構成管理手法では、アプリケーションの調整可能な値を変更するアプリケーションの構成テンプレートを持つことが一般的です。
MaxWorkers 5 JobsPerSecond 11
動的構成管理システムを使用しても、アプリケーションの構成は次の実行まで変更されないままとなります。 Consul Templateでは、キーバリューストアに変更があると、その値をリスニングしているすべてのテンプレートに直ちに伝搬されます。 今、あなたの構成管理ソフトウェアは Consul Template:
MaxWorkers {{key "web/max-workers"}}JobsPerSecond {{key "web/jobs-per-second"}}
This template is now connected with Consul and will receive instant, dynamic updates as soon as a change is pushed to Consul.Now, your configuration management software can write a Consul Template:
MaxWorkers {{key "web/max-workers"}}JobsPerSecond {{key "web/jobs-per-second"}}
This template is now connected with Consul. CM システムの次のイテレーションが実行されるのを 1 時間も待つ必要はありません。
「機能」
Consul Template には素晴らしい機能が満載ですが、すべてを挙げることはできません! 以下は、Consul Template で見つけられる多くの機能のほんの一部です。
-
Quiescence – Consul Template には静止状態が組み込まれており、Consul インスタンスの変更をインテリジェントに待機することができます。 この重要な機能により、システムが変動している間、テンプレートが頻繁に更新されるのを防ぐことができます。 テンプレートの変更がサブシステムを破壊することを恐れていますか? Consul Template には
-dry
モードが搭載されているので、もう心配することはありません。 ドライモードでは、Consul Template は結果を STDOUT にレンダリングするので、オペレータは出力を検査し、テンプレート変更が安全かどうかを判断できます。 -
CLI と設定 – すべてをコマンドラインで指定したいですか? または、構成管理ツールを使用していて、ディスクに書き込まれた構成を好んでいますか? あなたの好みが何であれ、Consul Template はあなたをカバーします! HCLのサポートが組み込まれているため、Consul Templateは設定ファイル、コマンドラインフラグ、またはその両方のミックスを受け入れることができます。 このようにして、既存の構成管理ツールを Consul Template と一緒に使用できます。
-
詳細デバッグ – 完璧だと思うときでも、システムに障害が発生することがあります。 Consul Template は、そのような重要な時のために、ほとんどすべての問題を追跡するために使用できる詳細なログ システムを備えています。
Leave a Reply