序章

Salt(SaltStack)は、リモート実行ツールおよび構成管理システムです。 リモート実行機能により、管理者は柔軟なターゲティングシステムと並行してさまざまなマシンでコマンドを実行できます。 構成管理機能は、クライアントサーバーモデルを確立して、インフラストラクチャコンポーネントを特定のポリシーに迅速、簡単、かつ安全に一致させます。

このガイドでは、Saltの使用法を効果的に学習し始めるために必要ないくつかの基本的な概念と用語について説明します。

ソルトマシンの役割

構成管理システムが進むにつれて、Saltの制御構造はかなり単純です。 通常のセットアップでは、2つの異なるクラスのマシンしかありません。

マスター

Salt master は、インフラストラクチャを制御し、管理するサーバーのポリシーを指示するマシンです。 構成データのリポジトリとしても、リモートコマンドを開始して他のマシンの状態を確認するコントロールセンターとしても機能します。 この機能を提供するために、salt-masterというデーモンがマスターにインストールされています。

マスターレス構成を使用してインフラストラクチャを制御することは可能ですが、ほとんどのセットアップは、Saltマスターで利用可能な高度な機能の恩恵を受けています。 実際、大規模なインフラストラクチャ管理の場合、Saltには、通常マスターに関連付けられている特定のコンポーネントとタスクを専用サーバーに委任する機能があります。 また、コマンドを下位のマスターマシンを介して中継できる階層型マスター構成で動作することもできます。

ミニオン

Saltが管理するサーバーは、minionsと呼ばれます。 salt-minionというデーモンが各管理対象マシンにインストールされ、マスターと通信するように構成されています。 ミニオンは、マスターから送信された命令を実行し、ジョブの成功を報告し、基盤となるホストに関するデータを提供する責任があります。

塩の成分がどのように通信するか

ソルトマスターとミニオンは、デフォルトで、ZeroMQメッセージングライブラリを使用して通信します。 これにより、パーティ間で非常に高性能なネットワーク通信が提供され、Saltがメッセージとデータを高速で送信できるようになります。 ZeroMQはライブラリであり、独立したサービスではないため、この機能はsalt-masterおよびsalt-minionデーモンでネイティブに使用できます。

ZeroMQを使用する場合、Saltはマスターとミニオンを認証するための公開鍵システムを維持します。 ミニオンは最初の起動時にキーペアを生成し、接続するように構成されているマスターサーバーにその資格情報を送信します。 マスターは、ミニオンのIDを確認した後、このキーを受け入れることができます。 両者は、キーで暗号化されたZeroMQを使用して、迅速かつ安全に通信できます。

何らかの理由でsalt-minionデーモンをノードにインストールできない場合、SaltはSSH経由でコマンドを発行することもできます。 このトランスポートオプションは便宜上提供されていますが、パフォーマンスが大幅に低下し、場合によっては他のSaltコマンドが複雑になる可能性があります。 パフォーマンス、セキュリティ、および単純さのために、可能な場合はsalt-minionデーモンを使用することを強くお勧めします。

塩の用語

Saltに飛び込む前に、使用されるいくつかの用語をよく理解しておくことをお勧めします。 Saltには多くの強力な機能がありますが、最初は名前とその機能を一致させるのが難しい場合があります。 あなたが見る可能性のあるより一般的な用語のいくつかを見てみましょう。

リモート実行:実行モジュールと機能

Saltは、リモート実行機能と構成管理機能を区別しようとします。 リモート実行機能は、実行モジュールによって提供されます。 実行モジュールは、ミニオンで作業を実行する関連する関数のセットです。

Saltには、ミニオンで任意のシェルコマンドを実行できる関数が含まれていますが、実行モジュールの背後にある考え方は、「シェルアウト」せずにコマンドを実行するための簡潔なメカニズムを提供し、プロセスを完了する方法に関する詳細な手順を提供することです。 モジュールを使用すると、Saltはシステム間の根本的な違いを抽象化できます。 LinuxまたはBSDを実行しているミニオンから同様の情報を取得できますが、そのデータを収集する実際のメカニズムは異なります。

Saltには、すぐに使用できる機能を提供するために、適切な組み込み実行モジュールが付属しています。 管理者は、独自のモジュールを作成したり、コミュニティ作成モジュールを組み込んで、ミニオンマシンで実行できるコマンドのライブラリを拡張したりすることもできます。

構成管理:状態、式、およびテンプレート

Saltの構成管理機能には、構成ファイルのリポジトリを作成することでアクセスできます。 これらのリポジトリに含まれるファイルは、いくつかの異なるタイプである可能性があります。

状態と式

Saltの構成管理部分は、主にstateシステムを使用して実装されます。

