序章

SaltStack(Salt)は、構造化された反復可能な方法でインフラストラクチャを簡単に管理するために使用できる強力なリモート実行および構成管理システムです。 このシリーズでは、Saltデプロイメントから開発、ステージング、および実稼働環境を管理する1つの方法を示します。 ソルト状態システムを使用して、繰り返し可能なアクションを記述して適用します。 これにより、環境を破壊することができます。後で同じ状態で簡単にオンラインに戻すことができるため、安全です。

この記事では、構築するさまざまな環境を紹介し、開始するためにプライマリサーバーにSaltマスターデーモンをインストールします。 これは、構成手順を格納し、インフラストラクチャノードを制御し、要件を管理するコアシステムです。

前提条件

このガイドを完了するには、クリーンなUbuntu14.04サーバーが必要です。 このサーバーでは、プライベートネットワークを有効にする必要があります。

このサーバーでは、root以外のアカウントにsudo権限を設定する必要があります。 このタイプのアカウントを設定する方法については、Ubuntu14.04初期サーバー設定ガイドをご覧ください。

このシリーズの後半の記事では、salt-cloudコマンドを使用して、DigitalOceanクラウドを使用してインフラストラクチャサーバーを起動します。 必要に応じて他のクラウドプロバイダーを使用することも、vagrantなどのソフトウェアを使用する仮想インスタンスを使用することもできます。 ただし、これはこのガイドの範囲外であり、これらの領域で独自の調査を行う必要があります。

構築するインフラの概要

salt-cloudで起動するサーバーは、アプリケーション開発のために維持したい3つの環境を表します。 Saltマスターサーバーは必要な各サーバーの構成を維持するため、これらのサーバーを使用していないときにスピンダウンすることができます。 たとえば、開発チームが休暇中に作業を停止した場合は、非実稼働環境をスピンダウンできます。 休憩から戻ったら、簡単に再構築して、この新しいインフラストラクチャの上にアプリケーションを再デプロイできます。

サンプルインフラストラクチャを開発、ステージング、および本番に分解します。

私たちの開発インフラストラクチャは、私たちの最も控えめなものになります。 単一のWebサーバーと関連するデータベースサーバーが含まれるだけです。 データベースとWebサーバーを分離することで、アプリケーションがリモートデータを念頭に置いて構築されていることを確認できます。

ステージング環境はより堅牢になります。 見つけることができるほとんどのアドバイスは、ステージング環境を意図した本番環境にできるだけ類似するように構成することを推奨しています。 これを念頭に置いて、トラフィックの負荷を分散するために、ステージング環境は2つのWebサーバーで構成されます。 ロードバランサーを使用して、これら2つのサーバー間でトラフィックを分散します。 データベース側では、2台のデータベースサーバーを起動します。 これら2つのサーバー間にマスターマスターレプリケーションを設定して、両方が書き込み要求を受け入れることができるようにします。 マスターマスターレプリケーションにはいくつかの欠点がありますが、アプリケーションの設計を少し怠惰にすることができ(任意のデータベースサーバーが書き込みを受信できます)、かなり複雑な構成管理シナリオを示すことができます。

前に述べたように、本番環境はステージング環境と非常によく似ています。 私たちの設計の唯一の違いは、高可用性とフェイルオーバーを提供するための追加のロードバランサーです。 必要に応じて、本番環境の負荷に大容量のサーバーを使用することもできます。 これは、ステージング環境での負荷の評価をより困難にしますが、トラフィック要件を適切に処理するために必要になることがよくあります。

上記の環境の構成を作成している間、すべてが同時に実行されている必要はないことに注意してください。 これは、テスト中に特に当てはまります。 このシリーズ全体を通して、一度にアクティブになるサーバーはごくわずかです。 これはコストの観点からは望ましいことですが、必要に応じて環境を破棄して起動することで、環境のブートストラップが堅牢で反復可能であることも保証されます。

構成する環境の一般的なレイアウトがわかったので、Saltマスターを起動して実行できます。

ソルトマスターのインストール

sudo権限を持つ非rootユーザーとしてSaltマスターとして設定する予定のサーバーにログインすることから始めます。

サーバーにSaltマスターデーモンをインストールする方法はいくつかあります。 Ubuntuで利用できるPPAはありますが、多くの場合、これらは古くなっている可能性があります。 構成管理ソフトウェアを計画および管理するための最良のアプローチは、特定のバージョンをターゲットにすることです。 これにより、インストール時にリポジトリから利用可能なものに依存するのではなく、計画的かつ構造化された方法でシステムを更新できます(徹底的なテスト後)。

このガイドでは、この記事の執筆時点で最新の安定バージョンであるSaltバージョンv2015.8.0を対象としています。 別のバージョンまたはインストール方法を選択した場合は、このガイドのプロセスが記述どおりに機能しない可能性があることに注意してください。

特定のバージョンをインストールする最も簡単な方法は、SaltStackのブートストラップスクリプトを使用することです。 次のように入力して、最新のブートストラップスクリプトをホームディレクトリにダウンロードします。

  1. cd ~
  2. curl -L https://bootstrap.saltstack.com -o install_salt.sh

実行する操作に慣れるまで、ダウンロードしたスクリプトの内容を自由に確認してください。

