複数のサーバやコンテナの環境上において、
オーケストレーション
クラウドの広がりと共にオーケストレーション
このようなオーケストレーションという表現は抽象的ですので、
- アプリケーションやミドルウェアを自動インストール
(デプロイ) したい - インストール済みのソフトウェアのバージョンを確認したい
- 各々のサーバのload averageや、
CPUやメモリリソースの利用状況を確認したい - コマンドを一斉実行し、
デーモンやプログラムの再起動を行いたい
クラウドや仮想化が広範囲に展開する前は、
これらは管理対象のサーバ台数が少なければ、
Consulが提供するオーケストレーション機能
Consulが持つ機能は、
コマンド実行のトリガは、
初期のConsulにはSerfの機能は内部的にしか使用されておらず、
| 同時実行コマンド | 結果取得コマンド | |
|---|---|---|
| Consul | consul event | consul exec |
| Serf | serf event | serf query |
これらはChefやPuppetのような構成管理ツールを使うような状況と似ていますが、
Consulのイベントハンドラ
Consulのオーケストレーションと呼ばれる機能の実体は、
リモートでコマンドを実行するConsul exec
Consulには、serf queryを実行した時と同様の処理です。
Consulクラスタ上でコマンドを実行するには、consul execを実行します。実行するのはクラスタ内のどのサーバでも構いませんし、
たとえば、uptimeコマンドを実行した結果を知りたい場合はconsul exec uptimeと実行します。
$ consul exec uptime server: 17:17:16 up 2 days, 7:08, 2 users, load average: 0.01, 0.03, 0.00 server: ==> server: finished with exit code 0 node1: 18:48:36 up 3 days, 5:26, 0 users, load average: 0.00, 0.00, 0.00 node1: ==> node1: finished with exit code 0 node2: 19:03:11 up 2 days, 4:31, 1 user, load average: 0.00, 0.00, 0.00 node2: ==> node2: finished with exit code 0 3 / 3 node(s) completed / acknowledged
ここでは全てのノート情報が帰ってきましたが、-nodeオプションを使ってノード名を指定することができます。たとえばノード名がnode1の結果だけを知りたい場合は、
$ consul exec -node=node1 uptime node1: 19:02:04 up 3 days, 5:40, 0 users, load average: 0.00, 0.00, 0.00 node1: ==> node1: finished with exit code 0 1 / 1 node(s) completed / acknowledged
-nodeオプションの他にも、consul execには実行対象のノードやサービスを絞るためのオプションが提供されていますconsul exec [オプション] <コマンド>です。
| オプション | 説明 |
|---|---|
| -http-addr | コマンドを実行させたいConsulエージェントのHTTPアドレス。標準は127.。ローカルだけでなく、 |
| -datacenter | 実行対象のデータセンター名を絞る場合に使用。 |
| -prefix | リクエスト送信時、_rexec。 |
| -node | 実行対象をノード名称で絞る場合に使用 |
| -service | 実行対象をサービスで絞る場合に使用 |
| -tag | 実行対象をタグで絞る場合に使用 |
| -wait | リモート実行時、consul exec -wait=10s <コマンド>)。 |
| -wait-repl | 指定した期間待機後、-wait-reply=10s)。 |
| -verbose | より詳細なメッセージの表示。 |
これを応用して、node1という名称のサーバにnginxパッケージをyumを使ってセットアップするには、
$ consul exec -node=node1 "sudo yum -y install nginx"
注意点は、
まとめ
consul execや、
次回は、consul eventやconsul watchを使い、
