SaltStackの用語と概念の紹介

前書き

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

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

ソルトマシンの役割

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

マスター

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

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

ミニオンズ

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

塩成分の通信方法

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

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

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

塩の用語

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

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

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

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

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

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

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

状態と式

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

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

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

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

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

テンプレート

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

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

情報を照会して手先に割り当てる

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

穀類

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

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

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

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

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

柱には、値を割り当てるために穀物システムを超えるいくつかの重要な利点があります。 最も重要なことは、柱データは、それに割り当てられた手先のみが利用できるということです。 他のミニオンは、内部に保存されている値にアクセスできません。 これは、ノードまたはノードのサブセットに固有の機密データの保存に最適です。 たとえば、多くの場合、秘密キーまたはデータベース接続文字列が柱構成で提供されます。

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

Mine

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

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

追加機能

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

原子炉

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

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

ランナー

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

帰国者

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

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

ソルトコマンド

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

  • salt-master:これはマスターデーモンプロセスです。 このコマンドを使用してマスターサービスを直接開始できます。より一般的には、initスクリプトまたはサービスファイルを使用して開始できます。

  • salt-minion:同様に、これはミニオンデーモンプロセスであり、マスターと通信してコマンドを実行するために使用されます。 ほとんどのユーザーは、これをinitスクリプトまたはサービスファイルから開始します。

  • salt-key:このツールは、ミニオンの公開鍵を管理するために使用されます。 このツールは、現在のキーを表示し、将来の手先から送信された公開キーに関する決定を行うために使用されます。 また、帯域外の手先に配置するキーを生成できます。

  • salt:このコマンドは、アドホック実行モジュールを実行するためにミニオンをターゲットにするために使用されます。 これは、リモート実行に使用されるメインツールです。

  • salt-ssh:このコマンドを使用すると、トランスポートメカニズムのZeroMQの代わりにSSHを使用できます。

  • salt-run:このコマンドは、マスターサーバーでランナーモジュールを実行するために使用されます。

  • salt-call:このコマンドは、ログインしているミニオンで実行モジュールを直接実行するために使用されます。 これは、マスターをバイパスして問題のあるコマンドをデバッグするためによく使用されます。

  • salt-cloud:このコマンドは、さまざまなプロバイダーからのクラウドリソースを制御およびプロビジョニングするために使用されます。 新しいミニオンは簡単にスピンアップしてブートストラップできます。

他にも、salt-apisalt-cpsalt-syndicなど、あまり使用されないコマンドがいくつかあります。

結論

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