前書き

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

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

前提条件

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

このサーバーでは、 `+ sudo +`権限で設定された非ルートアカウントが必要です。 Ubuntu 14.04初期サーバーセットアップガイドでこのタイプのアカウントをセットアップする方法を学ぶことができます。

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

構築するインフラストラクチャの概要

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

サンプルインフラストラクチャを開発、ステージング、およびプロダクションに分割します。

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

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

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

上記の環境の構成を作成している間、すべてを同時に実行する必要はありません。 これは特にテスト中に当てはまります。 このシリーズ全体を通して、一度にアクティブになるサーバーは数台だけになる可能性があります。 これはコストの観点からは望ましいことですが、必要に応じて環境を破壊し、立ち上げることで、環境のブートストラップが堅牢で再現可能になることも保証されます。

設定する環境の一般的なレイアウトがわかったので、Salt Masterを起動して実行できます。

Salt Masterのインストール

まず、 `+ sudo +`権限を持つ非rootユーザーとしてSaltマスターとして設定するサーバーにログインします。

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-salt-master-and-minion-servers-on-ubuntu-14-04 [いくつかの異なる方法]サーバーにSalt Masterデーモンをインストールします。 UbuntuにはPPAが用意されていますが、これらは古くなっている場合があります。 構成管理ソフトウェアを計画および管理するための最良のアプローチは、特定のバージョンを対象とすることです。 これにより、インストール時にリポジトリから利用可能なものに依存するのではなく、計画および構造化された方法でシステムを更新できます(徹底的なテスト後)。

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

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

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

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

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

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

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

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

ソルトマスターの構成

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

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

Note

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

/ etc / salt / master

pillar_roots:
 base:
   - /srv/pillar

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

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

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

Salt MasterでMinion Daemonを構成する

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

sudo nano /etc/salt/minion

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

/ etc / salt / minion

master: 127.0.0.1

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

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

ソルトマスターとミニオンの設定が完了したので、サービスを再起動して変更を反映します。

sudo restart salt-master
sudo restart salt-minion

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

sudo salt-key --list all

デーモンが正しく構成され、再起動された場合、「許可されていないキー」セクションにソルトマスターサーバーのキーが表示されます。 私たちの場合、Saltマスターは「sm」と呼ばれるマシンでホストされています。

OutputAccepted Keys:
Denied Keys:
Unaccepted Keys:

Rejected Keys:

サーバーのミニオンID(この場合は + sm +)を+ -a`フラグを付けて+ salt-key` +コマンドに渡すと、このキーを受け入れることができます。

sudo salt-key -a

もう一度確認すると、キーは「受け入れられたキー」セクションに移動します。

sudo salt-key --list all
OutputAccepted Keys:

Denied Keys:
Unaccepted Keys:
Rejected Keys:

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

sudo salt '*' test.ping

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

Output:
   True

これで、Salt masterサーバーが稼働しました。

結論

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

このシリーズのhttps://www.digitalocean.com/community/tutorials/saltstack-infrastructure-configuring-salt-cloud-to-spin-up-digitalocean-resources [次のガイド]では、Saltマスターサーバーを構成します。 DigitalOcean API資格情報を使用します。 `+ salt-cloud +`コマンドを使用してDigitalOceanアカウントに接続し、クラウドリソースを作成および管理できるプロバイダー構成を作成します。 インフラストラクチャマシンのプロファイルを作成して、各サーバーのプロパティを定義できるようにします。