Saltマスターをインストールする準備ができたら、shシェルを使用してスクリプトを実行できます。 -Pフラグを渡して、Pythonパッケージマネージャーであるpipを使用した依存関係のインストールを許可しても問題がないことを示します。 また、マスターデーモンをインストールすることを示すために-Mフラグを含める必要があります。 git v2015.8.0を含めてコマンドを終了します。これは、 SaltStack GitHubリポジトリから指定されたリリースタグをフェッチし、それをインストールに使用するようにスクリプトに指示します。

  1. sudo sh install_salt.sh -P -M git v2015.8.0

スクリプトは、必要なすべての依存関係をインストールし、gitリポジトリから指定されたバージョンをプルし、Saltマスターデーモンとミニオンデーモン、およびいくつかの関連するSaltユーティリティをインストールします。

インストールはかなり簡単なはずです。 次に、Saltマスターの構成を開始できます。

ソルトマスターを設定する

最初に行う必要があるのは、メインのSaltマスター構成ファイルを編集することです。 sudo権限で今すぐ開きます。

  1. sudo nano /etc/salt/master

構成ファイルはかなり長く、十分にコメントされています。 デフォルト値から逸脱したい場合にのみ、コメントを外してオプションを設定する必要があります。 開始するには、いくつかの編集を行うだけです。

まず、ファイル内のfile_recvオプションを見つけます。 これを有効にすると、SaltミニオンはSaltマスターにファイルを送信できます。 これは、変更する構成ファイルを取得するための状態を作成するときに非常に役立ちますが、リスクが伴います。 このガイドの期間中、これを有効にします。 必要に応じて、後で無効にすることができます。

/ etc / salt / master
file_recv: True

次に、file_roots辞書を設定する必要があります。 Saltマスターには、インフラストラクチャ全体のファイルを保存および提供するために使用するファイルサーバーが含まれています。 これには、構成管理の状態ファイル自体と、システムによって管理されるミニオンファイルが含まれます。 このYAMLディクショナリは、/srv/saltにあるファイルサーバーのルートを定義します。 これが「ベース」環境の下にあることを指定する必要があります。これは、すべてのSaltデプロイメントに必須のデフォルト環境です。

/ etc / salt / master
file_roots:
  base:
    - /srv/salt

ノート

指定された形式を正確に複製することが重要です。 SaltはYAMLスタイルの構成ファイルを使用します。 YAMLでは、正しい解釈を保証するために、間隔とインデントに厳密な注意を払う必要があります。 通常、インデントの各レベルは2つのスペースになります。

今のところ必要な最後の項目はpillar_roots辞書です。 ピラーシステムは、特定のノードに制限できる構成データを格納するために使用されます。 これにより、動作をカスタマイズし、データに関連付けられていないインフラストラクチャコンポーネントに機密データが表示されないようにすることができます。 このフォーマットは、file_rootsを正確に反映しています。 ピラーデータの場所は/srv/pillarになります。

/ etc / salt / master
pillar_roots:
  base:
    - /srv/pillar

終了したら、ファイルを保存して閉じます。

次のように入力して、構成ファイルで参照したディレクトリを作成できます。

  1. sudo mkdir -p /srv/{salt,pillar}

ソルトマスターでミニオンデーモンを設定する

また、Saltコマンドを受け入れるようにSaltマスターサーバーを構成する必要があります。 これを行うには、サーバーでminionデーモンを構成します。 ファイルを開いて開始します。

  1. sudo nano /etc/salt/minion

ここで変更する必要があるのは、マスターサーバーの場所だけです。 両方のデーモンが同じホストで動作しているため、アドレスをローカルループバックインターフェイスに設定できます。

/ etc / salt / minion
master: 127.0.0.1

終了したら、ファイルを保存して閉じます。

サービスを再起動し、ソルトキーを受け入れます

ソルトマスターとミニオンの構成が整ったので、サービスを再起動して変更を取得します。

  1. sudo restart salt-master
  2. sudo restart salt-minion

ソルトマスターがミニオンと安全に通信する前に(同じサーバー上であっても)、ミニオンのキーを受け入れる必要があります。 これはセキュリティ機能です。 次のように入力すると、承認されたキーと保留中のキーがすべて表示されます。

  1. sudo salt-key --list all

デーモンが正しく構成されて再起動された場合は、「UnacceptedKeys」セクションにSaltマスターサーバーのキーが表示されます。 この場合、Saltマスターは「sm」というマシンでホストされています。

Output
Accepted Keys: Denied Keys: Unaccepted Keys: sm Rejected Keys:

サーバーのミニオンID(この場合はsmこの場合は) to the salt-key command with the -a`フラグを渡すことで、このキーを受け入れることができます。

  1. sudo salt-key -a sm

もう一度確認すると、キーは「承認済みキー」セクションに移動しています。

  1. sudo salt-key --list all
Output
Accepted Keys: sm Denied Keys: Unaccepted Keys: Rejected Keys:

次のように入力して、SaltマスターサーバーがSaltコマンドに応答することを確認できます。

  1. sudo salt '*' test.ping

次のような応答が返されるはずです。

Output
sm: True

これで、Saltマスターサーバーが稼働しています。

結論

このガイドでは、Saltマスターサーバーの初期構成を実行することにより、インフラストラクチャの管理を開始しました。 これは、コントロールセンターとしても、構成データのリポジトリとしても使用される、管理設計内の中央サーバーです。

このシリーズの次のガイドでは、DigitalOceanAPIクレデンシャルを使用してSaltマスターサーバーを構成します。 salt-cloudコマンドを使用してDigitalOceanアカウントに接続し、クラウドリソースを作成および管理できるようにするプロバイダー構成を作成します。 各サーバーのプロパティを定義できるように、インフラストラクチャマシンのプロファイルを作成します。