複数のサーバやコンテナの環境上において、
オーケストレーション
クラウドの広がりと共にオーケストレーション
このようなオーケストレーションという表現は抽象的ですので、
- アプリケーションやミドルウェアを自動インストール
(デプロイ) したい - インストール済みのソフトウェアのバージョンを確認したい
- 各々のサーバの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
を使い、