状態システムは、上記の実行モジュールとは異なる状態モジュールを使用します。 幸いなことに、状態モジュールと実行モジュールは互いに非常に密接にミラーリングする傾向があります。 状態システムは、管理者がシステムを配置する必要がある状態を記述できるため、適切な名前が付けられています。 実行モジュールと同様に、ほとんどの状態モジュールは機能のショートカットを表し、多くの一般的なアクションに簡単な構文を提供します。 これにより、読みやすさが維持され、構成管理ファイル自体に複雑なロジックを含める必要がなくなります。

ソルトは、特定の結果を生成することを目的として配置された状態モジュール呼び出しのセットです。 これらは、式が適用された後のシステムの外観を説明する構成管理ファイルです。 デフォルトでは、これらはYAMLデータシリアル化形式で記述されており、読みやすさとマシンフレンドリーの中間点として非常に優れています。

Salt管理者は、ミニオンを特定の数式セットにマッピングすることで数式を適用できます。 数式は、必要に応じてアドホックな方法で適用することもできます。 ミニオンは、システムを提供されたポリシーに一致させるために、内部で見つかった状態モジュールを実行します。

SaltStack組織とコミュニティによって作成されたSalt数式の優れたコレクションは、このGitHubアカウントにあります。

テンプレート

Templating を使用すると、Salt式やその他のファイルをより柔軟に書き込むことができます。 テンプレートは、ミニオンについて入手可能な情報を使用して、カスタマイズされたバージョンの式または構成ファイルを作成できます。 デフォルトでは、SaltはJinjaテンプレート形式を使用します。これは、意思決定のための置換機能と単純な論理構造を提供します。

レンダラーは、テンプレートを実行して有効な状態ファイルまたは構成ファイルを生成するコンポーネントです。 レンダラーは、入力を構成するテンプレート形式と、出力として生成されるデータシリアル化形式によって定義されます。 上記のデフォルトを考慮して、デフォルトのレンダラーはYAMLファイルを生成するためにJinjaテンプレートを処理します。

ミニオンについてのクエリと情報の割り当て

膨大な数のシステムを管理するために、Saltは各ホストシステムに関する情報を必要とします。 上記のテンプレートでは、各システムに関連付けられたデータを使用して、各ミニオンの動作を調整できます。 この情報をホストに照会または割り当てるために、いくつかの異なるシステムが用意されています。

穀類

ソルトグレインは、主にその基盤となるホストシステムに関して、ミニオンによって収集および維持される情報の断片です。 これらは通常、salt-minionデーモンによって収集され、要求に応じてマスターに返されます。 この機能は、さまざまな目的に活用できます。

たとえば、グレインデータは、リモート実行または構成管理のために、ミニオンのプールからノードの特定のサブセットをターゲットにするために使用できます。 Ubuntuサーバーの稼働時間を確認したい場合、Grainではこれらのマシンのみをターゲットにすることができます。

グレインは、構成の変更やコマンドの引数としても使用できます。 たとえば、グレインを使用して、eth0インターフェイスに関連付けられたIPv4アドレスを取得して、構成ファイルを変更したり、コマンドの引数として使用したりできます。

管理者は、ミニオンにグレインを割り当てることもできます。 たとえば、サーバーに「役割」を割り当てるためにグレインを使用することはかなり一般的です。 次に、これを使用して、上記のオペレーティングシステムの例と同様にノードのサブセットをターゲットにすることができます。

ミニオンにグレインを割り当てることは可能ですが、構成変数の大部分はpillarsシステムを介して割り当てられます。 Saltでは、ピラーは、ミニオンが任意の割り当てられたデータを取得するために使用できるKey-Valueストアを表します。 これは、組織的な目的でネストまたは階層化できる辞書データ構造として機能します。

ピラーには、値を割り当てるためのグレインシステムに比べていくつかの重要な利点があります。 最も重要なことは、ピラーデータはそれに割り当てられたミニオンだけが利用できることです。 他のミニオンは、その中に保存されている値にアクセスできません。 これにより、ノードまたはノードのサブセットに固有の機密データを保存するのに理想的です。 たとえば、秘密鍵またはデータベース接続文字列は、多くの場合、ピラー構成で提供されます。

ピラーデータは、構成テンプレートに変数データを挿入する方法として、構成管理コンテキストで利用されることがよくあります。 Saltは、構成ファイルの可変部分を、それを適用するノードに固有の項目に置き換えるためのテンプレート形式の選択肢を提供します。 グレインは、ホストデータを参照するためにこのように使用されることもよくあります。

私の

ソルトmineは、ミニオンで定期的に実行されるコマンドの結果を保存できるマスターサーバー上の領域です。 このシステムの目的は、ミニオンマシンで実行された任意のコマンドの結果を収集することです。 このグローバルストアは、インフラストラクチャ全体の他のコンポーネントやミニオンからクエリを実行できます。

