プロダクション環境でCoreOSが使えない場合や、ホスト1台で構わない場合は、Saltで構成管理をしてsalt-minionにDockerホストをインストールして使っています。今回はVPSでなくIDCFクラウドを使います。FWの設定をしなくてもVLAN内で安全な通信と名前解決ができるので、Saltクラスタを作る場合に便利です。
Saltについて
SaltはPythonで書かれた構成管理ツールです。CoreOSを使っているとdisposableなホストの使い方に慣れてきて、OSインストール後にホストの構成管理をすることは少なくなっていくと思いますが、従来型の構成管理が必要な場合にSaltは便利です。
日本ではなぜかPuppetよりもChefの方が人気ですが、Linux foundationが発表したオープンソースプロジェクトの2014年ランキングをみると、AnsibleやSaltの人気も高まっています。1位がPuppetの23%、2位がAnsibleの18%に続いて、Saltは投票率13.3%で3位です。また、Kubernetesの管理サービスのインストールに使われているので知名度も上がっています。
Saltの特徴です。
- YAML形式でサーバーの状態を設定する
- masterとminionで構成される
- ZeroMQで暗号化通信するするため、SSHがなくても通信できる
- インストールとクラスタ構築が簡単
- ReactorやEventを使ったイベント駆動システム
- 組み込みのモジュールが豊富に用意されている
ZeroMQ
特にZeroMQが便利です。通信はAESで暗号化されています。SSHを使ないためsshd_cofig
を間違えてsshdが起動しなくなった場合でもminionと通信して、sshdを起動することができます。
$ salt 'minion1*' cmd.run "service ssh stop" |
Ubuntu14.04のインスタンスを3台用意
Ubuntu 14.04のインスタンスを3台用意します。masterのノードにはminionもインストールしました。masterはhostnameをsalt
にすると、minionが自動的にmasterを見つけて公開鍵の登録リクエストします。
Role | hostname | IP |
---|---|---|
master,minion | salt | 10.3.0.108 |
minion | minion1 | 10.3.0.97 |
minion | minion2 | 10.3.0.60 |
Salt Bootstrap
Salt Bootstrapはワンライナーのインストールスクリプトです。フラグを追加してインストールのオプション設定ができます。
- -X: インストール後にデーモンを起動しない
- -M: masterもインストールする
- -N: minionをインストールしない
masterのインストール
以下の作業はすべてrootで行います。まず-M
フラグをつけてmasterをインストールします。
$ curl -L http://bootstrap.saltstack.com | sh -s -- -M |
minionのインストール
今回はmasterのhostnameをsalt
にしているので自動的に見つけますが、通常はminionの設定ファイルにmasterの名前を登録しておきます。
$ mkdir -p /etc/salt/minion.d/ |
minionをインストールします。-X
フラグをつけてインストール後にすぐsalt-minionを起動させないようにしました。
$ curl -L https://bootstrap.saltstack.com | sh -s -- -X |
minionにGrainsの登録
State System, Salt Formula, Pillars, Grains, Salt Syndic, Salt Roaster, Salt Reactorなど日本人には名前だけでは想像が付かない仕組みがたくさんあり、最初は戸惑います。必要な機能だけ使いながら少しずつ理解していくことにします。
今回はGrainsを使いminionのロールを定義してみます。Grainsはminionに登録する静的なデータのことで、いろいろな用途に使えます。
minion1とminion2ノードのminionには、roles:dev
を定義します。
grains: |
saltノードのminionには、roles:salt-master
を定義します。
grains: |
Grainsの設定が終了したら、salt-minionのサービスをstartします。
$ service salt-minion start |
salt-minionの公開鍵を承認する
masterにログインして、minioの公開鍵を承認してSaltクラスタを構築します。salt-key
コマンドは、-L
フラグをつけると、全てのminionの公開鍵を表示します。最初の状態では承認された公開鍵はひとつもありませんが、すでにminionから公開鍵の登録リクエストが来ています。
$ salt-key -L |
-A
フラグを使うと、未承認のminionの公開鍵をすべて承認できます。
$ salt-key -A |
最後に-L
フラグでminionが承認されたことを確認します。
$ salt-key -L |
組み込みモジュールのテスト
さっそくmasterから、すべてのminionでechoコマンドを実行するテストをしてみます。’*’はワイルドカードです。
$ salt '*' cmd.run 'echo hello world' |
個別にコマンドを実行する場合は以下のようにワイルドカードの条件をしぼったり、FQDNを指定します。
$ salt 'minion2*' cmd.run 'echo hello world' |
または、Grainsを使って特定のminionに対して実処理を行することもできます。
$ salt -G 'roles:dev' test.ping |
cmdの他にも、組み込みのモジュール一覧にたくさんのモジュールが用意されています。
aptpkgモジュールを使い、 APT データベースを最新にしてみます。
$ salt 'minion1*' pkg.refresh_db |