ソルトマインは、コマンドを実行するたびに最新の結果のみを保存します。つまり、履歴データにアクセスする必要がある場合は役に立ちません。 鉱山の主な目的は、すでに利用可能な穀物データの柔軟な補足として、ミニオンマシンからの最新情報を提供することです。 ミニオンは、鉱山システムを使用して、対応するものに関するデータを照会できます。 ミニオンが鉱山内のデータを更新する間隔は、ミニオンごとに構成できます。

追加機能

Saltは、上記のカテゴリにうまく適合しない他のいくつかのシステムを提供します。

原子炉

Salt reactor システムは、生成されたイベントに応答してアクションをトリガーするためのメカニズムを提供します。 Saltでは、インフラストラクチャ全体で変更が発生すると、salt-minionまたはsalt-masterデーモンがZeroMQメッセージバスでイベントを生成します。 原子炉システムはこのバスを監視し、適切に応答するために構成された原子炉とイベントを比較します。

原子炉システムの主な目標は、自動化された状況応答を作成するための柔軟なシステムを提供することです。 たとえば、自動スケーリング戦略を開発した場合、システムはリソースの需要に動的に対応するノードを自動的に作成します。 新しいノードごとにイベントがトリガーされます。 これらのイベントをリッスンし、新しいノードを構成して既存のインフラストラクチャに組み込むように、リアクターをセットアップできます。

ランナー

ソルトランナーは、ミニオンではなくマスターサーバーで実行されるモジュールです。 一部のランナーは、システムのさまざまな部分のステータスを確認したり、メンテナンスを行ったりするために使用される汎用ユーティリティです。 一部のアプリケーションは、インフラストラクチャをより大規模に調整する機能を提供する強力なアプリケーションです。

帰国者

ソルトリターナーは、ミニオンで実行されたアクションの結果が送信される代替の場所を指定するために使用されます。 デフォルトでは、ミニオンはデータをマスターに返します。 リターナーを使用すると、管理者はリターンデータを別の宛先に再ルーティングできます。 通常、これは、結果が、ミニオンコマンドを開始したプロセスへのリターナーおよびによって指定された宛先に返されることを意味します。

ほとんどの場合、返品者は結果をデータベースシステム、メトリック、またはロギングサービスに渡します。 これにより、これらのシステムに任意のデータを取り込むための柔軟な方法が提供されます。 リターナーを使用して、ジョブキャッシュやイベントデータなどのSalt固有のデータを収集することもできます。

ソルトコマンド

Saltは、上記のコンポーネントを利用するためのいくつかのコマンドを提供します。 これらのツール間の機能に関してはいくつかの重要なクロスオーバーがありますが、以下でそれらの主要な機能を強調することを試みました。

  • salt-master :これはマスターデーモンプロセスです。 このコマンドを使用してマスターサービスを直接開始できます。より一般的には、initスクリプトまたはサービスファイルを使用して開始できます。
  • salt-minion :同様に、これはミニオンデーモンプロセスであり、マスターと通信してコマンドを実行するために使用されます。 ほとんどのユーザーは、初期化スクリプトまたはサービスファイルからもこれを開始します。
  • salt-key :このツールは、ミニオン公開鍵を管理するために使用されます。 このツールは、現在の鍵を表示し、将来の手先から送信された公開鍵について決定を下すために使用されます。 また、帯域外のミニオンに配置するためのキーを生成することもできます。
  • salt :このコマンドは、アドホック実行モジュールを実行するためにミニオンをターゲットにするために使用されます。 これは、リモート実行に使用される主要なツールです。
  • salt-ssh :このコマンドを使用すると、トランスポートメカニズムのZeroMQの代わりにSSHを使用できます。
  • salt-run :このコマンドは、マスターサーバーでランナーモジュールを実行するために使用されます。
  • salt-call :このコマンドは、ログインしているミニオンで実行モジュールを直接実行するために使用されます。 これは、マスターをバイパスして問題のあるコマンドをデバッグするためによく使用されます。
  • salt-cloud :このコマンドは、さまざまなプロバイダーからのクラウドリソースを制御およびプロビジョニングするために使用されます。 新しいミニオンは簡単にスピンアップしてブートストラップすることができます。

salt-apisalt-cpsalt-syndicなど、あまり使用されないコマンドもあります。

結論

これで、SaltStackの基本的な用語に精通し、遭遇するツールが何を担当するのかを高度に理解したので、インフラストラクチャを制御するためのSaltのセットアップを開始できます。 次のガイドでは、Ubuntu14.04サーバーにSaltマスターサーバーをインストールして構成する方法について説明します。 また、新しいミニオンサーバーを構成してマスターの管理下に置く方法についても説明します。