Saltstack-quick-guide

提供:Dev Guides
移動先:案内検索

SaltStack-概要

この章では、SaltStackの基本を学びます。 SaltStackのリモート実行機能により、管理者は柔軟なターゲティングシステムと並行して、さまざまなマシンでコマンドを実行できます。 ソルト構成管理は、マスターコンポーネントモデルを確立し、インフラストラクチャコンポーネントを特定のポリシーに迅速かつ非常に簡単に、柔軟かつ安全に対応させます。

SaltStackとは何ですか?

Saltは非常に強力な自動化フレームワークです。 saltアーキテクチャは、コマンドをリモートで実行するという考え方に基づいています。 すべてのネットワークは、リモート実行のいくつかの側面を中心に設計されています。 これは、*リモートWebサーバー*に静的Webページを表示するように要求するのと同じくらい簡単な場合もあれば、シェルセッションを使用してリモートサーバーに対してコマンドを対話的に発行するような複雑な場合もあります。 Saltは、より複雑なタイプのリモート実行の1つの例です。

Saltは、ユーザーが明示的に複数のマシンを直接ターゲットにしてコマンドを発行できるように設計されています。 ソルトは、1つ以上の*ミニオン*を制御するマスターのアイデアに基づいています。 コマンドは通常、マスターからミニオンのターゲットグループに発行され、コマンドで指定されたタスクを実行し、結果のデータをマスターに返します。 マスターとミニオン間の通信は、* ZeroMQメッセージバス*を介して行われます。

SaltStackモジュールは、サポートされているミニオンオペレーティングシステムと通信します。 Salt Master はデフォルトでLinux上で実行されますが、どのオペレーティングシステムでもミニオンにすることができ、現在はWindows、VMware vSphere、およびBSD Unixバリアントが十分にサポートされています。 ソルトマスターとミニオンはキーを使用して通信します。 ミニオンが初めてマスターに接続すると、マスターにキーが自動的に保存されます。 また、SaltStackは、「エージェントレス」システム管理を提供する Salt SSH も提供しています。

SaltStackの必要性

SaltStackは、速度とスケールのために構築されています。 これが、LinkedIn、WikiMedia、Googleで数万台のサーバーを備えた大規模なインフラストラクチャの管理に使用されている理由です。

複数のサーバーがあり、それらのサーバーに対して何かをしたい場合を想像してください。 それぞれにログインし、それらを一度に1つずつ実行する必要があります。その後、ソフトウェアをインストールし、特定の基準に基づいてそのソフトウェアを構成するなどの複雑な操作を実行する場合があります。

10台、または場合によっては100台のサーバーがあるとします。 各サーバーに個別に1つずつログインし、それらの100台のマシンで同じコマンドを発行してから、100台すべてのマシンで構成ファイルを編集するのは非常に退屈な作業です。 これらの問題を克服するには、1つのコマンドを入力するだけで、すべてのサーバーを一度に更新することができます。 SaltStackは、このようなすべての問題に対する正確なソリューションを提供します。

SaltStackの機能

SaltStackは、オープンソースの構成管理ソフトウェアおよびリモート実行エンジンです。 Saltはコマンドラインツールです。 Pythonで記述されている間、SaltStack構成管理は言語に依存せず、シンプルです。 Saltプラットフォームでは、プッシュモデルを使用してSSHプロトコル経由でコマンドを実行します。 デフォルトの構成システムは、 YAML および* Jinjaテンプレート*です。 Saltは主に PuppetChef および Ansible と競合しています。

他の競合ツールと比較した場合、Saltは多くの機能を提供します。 これらの重要な機能の一部を以下にリストします。

  • フォールトトレランス-使用可能なすべてのマスターのYAMLリストとしてマスター構成パラメーターを設定することにより、ソルトミニオンは一度に複数のマスターに接続できます。 マスターは、Saltインフラストラクチャにコマンドを送信できます。
  • 柔軟-ソルトの管理アプローチ全体は非常に柔軟です。 同じ環境で、エージェントとサーバー、エージェントのみ、サーバーのみ、または上記のすべてなどの最も一般的なシステム管理モデルに従うように実装できます。
  • スケーラブルな構成管理-SaltStackは、マスターごとに10,000個のミニオンを処理するように設計されています。
  • 並列実行モデル-Saltは、コマンドがリモートシステムを並列に実行できるようにします。
  • Python API -Saltはシンプルなプログラミングインターフェースを提供し、モジュール式で簡単に拡張できるように設計されており、多様なアプリケーションに簡単に成形できます。
  • セットアップが簡単-Saltはセットアップが簡単で、任意の数のサーバーの多様な要件を管理できる単一のリモート実行アーキテクチャを提供します。
  • Language Agnostic -ソルトステート構成ファイル、テンプレートエンジン、またはファイルタイプは、あらゆるタイプの言語をサポートします。

SaltStackの利点

機能が豊富なシステムと同様にシンプルであるため、塩は多くの利点を提供し、それらは以下のように要約することができます-

  • 堅牢-Saltは強力で堅牢な構成管理フレームワークであり、数万のシステムで動作します。
  • 認証-Saltは、認証用のシンプルなSSHキーペアを管理します。
  • Secure -Saltは、暗号化されたプロトコルを使用して安全なデータを管理します。
  • 高速-Saltは、リモート実行エンジンの基盤を提供する非常に高速で軽量な通信バスです。
  • 仮想マシンの自動化-Salt Virt Cloud Controllerの機能は自動化に使用されます。
  • コードではなくデータとしてのインフラストラクチャ-ソルトは、シンプルな展開、モデル駆動型の構成管理、およびコマンド実行フレームワークを提供します。

ZeroMQの概要

*Salt* は *ZeroMQ* ライブラリに基づいており、埋め込み可能なネットワーキングライブラリです。 軽量で高速なメッセージングライブラリです。 基本的な実装は *C/C ++* で行われ、 *Java* や *.Net* などのいくつかの言語のネイティブ実装が利用可能です。

ZeroMQは、ブローカーなしのピアピアメッセージ処理です。 ZeroMQを使用すると、複雑な通信システムを簡単に設計できます。

ZeroMQには次の5つの基本パターンがあります-

  • 同期要求/応答-要求を送信し、送信された各要求に対する後続の応答を受信するために使用されます。
  • 非同期リクエスト/レスポンス-リクエスターは、リクエストメッセージを送信して会話を開始し、レスポンスメッセージを待ちます。 プロバイダーは、着信要求メッセージを待機し、応答メッセージで応答します。
  • パブリッシュ/サブスクライブ-単一のプロセスからデータを配布するために使用されます(例: パブリッシャー)から複数の受信者(例: サブスクライバー)。
  • プッシュ/プル-接続されたノードにデータを配布するために使用されます。
  • Exclusive Pair -2つのピアを接続してペアを形成するために使用されます。

ZeroMQは、クラスター、クラウド、その他のマルチシステム環境間でメッセージを交換するための非常に柔軟なネットワークツールです。 ZeroMQは、SaltStackで提供される*デフォルトのトランスポートライブラリ*です。

SaltStack-アーキテクチャ

SaltStackのアーキテクチャは、ローカルネットワークシステムからさまざまなデータセンターにわたる他の展開まで、任意の数のサーバーで動作するように設計されています。 アーキテクチャは、必要な機能が単一のデーモンセットに組み込まれたシンプルなサーバー/クライアントモデルです。

次の図をご覧ください。 SaltStackアーキテクチャのさまざまなコンポーネントを示しています。

Salt disk.usage

  • SaltMaster -SaltMasterはマスターデーモンです。 SaltMasterは、Saltスレーブにコマンドと設定を送信するために使用されます。 1つのマスターで複数のマスターを管理できます。
  • SaltMinions -SaltMinionはスレーブデーモンです。 Saltミニオンは、SaltMasterからコマンドと設定を受け取ります。
  • 実行-1つ以上のミニオンに対してコマンドラインから実行されるモジュールおよびアドホックコマンド。 リアルタイム監視を実行します。
  • フォーミュラ-フォーミュラは事前に作成されたソルトステートです。 これらはソルトステート自体と同じように無制限であり、パッケージのインストール、サービスの構成と開始、ユーザーまたは権限のセットアップ、および他の多くの一般的なタスクなどのタスクに使用できます。
  • Grains -Grainsは、ミニオン固有の情報を提供するインターフェイスです。 grainインターフェースを介して利用可能な情報は静的です。 ソルトミニオンの開始時に穀物がロードされます。 これは、グレイン内の情報が変わらないことを意味します。 したがって、グレイン情報は、実行中のカーネルまたはオペレーティングシステムに関するものである可能性があります。 大文字と小文字は区別されません。
  • -柱は、暗号キーやパスワードなど、特定のミニオンに固有の非常に機密性の高いデータを生成および保存するインターフェイスです。 データはキー/値ペアで保存され、データはソルトステートツリーと同様の方法で管理されます。
  • トップファイル-塩の状態と柱のデータを塩の手先に一致させます。
  • ランナー-SaltMaster内にあるモジュールで、ジョブステータス、接続ステータス、外部APIからのデータの読み取り、接続されたソルトミニオンなどのタスクを実行します。
  • Returners -ソルトミニオンから別のシステムにデータを返します。
  • Reactor -SaltStack環境でイベントが発生したときに反応をトリガーします。
  • SaltCloud -Salt Cloudは、クラウドホストと対話するための強力なインターフェイスを提供します。
  • SaltSSH -Saltミニオンを使用せずに、システム上でSSH経由でSaltコマンドを実行します。

次の章では、SaltStackのさまざまな競合他社とその機能について詳しく学習します。

SaltStack-競合他社

Salt、P​​uppet、Chef、およびAnsibleは、主要な構成管理およびオーケストレーションツールであり、それぞれがサーバー自動化への異なるパスを取ります。 これらは、数十、数百、または数千のサーバーの構成と保守を容易にするために構築されました。

SaltStackが主にPuppet、Chef、およびAnsibleと競合する方法を理解しましょう。

プラットフォームとサポート

以下は、SaltStackとその競合他社をサポートするすべてのプラットフォームのリストです。

  • SaltStack -SaltStackソフトウェアは、Linux、Windows、Mac OS X、およびUNIXの多くのバージョンで実行および管理されます。
  • Puppet -Red Hat Enterprise Linux、CentOS、Oracle Linux、Scientific Linux、SUSE Linux Enterprise Server、およびUbuntu。
  • Chef -Chefは、AIX、RHEL/CentOS、FreeBSD、OS X、Solaris、Microsoft Windows、Ubuntuなどの複数のプラットフォームでサポートされています。
  • Ansible -Enterprise Linux(EPEL)およびその他のオペレーティングシステム用の追加パッケージを介したLinux、CentOS、およびScientific LinuxのFedoraディストリビューション。

起源言語

  • SaltStack -Python
  • 人形-ルビー
  • Chef -RubyとそのCLIはrubyベースのDSLを使用します
  • Ansible -Python

サポートされている言語

  • SaltStack -任意の言語
  • 人形-ルビー
  • Chef -RubyとそのCLIはrubyベースのDSLを使用します
  • Ansible -任意の言語

Web UI

  • SaltStack -Web UIは、実行中のジョブ、ミニオンステータス、およびイベントログのビューを提供します。
  • Puppet -Web UIは、レポート、インベントリ、およびリアルタイムのノード管理を処理します。
  • Chef -Web UIでは、ノードの検索とインベントリ、ノードアクティビティの表示、およびクックブック、ロール、ノードの割り当てを行うことができます。
  • Ansible -Web UIでは、ユーザー、チーム、およびインベントリを構成し、Playbookをインベントリに適用できます。

管理ツール

  • SaltStack -SaltStack Enterpriseは、 DevOps と同様に、クラウドおよびIT運用のオーケストレーションを管理するためのメインツールとして位置付けられています。
  • Puppet -Puppetには、Puppet EnterpriseとOpen Source Puppetの2つのフレーバーがあります。 Puppet Enterpriseは、オープンソースPuppetの機能を提供することに加えて、ノード管理用のGUI、API、およびコマンドラインツールも提供します。
  • Chef -CFEngineは構成管理ツールです。
  • Ansible -Ansible 1.3は、管理のための主要なツールです。

パフォーマンス

  • SaltStack -Saltは、高性能と拡張性のために設計されています。 Saltの通信システムは、ZeroMQを使用して、Saltマスターとミニオンの間に永続的なデータパイプを確立します。
  • Puppet -セキュアで高性能であり、エージェントは不要です。
  • Chef -Chef Serverの最も明らかな闘争は検索です。検索は遅く、クライアントから同時に要求されません。
  • Ansible -安全で高性能、エージェントは不要です。

価格と価値

  • SaltStack -無料のオープンソースバージョン。 SaltStack Enterpriseの年間コストは1台あたり150ドルです。
  • Puppet -無料のオープンソースバージョン。 Puppet Enterpriseのコストは1台あたり年間100ドルです。
  • シェフ-無料のオープンソースバージョン。 Enterprise Chefは5台のマシンで無料、20台のマシンで月額120ドル、50台のマシンで月額300ドル。
  • Ansible -無料のオープンソースバージョン。 Ansibleは10台のマシンに対して無料で、必要なサポートに応じて1台あたり年間100ドルまたは250ドルです。

使用法

  • SaltStack -SaltStackは、CiscoおよびRackspaceで使用されています。 任意のクラウドベースのプラットフォームと統合できます。
  • Puppet -PuppetはZynga、Twitter、ニューヨーク証券取引所、PayPal、ディズニー、Googleなどで使用されています。
  • Chef -Chefは、Internap、Amazon EC2、Google Cloud Platform、OpenStack、Microsoft Azure、Rackspaceなどのクラウドベースのプラットフォームと統合できます。
  • Ansible -Ansibleは、仮想化環境、Amazon Web Services、Cloud Stack、DigitalOcean、Google Cloud Platformなどのクラウド環境などに展開できます。

SaltStack-インストール

インストールに移動する前に、次の要件を満たしている必要があります-

  • Linuxサーバー(最新のUbuntuサーバー)。
  • このサーバーへの sudo または* rootアクセス*。

次のコマンドを使用して、すべての更新をインストールします-

sudo apt-get update

SaltMasterをインストールする

次のapt-getコマンドを使用して、リポジトリからSaltMasterをインストールします。

sudo apt-get install salt-master

Salt Minionをインストールする

次のapt-getコマンドを使用して、リポジトリからSaltミニオンをインストールします。

sudo apt-get install salt-minion

Salt Syndicをインストールする

次のapt-getコマンドを使用して、リポジトリからSaltシンディックをインストールします。

sudo apt-get install salt-syndic

マスター構成

ソルト構成は非常に簡単です。 マスターのデフォルト構成は、ほとんどのインストールで機能します。 構成ファイルは「/etc/salt」ディレクトリにインストールされ、-/etc/salt/masterや/etc/salt/minionなど、それぞれのコンポーネントに基づいて名前が付けられます。

#interface: 0.0.0.0
interface: <local ip address>

構成ファイルを更新した後、次のコマンドを使用してSaltマスターを再起動します。

sudo service salt-master restart

ミニオン構成

Salt Minionの設定は非常に簡単です。 デフォルトでは、Salt MinionはDNS名「salt」への接続を試みます。 Minionがその名前を正しく解決できる場合、構成は必要ありません。 以下のコードに示すように、通常は /etc/salt/minion であるミニオン構成ファイルの「master」ディレクティブを再定義します-

#master: salt
master: <local ip address>

構成ファイルを更新した後、以下のコマンドを使用してソルトミニオンを再起動します。

sudo service salt-minion restart

キー管理

ソルトは、マスターとミニオン間のすべての通信に* AES暗号化*を使用します。 マスターとミニオン間の通信は、信頼できる受け入れられたキーを介して認証されます。

salt-key -L

次の output が生成されます-

Accepted Keys:
Denied Keys:
Unaccepted Keys:
<local system name>
Rejected Keys:

以下のコマンドを発行して、すべてのキーを受け入れます。

sudo salt-key -A

次の output が生成されます-

The following keys are going to be accepted:
Unaccepted Keys:
<local system name>
Proceed? [n/Y] y
Key for minion bala-Inspiron-N4010 accepted.

もう一度 salt key listing コマンドを発行し、

salt-key -L

次の output が生成されます-

Accepted Keys:
<local system name>
Denied Keys:
Unaccepted Keys:
Rejected Keys:

コマンドを送信する

test.pingコマンドを実行して、マスターとミニオン間の通信を確認する必要があります。

sudo salt '*' test.ping

次の output が生成されます-

<local system name>
   True

ここで、「」はすべてのミニオンを指します。 test.pingは1つのミニオンしかないため、 *ping コマンドを実行し、pingが成功したかどうかを返します。

SaltStack-シンプルな環境の作成

この章では、1つのソルトマスターと2つのソルトミニオンの単純なSaltStack環境を作成します。 この環境は、今後の章でソルトの概念を学ぶのに役立ちます。

SaltStack環境を作成するために、次の手順を順守します。

VirtualBox環境をインストールする

VirtualBoxは、クロスプラットフォームの仮想化アプリケーションです。 VirtualBoxを使用すると、一度に複数のオペレーティングシステムを実行できます。 VirtualBoxは、Windows、Linux、Macintosh、およびSolarisで実行されます。 多数の*ゲストオペレーティングシステム*をホストおよびサポートします。

VirtualBoxをダウンロードしてインストールするには、次のリンクにアクセスしてください-https://www.virtualbox.org/wiki/Downloads

3つの仮想マシンを作成し、VirtualBoxを使用して実行します。

Vagrantをインストールする

Vagrantは、構成が簡単で、再現性があり、ポータブルな作業環境を提供します。

次のリンクにアクセスして、Vagrantをダウンロードしてインストールできます-https://www.vagrantup.com

Vagrantが正常にインストールされたら、設定する必要があります。 フォルダに Vagrantfile という名前の単一のファイルを作成し、マシンのタイプとそのプロパティを記述します。

  • Vagrantの実行*-Vagrantを実行するには、次のコマンドを発行します-
vagrant up

vagrantを実行すると、Vagrantはそれらのマシンを作成して起動します。これらのマシンは、バックグラウンドでVirtualBoxを使用して Vagrantfile で定義されます。 これらのマシンは、閉じるまで実行されます。

  • Vagrantの停止*-VirtualBoxで実行中のすべてのマシンを停止するには、次のコマンドを入力します-
vagrant halt

デモ環境をダウンロードする

SaltStackはVagrantのセットアップとしてシンプルなデモ環境を提供し、 github でホストされています。 次のコマンドを使用してセットアップをダウンロードしましょう-

cd/cd/to/path

git clone https://github.com/UtahDave/salt-vagrant-demo

環境を開始する

今、次のコマンドを使用してデモ環境を開始します-

cd/cd/to/path/salt-vagrant-demo
vagrant up

このコマンドの後、次の応答が表示されます-

result

現在、3つのサーバーが実行されています。1つはソルトマスターが構成され、2つはソルトミニオンが構成されています。

ソルトマスターを実行する

次のコマンドを使用してソルトマスターにログインします-

vagrant ssh master

さて、以下のコマンドを使用してrootユーザーに移動します-

sudo su

これで、ソルトマスターに正常に接続できました。

ここで、SaltStackの基本的なコマンドをいくつか見ていきましょう。

すべてのキーをリストする

次のコマンドは、Salt minion接続を検証し、接続が受け入れられるか、拒否されるか、保留中かを表示します。

salt-key —list-all

次の output が生成されます-

Accepted Keys:
minion1
minion2
Denied Keys:

Unaccepted Keys:
Rejected Keys:

塩分を確認する

これで、すべてのキーを受け入れました。ソルトマスターからコマンドを送信して、ソルトミニオンがリッスンしているかどうかを確認できます。

salt '*' test.ping

次の output が生成されます-

minion1:
   True
minion2:
   True

上記の結果から、ミニオン1とミニオン2をリストします。これは、ミニオンが適切にリッスンしていることを意味します。

SaltStack-アクセス制御システム

アクセス制御システムは、グループのユーザーが許可付きでタスクを実行するためのオプションを提供します。 Saltアクセス制御システムは、非管理制御インターフェースへのアクセスを構成するために使用されます。 このプロセスをすべてのシステムに適用できます。 このコントロールは、非管理ユーザーがSaltコマンドを実行するのに役立ちます。

ソルトインターフェイスは、次の3つのタイプです-

  • パブリッシャーACLシステム
  • 外部認証システム
  • ピアシステム

これらの各インターフェースの詳細を理解してみましょう。

パブリッシャーACLシステム

パブリッシャーACLシステムでは、ルート以外のユーザーにアクセスして、マスターからのミニオンに対してSaltコマンドを実行できます。 パブリッシャーACLシステムは、 publisher_acl 構成オプションを介してマスター構成ファイルで構成されます。 次のように定義されます-

publisher_acl:
   user1:
      - .*

   user2:
      - web*:
         - test.*
         - pkg.*

ここに、

  • user1 は何でも実行できます。
  • user2test および pkg を使用できますが、「web *」ミニオンでのみ使用できます。

外部認証システム

*external auth system* は、 *PAM、LDAP* などの外部認証システムを介して特定のミニオンでsaltコマンドを実行するアクセスを提供するために使用されます この構成ファイルは、以下で説明するようにマスターファイルで定義されます。
external_auth:
   pam:
      user1:
         - 'web*':
            - test.*
            - network.*
      user2:
         - .*

ここに、

  • user1 は、 web ターゲットに一致するミニオンで *test および* networkモジュール*の関数を実行できます。
  • user2 はすべての機能を実行できます。

コマンドで外部認証システムを有効にする

ソルトサーバーは、外部認証を有効にするオプション「–a」を提供します。

salt -a pam web\* test.ping

ここでは、-a pam *オプションを使用してPAM外部認証を有効にします。 Salt Serverは、コマンドを実行するたびに認証の詳細を要求します。 Salt Serverが初めて認証の詳細を要求するのを制限するために、Tオプションを使用できます。 この -Tオプション*は、今後12時間(デフォルト設定)の認証詳細をキャッシュし、それを使用してユーザーを認証します。

salt -T -a pam web\* test.ping

ピアシステム

ソルトミニオンは、ピアインターフェイスを使用してコマンドを渡すことができます。 ピアインターフェイスは、 peer 構成セクションを使用してミニオンがマスターからコマンドを送信できるようにするか、 peer_run 構成を使用してマスターからランナーを実行できるように、マスター構成ファイルで構成されます。

これら両方の構成を詳細に理解しましょう。

ピア構成

マスターファイルで定義される単純な構成は以下のとおりです-

peer:
   .*:
      - .*

ここでは、すべてのミニオンの通信を可能にしますが、非常に安全な環境にのみお勧めします。

ミニオンを特定のIDに割り当てるには、構成を次のように定義する必要があります。peer-

.*domain.com:
   - test.*

peer_runの構成

この設定は、マスターファイルのpeer_runオプションを使用して、ミニオンがマスターからランナーを実行できるようにするためです。 次の例は、すべてのミニオンとすべてのランナーへのアクセスを許可します。

peer_run:
   .*:
      - .*

ミニオンを特定のIDに割り当てるには、以下に示すように構成を定義する必要があります-

peer_run:
   .*domain.com:
      - test.*

コマンドの実行方法

すべての手先で test.ping を実行するには、 publish.publish モジュールとともに salt-call コマンドを使用します。

salt-call publish.publish \* test.ping
*runner* を実行するには、 *publish.runner* モジュールとともにsalt-callコマンドを使用します。
salt-call publish.runner manage.up

SaltStack-ジョブ管理

Saltには、多数のシステムとの高速通信機能があります。 このアプローチにより、Saltは強力なマルチタスクシステムを作成できます。 Saltは複数のシステムでジョブを実行できるため、Saltはジョブ管理手法を使用して、すべてのシステムで実行されている各ジョブを管理します。 この章では、ジョブ管理について詳しく説明します。

ジョブIDとは何ですか?

Saltにはキャッシュディレクトリ cachedir があります。 この中で、ミニオンが維持するディレクトリは proc ディレクトリと呼ばれます。 次のディレクトリ/var/cache/salt/procにあります。

procディレクトリは、すべてのファイルを維持するために使用されます。 これらのファイルが実行されると、一意のジョブIDが割り当てられます。 このジョブIDは、ミニオンで現在実行中のジョブを識別し、ジョブを検索できるようにします。

SALTUTILモジュール

Saltは、Saltutilジョブ管理プロセスと呼ばれる新しいモジュールを導入しています。 このモジュールには、ジョブを管理するためのさまざまな機能が含まれています。 これらの関数は、ミニオンレベルでジョブを管理するために使用されます。 機能は次のように簡単に説明されています-

  • running -procディレクトリにあるすべての実行中のジョブデータを返します。
  • find_job -ジョブIDに基づいて特定のジョブに関する特定のデータを返します。
  • signal_job -与えられたジョブid(jid)にシグナルを送信することを許可します。
  • term_job -指定されたジョブの終了信号を送信します。
  • kill_job -指定されたジョブのキル信号を送信します。

ジョブランナー

Job Runnerには、データの表示をより簡単かつ明確にする機能が含まれています。 さまざまな機能があります。 これらの各機能について詳しく説明します。

アクティブ機能

アクティブ機能は、どのジョブがまだ実行中であるかを特定し、どのシステムがジョブを完了し、どのシステムがまだ待機中であるかを確認するために使用されます。 次のコマンドを使用して実行されます。

salt-run jobs.active

LOOKUP_JIDファンクション

lookup_jidランナーは、現在のジョブのデータを表示します。 これらのジョブは、マスター構成の keep_jobs オプションを介して構成されます。 次のコマンドを使用して実行されます。

salt-run jobs.lookup_jid <job id number>

LIST_JOBSファンクション

List_jobs関数は、ジョブのジョブデータをリストするために使用されます。 それは次のコマンドで表されます-

salt-run jobs.list_jobs

ジョブスケジューリング

スケジュールシステムは、ミニオンの実行機能またはマスターのランナーの実行を公開します。

それは次の方法で実行されます-

  • スケジュール-マスターまたはミニオンの config ファイルのスケジュールオプション。
  • ミニオンの柱データ-saltutil.refresh_pillarコマンドを使用して、ミニオンの柱データを更新します。
  • スケジュール状態またはスケジュールモジュール。

塩の状態はミニオンで実行されます。 以下に示すように、位置引数を渡し、* configファイル*で名前付き引数の YAML dict を提供できます。

schedule:
   job1:
      function: saltstate.sls
      seconds: 3600
      args:
         - httpd
      kwargs:
         test: True

ここで、 job1 は、指定された引数 httpd を使用して1時間ごとに関数 saltstate.sls を実行します。 test:True は、 saltstate.sls で定義されている httpd コマンドの追加の引数です。

SaltStack-ソルトファイルサーバー

Saltファイルサーバーは、ステートレスZeroMQサーバーです。 Saltマスターに組み込まれています。 Saltファイルサーバーは、マスターからミニオンにファイルを配布するために使用されます。 さまざまなモジュールが含まれています。 この章では、saltファイルサーバー、その構成、saltファイルサーバーに関連するモジュール、pythonでsaltファイルサーバーにアクセスする方法などを理解しましょう。

ファイルサーバーバックエンド

ファイルサーバーバックエンドにより、Saltファイルサーバーは、ローカルファイルシステム、Gitバージョン管理システムなどの他のファイルサーバーへの透過的なインターフェイスとして機能できます。

Gitファイルサーバーバックエンドを有効にするには、マスターファイルで次の構成を使用します。

fileserver_backend:
   - git

複数のバックエンドファイルシステムを有効にするには、次の構成を使用できます。

fileserver_backend:
   - roots
   - git

対応するバックエンドサーバーの特定のセクションを使用して、別のバックエンドサーバーに追加オプションを指定することもできます。

ローカルファイルシステム

このシステムを使用するには、次のコードを使用する必要があります。

file_roots:
   base:
      -/srv/salt/prod

Gitファイルシステム

このシステムを使用するには、次のコードを使用する必要があります。

gitfs_remotes:
   - https://github.com/sample/sample1.git

ファイルをリクエストする

Saltには、特定の環境のファイルを要求するオプションがあります。

salt://path/to/file?saltenv = base

ここでは、環境はrootsオプションを使用して定義されます。

ファイルサーバーの構成

ソルトファイルは多くのルートディレクトリ内で割り当てられ、ファイルパスと検索する環境の両方を指定することでアクセスできます。 個々の環境は、複数のディレクトリルートにまたがることができます。

環境

デフォルトの環境はベースです。 この環境は定義されており、他の環境が指定されていない場合にファイルをダウンロードするために使用されます。

file_roots:
   base:
      -/srv/salt/base

次のコードに示すように、複数の環境を使用することもできます。

file_roots:
   base:
      -/srv/salt/base
   dev:
      -/srv/salt/dev
      -/srv/salt/base

CPモジュール

CPモジュールは、* Saltファイルサーバー*を操作するためのメインモジュールです。 salt-cp コマンドを使用して、Saltファイルサーバーによって提示されたファイルを配布することもできます。

GET_FILE

*cp.get_file* 関数をミニオンで使用して、マスターからファイルをダウンロードできます。 次のコードブロックに示すように定義されます。
salt '*' cp.get_file salt://vimrc/etc/vimrc

上記のコマンドは、すべてのソルトミニオンに vimrc ファイルをダウンロードして /etc/vimrc にコピーするよう指示します。

テンプレートを有効にする

次のようにget_fileでテンプレートオプションを有効にすることができます-

salt '*' cp.get_file "salt://vimrc"/etc/vimrc template = jinja

圧縮を適用

圧縮を使用するには、 gzip という名前の引数を使用します。 有効な値は1〜9の整数です。1は最小圧縮、9は最大値です。

コマンドは次のように定義されています-

salt '*' cp.get_file salt://vimrc/etc/vimrc gzip = 5

GET_DIR

*cp.get_dir* 関数をミニオンで使用して、マスターからディレクトリ全体をダウンロードできます。 次のコードブロックで定義されています。
salt '*' cp.get_dir salt://etc/mysql/etc
*cp.get_dir* は、テンプレートレンダリングとgzip圧縮引数をサポートします。 必要に応じて、割り当てることもできます。

FILECLIENTモジュール

Saltは、saltファイルサーバーへのアクセスに役立つPythonモジュールを提供します。 salt/fileclient.py モジュールは、ミニオンからマスターへの通信をセットアップするために使用されます。

ファイルを取得するためのサンプルコードは次のとおりです-

import salt.minion
import salt.fileclient

def get_file(path, dest, saltenv = ‘base'):
   client = salt.fileclient.get_file_client(__opts__)
   return client.get_file(path, dest, true, saltenv)

ここに、

  • optsは、モジュールがソルト環境で実行されるときに使用可能です。 そうでない場合は、構成パス( /etc/salt/minion )を提供する必要があります。
  • path は、saltファイルサーバーのソースファイルのパスを指します。
  • dest はファイルの宛先パスを示します。
  • saltenv は環境を指します

次の章では、 Git をファイルサーバーとして使用する方法を理解します。

SaltStack-ファイルサーバーとしてのGit

*Git* は、オープンソースの分散バージョン管理システムです。 任意のファイルの変更を追跡するために使用できます。 Saltは、Gitファイルサーバーを使用してGitリポジトリからファイルを送信します。 Gitを *fileserver_backend* リストオプションに設定できます。1つ以上のリポジトリを設定する必要がある場合は、 *gitfs_remotes* オプションを使用して設定できます。

この章では、Gitファイルサーバーをインストールおよび構成する方法について説明します。 インストールに進む前に、次の前提条件を満たしている必要があります。

Gitを使用するためのSaltサーバーの前提条件

ファイルサーバーとしてGitを使用するソルトサーバーの最小要件は次のとおりです-

  • pygit2
  • ダリッジ

Pygit2とDulwichは、マスター構成ファイルの gitfs_provider パラメーターを使用して構成されます。 gitfs_provider がマスターファイルで設定されていない場合、適切なバージョンが利用可能であれば、Saltはpygit2を優先し、その後に GitPython および Dulwich が続きます。

pygit2をインストールする

次のコマンドは、FedoraおよびUbuntuベースのシステムにpygit2をインストールするために使用されます-

  • * Fedoraベースのシステム*
yum install python-pygit2
  • * Ubuntuベースのシステム*
apt-get install python-pygit2

ここで、pygit2のサポートされる最小バージョンは0.20.3です。

GitPYTHONをインストールする

GitPythonは、以下に示すように* yum/aptコマンド*を使用してマスターに簡単にインストールできます。

  • * Fedoraベースのシステム*
yum install GitPython
  • * Ubuntuベースのシステム*
apt-get install python-git

DULWICHをインストール

Dulwichは、yumコマンドを使用してマスターに簡単にインストールできます。

  • * Fedoraベースのシステム*
yum install python-dulwich
  • * Ubuntuベースのシステム *
apt-get install python-dulwich

これで、Gitファイルサーバーのすべての依存関係がインストールされました。* master config ファイルの *fileserver_backend セクションを使用して、このGitファイルサーバーを構成します。

バックエンド構成

Gitファイルサーバーを使用するには、マスター構成ファイルのfileserver_backendリストにGitを追加する必要があります。 次のように記述されています-

fileserver_backend:
   - git

リモート構成でGitファイルサーバーを構成する方法をさらに理解しましょう。

gitfs_remotesの構成

マスターファイルのgitfs_remotes設定には、git://、https://、file://、ssh://などのURLのいずれかまたはすべてを指定できます。 これは、要求されたファイルを検索するために使用されます。

単純なhttps URLの仕様を以下に定義します。

gitfs_remotes:
   - https://github.com
*ssh* 設定は、以下に示すように実行できます。
gitfs_remotes:
   - [email protected]:user1/sample.git
   - ssh://[email protected]/path/to/sample.git

これで、2つのオプション fileserver_backend および gitfs_remotes を使用してGitファイルサーバーを構成しました。

マスターを再起動

マスターファイルですべての変更を行った後、マスターを再起動してGitファイルサーバーにすべての構成をロードします。

複数のリモート構成

次のコマンドは、マスターファイルの gitfs_remotes の複数の構成に使用されます。

gitfs_remotes:
   - git://github.com/sample/sample1.git
   - https://github.com/sample/sample2.git
   - file:///root/user/sample

ここで、リポジトリ* sample1.git、sample2.git、および *sample.doc には次のファイルが含まれている場合があります。

sample1.git:
   top.sls

sample2.git
   edit/vimrc

sample.doc
   edit/vimrc

SaltStack-ファイルサーバーとしてMinionFSを使用する

*MinionFS* は、ミニオンがミニオン間でファイルを交換するためにSaltが提供する特別なファイルサーバーです。 MinionFSが提供するファイルは、ミニオンが意図的に共有するファイルです。 ファイルを共有するには、Minionは以下の手順に従う必要があります。
  • ソースミニオンは、 cp.push 関数を使用してファイルをソルトマスターにプッシュする必要があります。
  • ソースミニオンによってファイルがプッシュされると、展開されたファイルは、MinionFSファイルサーバーを使用して他のミニオンからアクセスできます。

プッシュを有効にする

デフォルトでは、ミニオンによるファイルのマスターへのプッシュは無効になっています。 ミニオンからファイルを受け入れるには、マスターが構成ファイルに「file_recv」オプションを持っている必要があり、その値を True に設定する必要があります。 デフォルトでは、「file_recv」が false の場合の値。

file_recv: True

オプションを有効にしたら、マスターサービスを再起動します。

ファイルをプッシュする

ミニオンはファイルをマスターにプッシュできます。 これは cp.push 関数によって実行されます。 このcp.push関数は、ミニオンIDを使用してミニオンでファイルをプッシュする簡単なメカニズムを提供します。

salt 'minion-id' cp.push/path/to/the/file

ここで、minion-idは、どのミニオンがファイルをプッシュしているかを識別するために使用されます。 このコマンドは、 master’s cachedir の下の minions という名前のサブディレクトリにファイルを保存します。 通常、パスは–/var/cache/salt/master/minionsです。

ミニオン、 m1 、およびファイル-/var/log/mylog.txtの場合、ファイルは-/var/cache/salt/master/minions/m1/var/log/mylog.txtに保存されます。

MinionFSを有効にする

MinionFSを有効にするには、次のコードブロックに示すように、ファイルサーバーバックエンド設定に minion を追加するだけです。

fileserver_backend:
   - roots
   - minion

MinionFSが有効になると、ミニオンプッシュファイルは次のように使用可能になります-

salt://<minion-id>/path/to/pushed/file

ミニオン、 m1 、およびプッシュファイル–/var/log/mylog.txtの場合、プッシュファイルはsalt://m1/var/log/mylog.txtから提供されます。

このminionFSは、次の構成を使用して特別なディレクトリにマウントできます。 これは、minionFSファイルを他のファイルから分離し、minionファイルを整理するのに役立ちます。

minionfs_mountpoint: salt://minionfs

上記の構成の場合、ファイルは minionfs ディレクトリで次のように使用できます– salt://minionfs/m1/var/log/mylog.txt

MinionFSの詳細オプション

MinionFSには、特定のミニオンからプッシュされたファイルの可用性を有効/無効にするオプションもあります。 オプションは、ミニオンを有効にする minionfs_whitelist と、ミニオンを無効にする minionfs_blacklist です。

minionfs_whitelist:
   - webserver
   - develop*
   - ‘mail\d+.mysite.com'

minionfs_blacklist:
   - testing

上記の構成では、 testing を除くすべてのミニオンは、minionFSを使用してファイルを共有できます。

  • Webserver1 IDが正規表現_develop_ と一致するミニオン
  • IDが正規表現 mail \ d + .mysite.com に一致する手先。
  • テスト

次の章では、Cronを塩で使用する方法を学びます。

SaltStack-SaltでCronを使用する

*Cron* アプリケーションとともにSaltを使用できます。 両方のアプリケーションを一緒に使用すると、Saltを自動化する絶好の機会が得られます。 Saltはコマンドをリモートで実行するオプションを提供しますが、Cronは事前にスケジュールされた方法または自動化された方法で実行できるようにします。 この章では、CronとSaltを一緒に使用する方法を学びましょう。

Cronとは何ですか?

Cronは、Linux環境で非常に便利なアプリケーションです。 特定の日時に実行するコマンドまたはスクリプトを事前設定できます。 また、毎日、毎週、毎月1日など、一定の間隔でアプリケーションを実行できます。

システムの起動時にCronが起動し、構成の詳細について /etc/crontab ファイルを確認します。/etc/crontabには、以下に示すように、すべてのアプリケーションとそのスケジュールが個別の行にあります。

15 * * * *root echo "This command runs at 15 minutes past every hour"
15 10* * * root echo "This command is run daily at 10:15 am"

すべての行には、スペースで区切られた次の7つのエントリポイントがあり、次のとおりです-

  • -時間の分で、「0」から「59」の間です。
  • hour -時間で、24時間制で指定されます。
  • day_of_month -月の日で、1〜31です。 たとえば、各月の10 ^^は10です。
  • month -指定された月で、数値(0-12)または月の名前として指定されます(例: 五月)。
  • day_of_week -曜日は数値(0〜7)または曜日名として指定されます(例: 太陽)。
  • user -コマンドを実行するユーザーアカウント。
  • cmd -実際のコマンドとその引数。

ここで、何も割り当てられていない場合は*が置き換えられます。

Salt Caller(ソルトコール)

saltは、saltコマンドを使用してマスターサーバーからではなくローカルミニオンシステム自体でモジュールを実行するためのCLI(コマンドラインインターフェイス) salt-call を提供します。 salt呼び出しCLIは、saltコマンドでサポートされるすべてのオプションをサポートしますが、ローカルで実行されます。

Salt Callerは当初、デバッグをサポートするように設計されていましたが、現在ではスタンドアロンアプリケーションとして使用できます。

salt-call test.ping

cronでソルトコールを使用する

salt-call CLIは、Cronを使用してsalt操作をスケジュールするのに役立ちます。 たとえば、毎日真夜中のミニオンの状態を確認するには、以下に示すように、state-applyオプションと共にsalt-callを使用できます。

*/etc/crontab*
PATH =/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin
0 0 * * * salt-call state.apply

ここに、

  • state.apply 関数は、ミニオンのソルト設定ファイルをチェックし、ミニオンに定義されたすべてのアクションが適切に設定されているかどうかをチェックします。
  • システムパスでsaltコマンドが使用できない場合があるため、パスを設定することをお勧めします。

次の章では、Saltのコアコンセプトであるリモート実行について学習します。

SaltStack-リモート実行

Saltのコアコンセプトの1つは、リモート実行です。 Saltは、数千のシステムで数秒でコマンドを実行できます。 Saltは、独自のコマンドを使用してこの機能を実行します。 この章でリモート実行のためのさまざまなSaltコマンドを理解しましょう。

ソルトコマンド

Saltコマンドにより、Saltマスターは1つ以上の* Saltミニオン*と通信できます。 基本的な構文は次のとおりです。

salt '<target>' <module.function> [arguments]

上記のコマンド構文は、次の3つの主要コンポーネントで構成されています。

  • target -コマンドによって適用されるシステムを決定します。
  • module.function -これはコマンドです。 コマンドはモジュールと機能で構成されています。
  • 引数-関数の呼び出しに必要な追加データ。

各コンポーネントを詳細に理解しましょう。

ターゲットコンポーネントとは何ですか?

ターゲットはコンポーネントであり、これにより、ミニオン(管理対象システム)をフィルタリングして機能を実行できます。 ターゲットコンポーネントを使用する簡単なコマンドを以下に定義します。

salt '*' test.ping

次の output が生成されます-

minion2:
   True
minion1:
   True

ここで、ターゲット* ’’ *はすべての管理対象システムを表します。 ここの「*テスト」はモジュールであり、「 ping 」は関数です。 これは、リモートシステムでpingサービスをテストするために使用されます。 さまざまなモジュールとその機能については、後続の章で学習します。

ID(ミニオン)を使用するターゲット

ターゲットの id を使用して、特定のミニオンにコマンドを送信できます。 * *を使用する代わりに、 *minion id を使用して置き換えることができます。 以下に定義されています。

salt 'minion1’ test.ping

次の output が生成されます-

minion1:
   True

正規表現を使用したターゲット

ターゲットは、特定の正規表現でフィルタリングできます。 以下に定義されています。

salt -E 'minion[0-9]' test.ping

次の output が生成されます-

minion2:
   True
minion1:
   True

リストを使用したターゲット

ターゲットはリストで明示的に指定できます。 次のコードブロックで定義されています。

salt -L 'minion1,minion2' test.ping

次の output が生成されます-

minion2:
   True
minion1:
   True

条件によるターゲット

以下のコードブロックに示すように、ターゲットを1つのコマンドに組み合わせることができます。

salt -C 'G@os:Ubuntu and minion* or [email protected].*' test.ping

次の output が生成されます-

minion1:
   True
minion2:
   True

モジュールと関数(module.function)

Saltはシェルコマンドを実行できます。すべての管理対象システムでパッケージを更新し、ファイルなどを同時に配布します。 Saltはモジュールを使用してこれらの操作を行います。 Saltには、利用可能なすべての機能のための特別なモジュールがあります。 この章の簡単な例を使用して、さまざまなSaltモジュールを理解しましょう。

シェルコマンド

Saltは、 cmd.run コマンドを使用して、複数のシステムにわたってシェルコマンドをリモートで実行します。 cmd はメインモジュールで、 runcmd モジュールで使用可能な機能の1つです。 run 関数を使用すると、以下のコードブロックに示すように、リモートシステムでシェルコマンドを実行できます。

salt '*' cmd.run 'ls -l/etc'

次の output が生成されます-

minion2:
   total 868
   drwxr-xr-x 7 root root    4096 Jan 26 22:10 X11
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 acpi
   -rw-r--r-- 1 root root    2981 Jan 26 20:48 adduser.conf
   -rw-r--r-- 1 root root      10 Jan 26 21:04 adjtime
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 alternatives
   drwxr-xr-x 3 root root    4096 Jan 26 20:53 apm
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apparmor
   drwxr-xr-x 9 root root    4096 Jan 26 21:02 apparmor.d
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apport
   drwxr-xr-x 6 root root    4096 Jan 29 07:14 apt
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 at-spi2
……………
……………
minion1:
   total 868
   drwxr-xr-x 7 root root    4096 Jan 26 22:10 X11
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 acpi
   -rw-r--r-- 1 root root    2981 Jan 26 20:48 adduser.conf
   -rw-r--r-- 1 root root      10 Jan 26 21:04 adjtime
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 alternatives
   drwxr-xr-x 3 root root    4096 Jan 26 20:53 apm

   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apparmor
   drwxr-xr-x 9 root root    4096 Jan 26 21:02 apparmor.d
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apport
   drwxr-xr-x 6 root root    4096 Jan 29 07:09 apt
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 at-spi2
   -rw-r----- 1 root daemon   144 Oct 21  2013 at.deny
   -rw-r--r-- 1 root root    2177 Apr  9  2014 bash.bashrc
   -rw-r--r-- 1 root root      45 Mar 22  2014 bash_completion
……………
……………

ディスク使用量を表示

Saltは、管理対象システムの完全なディスク詳細を取得するための特別なモジュール disk を提供します。 diskmodule には、詳細を照会する usage 関数があります。

salt '*' disk.usage

次の output が生成されます-

minion1:
   ----------
  /:
      ----------
      1K-blocks:
         41251136
      available:
         37852804
      capacity:
         5%
      filesystem:
        /dev/sda1
      used:
         1662420
  /dev:
      ----------
      1K-blocks:
         503908
      available:
         503896
      capacity:
         1%
      filesystem:
         udev
      used:
         12
  /run:
      ----------
      1K-blocks:
         101780
      available:
         101412
      capacity:
         1%
      filesystem:
         tmpfs
      used:
         368
  /run/lock:
      ----------
      1K-blocks:
         5120
      available:
         5120
      capacity:
         0%
      filesystem:
         none
      used:
         0
  /run/shm:
      ----------
      1K-blocks:
         508884
      available:
         508872
      capacity:
         1%
      filesystem:
         none
      used:
         12
  /run/user:
      ----------
      1K-blocks:
         102400
      available:
         102400
      capacity:
         0%
      filesystem:
         none
      used:
         0
  /sys/fs/cgroup:
      ----------
      1K-blocks:
         4
      available:
         4
      capacity:
         0%
      filesystem:
         none
      used:
         0
  /vagrant:
      ----------
      1K-blocks:
         303114632
      available:
         252331440
      capacity:
         17%
      filesystem:
         none
      used:
         50783192
minion2:
   ----------
  /:
      ----------
      1K-blocks:
         41251136
      available:
         37852804
      capacity:
         5%
      filesystem:
        /dev/sda1
      used:
         1662420
  /dev:
      ----------
      1K-blocks:
         503908
      available:
         503896
      capacity:
         1%
      filesystem:
         udev
      used:
         12
  /run:
      ----------
      1K-blocks:
         101780
      available:
         101412
      capacity:
         1%
      filesystem:
         tmpfs
      used:
         368
  /run/lock:
      ----------
      1K-blocks:
         5120
      available:
         5120
      capacity:
         0%
      filesystem:
         none
      used:
         0
  /run/shm:
      ----------
      1K-blocks:
         508884
      available:
         508872
      capacity:
         1%
      filesystem:
         none
      used:
         12
  /run/user:
      ----------
      1K-blocks:
         102400
      available:
         102400
      capacity:
         0%
      filesystem:
         none
      used:
            0
  /sys/fs/cgroup:
      ----------
      1K-blocks:
         4
      available:
         4
      capacity:
         0%
      filesystem:
         none
      used:
         0
  /vagrant:
      ----------
      1K-blocks:
         303114632
      available:
         252331440
      capacity:
         17%
      filesystem:
         none
      used:
         50783192

ネットワークインターフェース

Saltは、管理対象システムに関するネットワークインターフェイス情報を照会するために、モジュール内の個別のモジュール、ネットワーク、機能、インターフェイスを提供します。

salt '*' network.interfaces

次の output が生成されます-

minion1:
   ----------
   eth0:
      ----------
      hwaddr:
         08:00:27:04:3e:28
      inet:
         |_
            ----------
            address:
               10.0.2.15
            broadcast:
               10.0.2.255
            label:
               eth0
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe04:3e28
            prefixlen:
               64
            scope:
               link
      up:
         True
   eth1:
      ----------
      hwaddr:
         08:00:27:34:10:52
      inet:
         |_
            ----------
            address:
               192.168.50.11
            broadcast:
               192.168.50.255
            label:
               eth1
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe34:1052
            prefixlen:
               64
            scope:
               link
      up:
         True
   lo:
      ----------
      hwaddr:
         00:00:00:00:00:00
      inet:
         |_
            ----------
            address:
               127.0.0.1
            broadcast:
               None
            label:
               lo
            netmask:
               255.0.0.0
      inet6:
         |_
            ----------
            address:
               ::1
            prefixlen:
               128
            scope:
               host
      up:
         True
minion2:
   ----------
   eth0:
      ----------
      hwaddr:
         08:00:27:04:3e:28
      inet:
         |_
            ----------
            address:
               10.0.2.15
            broadcast:
               10.0.2.255
            label:
               eth0
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe04:3e28
            prefixlen:
               64
            scope:
               link
      up:
         True
   eth1:
      ----------
      hwaddr:
         08:00:27:a7:31:8e
      inet:
         |_
            ----------
            address:
               192.168.50.12
            broadcast:
               192.168.50.255
            label:
               eth1
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fea7:318e
            prefixlen:
               64
            scope:
               link
      up:
         True
   lo:
      ----------
      hwaddr:
         00:00:00:00:00:00
      inet:
         |_
            ----------
            address:
               127.0.0.1
            broadcast:
               None
            label:
               lo
            netmask:
               255.0.0.0
      inet6:
         |_
            ----------
            address:
               ::1
            prefixlen:
               128
            scope:
               host
      up:
         True

sys.doc実行モジュール

ソルト関数は、 sys.doc 実行モジュールに送信できます。 これは、コマンドラインからモジュールの詳細を直接取得するために使用されます。 Salt関数は自己文書化されています。 すべての関数ドキュメントは、下で定義されているsys.doc()関数を介してミニオンから取得できます。

salt '*' sys.doc

関数呼び出しの引数

引数は、関数呼び出しに追加データを提供するために使用されます。 簡単な引数の例を以下に示します。

salt '*' sys.doc pkg.install

ここで、引数 pkg.install は特定のパッケージをインストールするモジュールです。

Python関数

引数は、関数に対するスペース区切りのパラメーターです。 以下に示すように、Pythonコードを引数として渡すことができます。

salt '*' cmd.exec_code python 'import sys;print sys.version'

次の output が生成されます-

minion2:
   2.7.6 (default, Oct 26 2016, 20:30:19)
   [GCC 4.8.4]
minion1:
   2.7.6 (default, Oct 26 2016, 20:30:19)
   [GCC 4.8.4]

同様に、オプションのキーワードと YAML 形式も使用できます。

SaltStack-構成管理

構成管理は、SaltStackで最も重要な概念の1つです。 state と呼ばれる再利用可能な設定テンプレートを作成するために使用されます。 状態は、システムコンポーネントまたはアプリケーションを既知の構成にするために必要なすべてを記述します。

塩の状態

ソルト状態は、システムの特定部分の再利用可能な構成です。 単純なYAMLを使用すると、状態の理解と説明が容易になります。

塩の状態を作成する

塩の状態は簡単に作成できます。 この章で簡単な状態を作成しましょう。 ディレクトリ「salt-vagrant-demo/saltstack/salt/」に移動し、 samples.sls という名前のファイルを作成して、次の行を追加します。

*samples.sls*
install_network_packages:
   pkg.installed:
      - pkgs:
         - rsync
         - lftp
         - curl

次に、ファイルを保存し、Saltマスターで次のコマンドを実行します。

root@saltmaster:/home/vagrant# salt 'minion1’ state.apply samples

ここでは、ソルトミニオン minion1 のソルト状態を使用して、 pkg.installed モジュールを介して rsync、lftp 、および curl をインストールしました。 適切に動作する場合、以下に示すような応答が表示されます。

次の output が生成されます-

minion1:
----------
   ID: install_network_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 08:08:48.612336
   Duration: 545.385 ms
   Changes:

Summary for minion1
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 545.385 ms

塩の状態を適用

「.sls」ファイルを使用して状態を作成し、具体的に呼び出して適用しました。 Saltには、 top.sls ファイルと呼ばれるデフォルトの状態ファイルがあります。 一番上のファイルは、複数の状態ファイルをソルトミニオンに適用するために使用されます。 一番上のファイルには、状態を適用する場所が記述されています。 さて、 StatesTop file は連携して、SaltStackの構成管理機能の中核を作成します。

ディレクトリ saltstack/salt に単純なtop.slsファイルを作成して、以下を追加しましょう。

*top.sls*
base:
  '*':
      - common
   'minion1':
      - samples

ここで、状態*は、一般に*すべてのシステム*状態に*適用サンプル*は *minion1 に適用されます。

次に、Saltマスターを実行し、以下に示すように状態を適用します。

root@saltmaster:/home/vagrant# salt '*' state.apply

次の output が生成されます-

minion1:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:33:35.642355
   Duration: 588.21 ms
   Changes:

Summary for minion1
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 588.210 ms
minion2:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:33:35.890331
   Duration: 602.79 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 602.790 ms

バッチサイズを適用

接続されたミニオンの数が多い場合、一度に更新されるシステムの数を制限できます。 以下で定義される –batch-size オプションを使用して実行されます。

root@saltmaster:/home/vagrant# salt --batch-size 5 '*' state.apply

次の output が生成されます-

Executing run on ['minion2', 'minion1']
jid:
   20170314094638482664
minion1:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:46:41.228519
   Duration: 582.24 ms
   Changes:

Summary for minion1
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 582.240 ms
retcode:
   0
jid:
   20170314094638482664
minion2:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:46:41.153609
   Duration: 605.235 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 605.235 ms
retcode:
   0

塩状態関数

ソルトステート関数は、リモートシステムにアプリケーションをインストールおよび構成するために使用されます。 Salt状態関数を使用して「Vim」パッケージをインストールしましょう。

状態関数の作成と適用

ディレクトリ「salt-vagrant-demo/saltstack/salt/sample.sls」の下に「sample.sls」という名前のファイルを作成し、以下を追加します-

*sample.sls*
install vim:
   pkg.installed:
      - name: vim

Vagrant環境が起動したら、ソルトマスターを実行し、次のコマンドを実行してsample.slsを適用します。

root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample

次の output が生成されます-

minion2:
----------
   ID: install vim
   Function: pkg.installed
   Name: vim
   Result: True
   Comment: Package vim is installed
   Started: 15:07:45.752764
   Duration: 553.506 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 553.506 ms

これで、パッケージ「Vim」が追加されました。 ここで、ソルトテストメソッドを使用してパッケージをテストします。

塩状態試験

テストの実行は、状態に「test = True」オプションを追加することで義務付けられています。 返される情報には、適用される状態が黄色で表示され、結果は「なし」として報告されます。

次のコマンドは、状態をテストするために使用されます-

root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample test = True

次の output が生成されます-

minion2:
----------
   ID: install vim
   Function: pkg.installed
   Name: vim
   Result: True
   Comment: Package vim is already installed
   Started: 15:07:45.752764
   Duration: 553.506 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 553.506 ms

SaltStack─柱コンポーネント

柱は、塩の状態を再利用可能にするために不可欠な要素です。 ターゲットを使用して割り当てられた手先の安全なデータを定義するために使用されます。 塩柱データには、ポート、ファイルパス、構成パラメーター、パスワードなどの値が格納されます。

柱構成ファイル

マスター設定ファイル内の pillar_roots の設定は以下に示されています-

pillar_roots:
   base:
      -/srv/pillar

ここでは、ファイルは「/srv/pillar」ディレクトリにあります。

/srv/pillar/top.slsにある最上位ファイルの構造は次のとおりです-

base:
   '*':
      - default

ここで、/srv/pillar/default.slsにあるdefault.slsファイルに移動し、次のコードを追加します。

# Default pillar values
apache
git

ファイルを保存したら、柱を更新してすべての変更を更新します。

柱の更新

次のコマンドを使用して、ピラーを更新できます。

root@saltmaster:/home/vagrant# salt '*' saltutil.refresh_pillar

上記のコマンドは、すべてのミニオンのソルトピラーデータを更新するために使用されます。

柱データのリスト

柱データをリストするには、以下のコマンドを使用できます。

root@saltmaster:/home/vagrant# salt '*' pillar.ls

次の output が生成されます-

minion2:
   - apache
   - git
minion1:
   - apache
   - git

柱アイテム

柱が設定されると、柱モジュールを介してミニオンでデータを表示できます。 以下に定義されている関数 pillar.items からアクセスできます。

root@saltmaster:/home/vagrant# salt '*' pillar.items

次の output が生成されます-

minion2:
   ----------
   apache:
      httpd
   git:
      git
minion1:
   ----------
   apache:
      httpd
   git:
      git

SaltStack –コンポーネントを含める

「含める」コンポーネントは、複数の場所で同じ構成タスクを定義するために使用されます。 簡単に実行できます。 状態ファイルの上部に、次の形式を使用してインクルードを追加します-

include:
   - state file 1
   - state file 2

ここで、状態ファイル1 *および*状態ファイル2 *は、含めるSLSファイルの名前です。 *.sls 拡張子を含める必要はありません。 含まれるソルト状態は、現在のファイルの上部に挿入されます。

サブディレクトリ内の状態ファイル

ドット(。)を使用して、サブディレクトリ状態ファイルを含めることができます。 これはディレクトリセパレータとして機能します。

include:
   - dir.sls1

穀物インターフェース

Grainsは、基になるシステムに関する情報を取得するために使用されるインターフェイスです。 オペレーティングシステム、ドメイン名、IPアドレス、カーネル、OSタイプ、メモリ、およびその他の多くのシステムプロパティのグレインが収集されます。

穀物ターゲティング

粒子データは、次のコードブロックで定義されているミニオンをターゲットにするときに使用できます。

root@saltmaster:/home/vagrant# salt -G 'os:Ubuntu' test.ping

次の output が生成されます-

minion1:
   True
minion2:
   True

穀物のリスト

穀物は、以下に定義されている「grains.ls」モジュールを使用してリストできます。

root@saltmaster:/home/vagrant# salt '*' grains.ls

リストアイテム

Pillarと同様に、穀物データは「grains.items」を使用してリストすることもできます。

root@saltmaster:/home/vagrant# salt '*' grains.items

SaltStack-ロギング

ロギングは、実行中のソフトウェアイベントを追跡するために使用されます。 イベントは説明メッセージで記述され、オプションで変数データを含めることができます。 あなたが直面するかもしれない問題を取得するために、塩のロギングアプローチが使用されます。 特定のログレベルでチェックアウトできます。

構成設定

ロギングのさまざまな構成設定を詳細に理解しましょう。

LOG_FILE

ソルトログレコードは、ローカルパス名または識別のためのネットワークの場所を含むファイルを介して渡されます。 このファイルはログファイルと見なされます。

log_file:/var/log/salt/master

ここでは、マスターで実行されているバイナリに依存するファイル。 同様に、下に示すミニオンでも実行できます。

log_file:/var/log/salt/minion

リモートアドレスを使用することもできます。 リモートアドレスを使用するための構文は、-<file | udp | tcp>://<host | socketpath>:<port-if-required>/<log-facility>です。

log_file: udp://loghost:port

ここでは、Log-facilityのデフォルトはLOG_USERです。

LOG_LEVEL

ログレベルは、数値で割り当てられた値で並べられます。 Pythonライブラリは、デフォルトでほとんどのログレベルを定義しています。 それに加えて、Saltはさらにいくつかのレベルを使用します。 いくつかのレベルについて以下で説明します。

  • log_level:エラー;レベル値は40 です-エラー時のログステートメントレコードを示します。
  • log_level:quiet;レベル値は1000 です-このレベルでは何もログに記録されないことを示します。
  • log_level:info;レベル値は20 です-通常のログ情報を示します。
  • log_level:警告;レベル値は30 です-警告時のログステートメントレコードを示します。
  • log_level:debug;レベル値は10 -salt実装とsaltコードの両方のデバッグに役立つ情報。
  • log_level:trace;レベル値は5 -より詳細なコードデバッグ情報。

LOG_LEVEL_LOGFILE

ログファイルに送信するメッセージのレベルを定義します。

log_level_logfile: info

LOG_DATEFMT

ログの日付形式を定義します。 デフォルトでは、&percnt; Y-&percnt; m-&percnt; d&percnt; H:&percnt; M:&percnt; Sとして表されます。

log_datefmt_logfile: '&percnt;Y-&percnt;m-&percnt;d &percnt;H:&percnt;M:&percnt;S'

LOG_FMT_CONSOLE

メッセージを記録するコンソールの形式を定義します。 Saltは、カスタム LogRecord 属性を使用して、コンソールログ出力を色付けします。 それは次の構文に従います-

'%(colorlevel)s'       # log level name colorized by level
'%(colorname)s'        # colorized module name
'%(colorprocess)s'     # colorized process number
'%(colormsg)s'         # colorized messages name

LOG_FMT_LOGFILE

メッセージを記録するログファイルの形式を定義します。 基本的な構文は次のとおりです-

%(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s

LOG_GRANULAR_LEVELS

このレベルは、ロギングレベルをより具体的に制御するために使用されます。

log_granular_levels:
   'salt': 'info'
   'salt.modules': ‘trace'

ここでは、「情報」レベルのメインソルトライブラリが salt.modules を設定して、トレースレベルでログを記録します。

外部ログハンドラー

Saltは、LogStashおよびSentryの外部ログハンドラーを使用してログを記録します。 この章で詳しく説明します。

LOGSTASHハンドラー

LogStashはオープンソースです。サーバー側の安全なデータ処理パイプライン。 LogStashを使用するSaltのシンプルなUDPロギングハンドラーを考えてみましょう。

ソルトマスターファイルで次の変更を指定します-

logstash_udp_handler:
   host: 127.0.0.1
   port: 9999
   version: 1
   msg_type: logstash

次に、Logstash構成ファイルに変更を追加します-

input {
   udp {
      port ⇒ 9999
      codec ⇒ json
   }
}

ここで、 UDP は、 json_event の形式を持つ必要がある入力です。これは、ネットワーク経由で送信するものです。

SENTRYロギングハンドラー

Sentryは、実稼働環境でのリアルタイムのエラー追跡とクラッシュを再現および修正するための情報です。 マスターファイルのデフォルト設定は以下で定義されます。

sentry_handler:
   dsn: https://pub-key:[email protected]/app-id
   log_level: debug

ここでは、SentryハンドラーのデフォルトのロギングレベルはERRORですが、sentry_handler構成キーの下にdebug log_level を定義しました。

SaltStack-SSHを介したソルト

Saltは、 salt-minion を使用して、リモートシステムでコマンドを実行します。 これは通常の動作です。 一部のシナリオでは、リモートシステムはSSHプロトコルによってのみアクセスできます。 これらのシナリオでは、SaltはSSHプロトコルのみを使用してリモートシステムに接続し、SSHレイヤーを介してコマンドを実行するオプションを提供します。

*Salt SSH* は非常に簡単に設定できます。 唯一必要な設定は、* Rosterファイル*と呼ばれる特別なファイルでリモートシステムの詳細を指定することです。 この名簿ファイルは、通常 */etc/salt/roster* にあります。 名簿ファイルには、リモートシステムとその接続方法に関するすべての情報が含まれます。 名簿ファイルが設定されると、saltコマンドの代わりに *salt-ssh* を使用してすべてのSaltコマンドが実行されます。

名簿ファイル

Roster Systemは、Salt SSH専用に設計されています。 これはプラグ可能なシステムとして設計されています。 名簿システムの唯一の目的は、リモートシステムに関する情報を収集することです。 名簿ファイルは、ターゲット*としてリモートシステム情報を含む YAMLベースの設定ファイル*です。 これらのターゲットは、定義済みの属性セットを持つ特別なデータ構造です。 名簿ファイルには1つ以上のターゲットが含まれ、各ターゲットは Salt ID によって識別されます。

名簿ファイルの基本構造は次のとおりです-

<Salt ID>:
   host: <host name>
   user: <user name>
   passwd: <password of the user>

名簿ファイルでサポートされている他のすべての属性はオプションです。 彼らは次のとおりです-

  • port -SSHポート番号。
  • sudo -sudoを介してコマンドを実行するかどうか。
  • sudo_user -sudoユーザー名。
  • tty -sudoが有効な場合はtrue。
  • priv -秘密鍵。
  • timeout -SSH接続のタイムアウト。
  • minion_opts -ミニオンオプションの辞書。
  • thin_dir -saltコンポーネントのターゲットシステムのストレージディレクトリ。
  • cmd_umask -salt-callコマンドを強制するumask。

サンプル名簿ファイルは次のとおりです-

web:
   host: 192.168.2.1
   user: webuser
   passwd: secret
   sudo: True
db:
   host: 192.168.2.2

SSHキーを展開する

Salt SSHは、SSHログイン用のデフォルトの公開/秘密キーペアを生成します。 デフォルトのパスは/etc/salt/pki/master/ssh/salt-ssh.rsaです。 このキーは、次に示すように ssh-copy-id コマンドを使用してリモートシステムに展開できます。

ssh-copy-id -i/etc/salt/pki/master/ssh/salt-ssh.rsa.pub [email protected]

コマンド実行

以下に示すように、saltコマンドの実行は、 salt cli コマンドを salt-ssh に変更するのと同じくらい簡単です。

salt-ssh '*' test.ping

生のシェルコマンド

Salt SSHは、saltモジュールと機能をバイパスして、リモートシステムでrawコマンドを実行するオプション(-r)を提供します。

salt-ssh '*' -r 'ls'

Salt SSHを使用したターゲティング

Salt SSHでのリモートシステムのターゲットは、globおよびregexターゲットのみをサポートします。 Salt SSHは別のモジュールであるため、現在のところ限られたオプションのみを提供し、近い将来、より多くの機能を提供します。

SaltStack-クラウドインフラストラクチャ用の塩

Saltは、Amazon AWS、Google Computeなどのさまざまなクラウドプロバイダーの仮想マシンを提供するための個別のモジュール Salt Cloud を提供します。 Salt Cloudは、さまざまなクラウドプロバイダーのVMを構成および管理するための汎用インターフェイスです。

  • クラウド構成-Salt Cloudのメイン構成ファイルは/etc/salt/cloudであり、すべてのVMに適用されます。 メインの構成ファイルは Cloud Config と呼ばれます。
  • クラウドプロバイダー-特定のクラウドプロバイダーをターゲットとするために、特定の構成ファイルを使用できます。これらのファイルは/etc/salt/cloud.providers.d/*.confにあり、これらは*クラウドプロバイダー*と呼ばれます。
  • クラウドプロファイル-特定のVMをターゲットにするために、特別な構成ファイルを使用することもできます。これはその特定のVMにのみ適用され、/etc/salt/cloud.profiles.d/*。confにあり、これらは呼ばれます*クラウドプロファイル*として。

仮想マシンの場合、 Cloud Config の設定が最初に適用され、次に Cloud Providers の設定が適用され、最後に Cloud Profiles によって上書きされます。

Salt Cloudのインストール

デフォルトでは、Salt CloudはSaltに組み込まれており、すぐに使用できます。 利用できない場合は、以下のコマンドを使用してインストールできます。

pip install salt-cloud

Salt Cloudは独立したモジュールであり、独自のプロセスで実行されるため、Salt Masterの代わりにSalt Minionシステムにもインストールできます。

仮想マシンのプロビジョニング

仮想マシンをプロビジョニングするには、クラウドプロバイダーとクラウドプロファイルを定義する必要があります。 両方が作成されたら、それを使用するための新しい仮想マシンをプロビジョニングできます。

クラウドプロバイダー

クラウドホスト情報は、クラウドプロバイダー構成ファイルで構成されます。 通常、設定する必要がある基本情報は、クラウドドライバー、ユーザー名、パスワード、秘密キーなどです。 my-amazon-cloud という名前の新しいクラウドプロバイダーを作成しましょう。

/etc/salt/cloud.providers.d/の下にファイルmy-amazon-cloud.confを作成します * *ec2 ドライバーを使用して新しいプロバイダーを追加します。

my-amazon-cloud:
   driver: ec2
   id: '<AWS_ID>'
   key: '<AWS_KEY>'
   private_key:/path/to/privatekey.pem
   keyname: <name of the key>
   securitygroup: default

   minion:
      master: <master server>

Saltは、GoGrid、HP Cloud、Google Compute Engine(GCE)、Amazon AWS、Joyent、Linode、OpenNebula、ProfitBricks、Proxmox、Saltify、VexxHost、VMWareなど、さまざまなクラウドホスト用のドライバーを提供します。

クラウドプロバイダーを構成したら、プロバイダーの利用可能な場所、利用可能なマシンイメージ、およびそのさまざまなサイズを照会できます。

salt-cloud --list-location my-amazon-cloud
salt-cloud --list-images my-amazon-cloud
salt-cloud --list-sizes my-amazon-cloud

クラウドプロファイル

クラウドプロファイルは、仮想マシンのイメージとサイズを指定します。 –/etc/salt/cloud.profiles.d/の下で構成できます。 単純なプロファイル simple.conf を作成しましょう。

aws_micro:
   provider: my-amazon-cloud
   image: <image_id>
   size: <machine_id e.g. t1.micro>

仮想マシン

プロバイダーとプロファイルを構成したら、以下に示すように、salt-cloudを使用して仮想マシンを簡単に提供できます。

salt-cloud -p aws_micro master minion1 minion2

ここで、 p –プロファイル名master、minion1およびminion2は新しい仮想マシンです。

新しく作成された仮想マシンの詳細は、次のコマンドを使用して取得できます。

salt-cloud --query

仮想マシンは、次のコマンドを使用して破棄することができます-

slat-cloud -d master minion1

クラウドマップ

クラウドマップは、複数の仮想マシンを一度に作成するための特別な形式です。 マップファイルの形式は、プロファイルを指定し、その下に仮想マシンのリストを追加することです。

サンプルマップファイルは次のとおりです-

micro:
   - web1
   - web2
large:
   - db1
   - db2

マップファイルは、次のように仮想マシンを作成するsalt-cloudコマンドの引数として渡すことができます-

salt-cloud -m/path/to/mapfile

SaltStack-ソルトプロキシミニオン

ルーター、ネットワーク機器など、カスタムOS、限られたメモリ、高度なセキュリティを考慮したデバイスがたくさんあります。 これらのデバイスでは、標準の salt-minion をインストールできず、その後これらのシステムを管理できませんでした。 ただし、Saltはこの制約を克服するための革新的な技術を提供します。

Saltには、リモートシステムで実行されているRESTサービスを使用してリモートシステムを制御する別のモジュール、ソルトプロキシミニオンがあります。 このRESTサービスは、* Representational State Transfer(REST)*の概念を使用して記述されたHTTPベースのWebサービスであり、実装も消費も簡単です。

すべてのデバイスには、複雑なアプリケーションを作成するための独自のSDKと開発環境があります。 Saltは、Saltインターフェイス仕様に従ってデバイスでRESTサービスが開発されることを期待しています。 また、SaltはREST Webサービスを作成するためのpythonモジュールも提供します。 デバイスがpythonをサポートしている場合、REST Webサービスを簡単に開発できます。

REST Webサービスが開発されてリモートシステムに展開されると、Saltは、Salt Minionの代わりにREST Webサービスを使用してリモートデバイスを制御するように構成できます。

実施例

ライブ作業環境を使用して*ソルトプロキシミニオン*の概念を学習しましょう。 ライブ環境では、マスターミニオンとプロキシミニオンの両方にLinuxシステムを選択しました。 ソルトミニオンの代わりにREST Webサービスを使用してシステムを制御します。

REST Webサービスのインストールと構成

Saltは、contribモジュールでproxyminion_rest_exampleと名付けられたREST Webサービス実装のサンプルを提供します。 サンプルWebサービスをインストールしましょう。

  • pipを使用して*「ボトル」をインストールします。 *bottle コマンドは、Webアプリケーションを開発するためのPython Webフレームワークです。
pip install bottle = 0.12.8
  • githubから saltstack/salt-contrib プロジェクトをダウンロードします。 それ以外の場合は、次のコマンドを使用してプロジェクトを複製します。
git clone https://github.com/saltstack/salt-contrib
  • ターミナルを開き、 salt-contrib ディレクトリに移動します。
  • このsalt-contribディレクトリには、 proxyminion_rest_example というフォルダーがあります。 このフォルダーには、REST Webサービスのサンプル実装が含まれています。 proxyminion_rest_exampleフォルダーに移動します。
  • 次のコマンドを実行して、REST Webサービスを開始します。
python rest.py --address <your ip address> --port 8000
  • ブラウザーを開き、http://«IPアドレス»:8000をロードします。 これにより、以下のスクリーンショットに示すように、サービスとパッケージを含むデフォルトページが表示されます。

REST Webサービス

これで、REST Webサービスを構成しました。RESTWebサービスを照会してシステムを制御するようにソルトプロキシを構成する方法を確認します。

ソルトプロキシを構成する

Salt-Proxyを設定するには、以下の手順に従う必要があります。

  • salt-proxyのマスターノードを指定する必要があります。/etc/salt/proxyにあるプロキシ構成ファイルの場所を編集し、次のコードを入力します。
master: <your ip address>
  • 次のコードブロックに示すように、 /srv/pillar/top.sls にベースピラーファイルを変更/作成します。
base:
  'p8000':
      - p8000
  • 以下のコードブロックに示すように、 /srv/pillar に新しいピラーファイル p8000.sls を追加します。
proxy:
   proxytype: rest_sample
   url: http://<your ip address>:8000
  • 次のコマンドを使用して、デバッグモードでsalt-proxyを起動します。
salt-proxy --proxyid = p8000 -l debug
  • salt-minionと同様に、以下に示すように salt-proxy key を受け入れます。
salt-key -y -a p8000

The following keys are going to be accepted:
Unaccepted Keys:
p8000
Key for minion p8000 accepted.

ソルトの実行

次に、 salt コマンドを実行し、以下に示すように ping.test 関数を呼び出します。

salt p8000 test.ping
*salt* を使用して、REST Webサービスでサポートされている任意の機能を実行できます。これは *salt-minion* に似ています。

たとえば、次のコマンドを使用してグレイン情報を取得できます。

salt p8000 grains.items

SaltStack-イベントシステム

SaltのイベントシステムはローカルのZeroMQ PUBインターフェイスであり、saltイベントを起動します。 次のコンポーネントによって実行されます。

  • イベントソケット-イベントを発行するために使用されます。
  • イベントライブラリ-イベントをリッスンし、イベントをソルトシステムに送信するために使用されます。

ソルトマスターイベント

ソルトマスターはさまざまなタイプのイベントを提供します。これらについては以下で詳しく説明します-

  • 認証イベント
  • 開始イベント
  • 重要な出来事
  • ジョブイベント
  • ランナーイベント
  • プレゼンスイベント *クラウドイベント

各イベントタイプについて詳しく見ていきましょう。

認証イベント

これらの認証イベントは、ミニオンがマスターとの認証チェックを実行するときに発生します。 salt/authで表されます。

開始イベント

開始イベントは、ミニオンがソルトマスターに接続し、salt/minion//startで表されるたびに発生します。

重要な出来事

ソルトマスターがソルトミニオンのキーを受け入れ、拒否すると、キーイベントが発生します。 salt-keyコマンドを使用して、このイベントにアクセスできます。

ジョブイベント

ジョブイベントは、新しいジョブが開始されるたびに発生します。* salt/job//new *で表されます。 ここで、JID-ジョブID新規-新規ジョブ

ランナーイベント

ランナーが実行を開始すると、ランナーイベントが発生します。 salt/run//newで表されます。

プレゼンスイベント

ミニオンが接続されるか、新しく接続または切断されると、このイベントは定期的に発生します。 - salt/presence/present および salt/presence/change で表されます。 ここに、

  • 現在-ソルトマスターが現在ミニオンリストに接続されていることを意味します。
  • 変更-新しいミニオンの検出に使用-接続または切断。

クラウドイベント

salt-cloudイベントは、仮想マシンで発生します。 他のイベントがない限り、ミニオンでは実行されません。 - salt/cloud//creating を使用してアクセスできます。 Saltクラウドが仮想マシン実行プロセスを開始すると起動します。

イベントツール

次に、イベントツールとスクリプトを見ていきましょう。 CLIを使用してイベントバスにアクセスできます。 次のコマンドでアクセスします。

salt-run state.event pretty = True

ここでは、ランナーは外部ツールおよびシェルスクリプトからイベントバスと対話するように設計されています。 Saltのイベントバスには、 REST API を介してリモートでアクセスできます。 –(サンプルURL)で表されます。

curl -SsNk https://salt-api.example.com:8000/events?token = 05A3.

同様に、Pythonスクリプトからイベントにアクセスすることもできます。

SaltStack-オーケストレーション

一般に、*オーケストレーション*は、システムの自動調整および配置です。 Orchestrateランナーは、SaltStackでオーケストレーションを実行するために使用されます。

オーケストラランナー

Orchestrate Runnerは、 OverState (以前のシステム)のすべての機能を提供します。 元は state.sls ランナーと呼ばれます。 このオーケストレートランナーは、ソルト状態システムをソルトマスターコンテキストに一般化するために使用されます。

*state.sls* および *state.highstate* 関数は各Saltミニオンで実行されますが、 *state.orchestrate* ランナーはマスターで実行されます。 *state.orchestrate* ランナーを使用すると、インフラストラクチャ全体を状態として完全に管理できます。 簡単な実行プロセスを実行する方法を理解しましょう。

簡単な実行

Orchestrate Runnerコマンドは state.sls 関数と同じですが、saltの代わりに「salt-run」を使用して実行できます。

*/srv/salt/orch/samples.sls* にある *sample.sls* ファイルがあると仮定します。 そのファイルに次のコードを追加します。
*sample.sls*
install_nginx:
   salt.state:
      - tgt: 'web*'
      - sls:
         - nginx

次のコマンドは、マスターで実行するために使用され、そのファイルで定義された状態を適用します。

salt-run state.orchestrate orch.sample

次の output が生成されます-

saltmaster.local_master:
----------
   ID: install_nginx
   Function: salt.state
   Result: True
   Comment: States ran successfully.
   Started: 11:54:56.308078
   Duration: 63.401 ms
   Changes:

Summary for saltmaster.local_master
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time:  63.401 ms
root@saltmaster:/home/vagrant#

ここで、現在のバージョンによると、ランナー関数は state.orchestrate に名前が変更されました。 これは、state.sls実行関数との混乱を避けるために役立ちますが、 state.sls の以前のバージョンを使用する必要があります。

関数を実行する

関数を実行するには、 salt.function を使用する必要があります。 /srv/salt/orch/data.sls にある data.sls ファイルについて考えます。 次に、そのファイルに次の変更を追加します。

*data.sls*
cmd.run:
   salt.function:
      - tgt: '*'
      - arg:
         - rm -rf/tmp/data

次のコマンドを使用して、Salt関数を実行します。

root@saltmaster:/home/vagrant# salt-run state.orchestrate orch.data

次の output が生成されます-

saltmaster.local_master:
----------
   ID: cmd.run
   Function: salt.function
   Result: True
   Comment: Function ran successfully. Function cmd.run ran on minion1, minion2.
   Started: 12:14:54.791635
   Duration: 234.615 ms
   Changes:
      minion1:

      minion2:
Summary for saltmaster.local_master
------------
Succeeded: 1 (changed = 1)
Failed:    0
------------
Total states run:     1
Total run time: 234.615 ms

SaltStack-ソルトパッケージマネージャー

ソルトフォーミュラはパッケージされ、パッケージマネージャーを使用してソルトマスターに配布されます。 このコンセプトは、 RPMYum および Pacman パッケージングシステムの影響を受けました。 塩の状態、柱、ファイルテンプレート、およびその他のファイルは、式で使用され、単一のファイルにパッケージ化されます。

数式パッケージが作成されると、それがリポジトリシステムにコピーされ、ソルトマスターで使用できるようになります。 パッケージマネージャーに移行する前に、Salt basicコマンドを使用して「nginx」パッケージをインストールする方法を見てみましょう。

「nginx」パッケージのインストールには、次の構文が使用されます。

root@saltmaster:/home/vagrant# salt '*' pkg.install nginx

ここでは、 pkg.install nginx コマンドを使用してパッケージをインストールします。 実行後、次の応答が表示されます。

次の output が生成されます-

minion2:
   ----------
   httpd:
      ----------
      new:
         1
      old:
   httpd-cgi:
      ----------
      new:
         1
      old:
   libxslt1.1:
      ----------
      new:
         1.1.28-2build1
      old:
   nginx:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-common:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-core:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
minion1:
   ----------
   httpd:
      ----------
      new:
         1
      old:
   httpd-cgi:
      ----------
      new:
         1
      old:
   libxslt1.1:
      ----------
      new:
         1.1.28-2build1
      old:
   nginx:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-common:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-core:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:

これで、パッケージがインストールされました。 そのパッケージのサービスを開始するには、以下のコマンドを使用します。

root@saltmaster:/home/vagrant# salt '*' service.start nginx

このコマンドを実行すると、結果は次のコードブロックに示すようになります。

minion1:
   True
minion2:
   True

したがって、基本的なコマンドを使用して、「nginx」パッケージのサービスをインストールして開始しました。 ここで、Saltパッケージマネージャーでパッケージをビルドおよびインストールする方法について説明します。

パッケージの構築

パッケージは、Saltをインストールできる任意のシステムで構築できます。 パッケージには3つのタイプがあり、それらは次のとおりです。

  • 原子炉

  • Conf

    *Fomula* ファイルを使用してパッケージをビルドする方法を理解しましょう。

数式ファイル

パッケージのほとんどのファイルは、デフォルトで–/srv/spm/salt/ディレクトリにありますが、ピラーファイルは–/srv/spm/pillar/ディレクトリに配置できます。 フォーミュラファイルにはパッケージが記述されています。

name: apache
os: RedHat
os_family: RedHat
version: 201607
release: 2
summary: Formula for installing Apache
description: Formula for installing Apache

ここに、

  • 名前-パッケージの名前。 ここでは、パッケージ名は apache です。
  • os -このパッケージをサポートできるオペレーティングシステムを知るために使用されます。
  • os_family -どのオペレーティングシステムファミリがこのパッケージをサポートできるかを知るために使用されます。
  • バージョン-パッケージのバージョン。 YYYYMM形式で指定されます。
  • リリース-このフィールドは、主にバージョンのリリースを指します。
  • 概要-パッケージの短い説明。
  • 説明-パッケージの詳細な説明。

原子炉

リアクタファイルは /srv/spm/reactor/ ディレクトリにあります。

CONF

このタイプのパッケージ内のファイルは、通常 /etc/salt/ ディレクトリーにあるSaltの構成ファイルです。 Salt以外のパッケージの構成ファイルは、ソルト状態で処理できます(式タイプのパッケージを使用)。

パッケージをビルドするには、次の手順に進みましょう。

  • FORMULAファイルを作成し、パッケージフォルダーのルートに配置します。
  • ビルドシステム上のフォルダーで数式ファイルを組み立てます。
  • spm build を実行します。 パッケージがビルドされ、/srv/spm_buildフォルダーに配置されます。 次のコマンドは、パッケージをビルドするために使用されます。
spm build/path/to/salt-packages-source/formula
  • 次に、*。spm *ファイルをリポジトリシステムのフォルダーにコピーします。
  • ネットワーク上の srv/spm_build フォルダーを共有するか、ファイルをFTPまたはWebサーバーにコピーできます。
  • 次のコマンドを使用してリポジトリメタデータを生成します。
spm create_repo/srv/spm_build

パッケージのインストール

このセクションでは、Saltパッケージマネージャーパッケージのインストールについて説明します。

リモートリポジトリを構成する

リモートリポジトリを設定するには、Salt Masterは設定プロセスでリポジトリの場所を知る必要があります。

ファイルは /etc/salt/spm.repos.d/spm.repo ディレクトリにあります。

file_repository:
   url: https://spm.example.com/

このファイルには、リポジトリの名前とリポジトリへのリンクが含まれています。 http、https、ftp、またはファイルパスを使用することもできます。 ファイルパスを使用するには、file:///srv/spm_buildのURLを使用してアクセスできます。

メタデータを更新

Saltマスタでリポジトリが設定された後、以下のコマンドを使用してリポジトリメタデータがダウンロードされます。

spm update_repo

ファイルルートの更新

SPMパッケージはsrv/spm/saltディレクトリにあります。 Saltマスターのファイルルートに次のパスを追加します。

file_roots:
   base:
      1./srv/salt
      2./srv/spm/salt

次に、ソルトマスターを再起動します。

Apacheパッケージをインストールする

パッケージapacheをインストールするには、次のコマンドを使用します。

spm install apache

以下のコマンドを使用して、SPMファイルから直接インストールすることもできます。

spm local install/srv/spm/apache-201607-1.spm

パッケージの削除

たとえば、apacheのパッケージを削除するには、次のコマンドを使用します。

spm remove apache

ファイルが変更されている場合、それらは削除されないことに注意してください。

SaltStack-Python API

Saltは、すべてのコマンドへのプログラムによるアクセスを提供します。 Saltは、Saltシステムのすべてのセクションに異なるモジュールを提供します。 この章では、Python APIの基本と、基本的なsaltコマンドの実行方法について学びましょう。

設定

*salt.config* モジュールは、Salt構成の詳細にアクセスするために使用されます。
import salt.config
opts = salt.config.client_config('/etc/salt/master')

ここでは、 client_config はsalt構成ファイルを読み取り、構成の詳細を辞書として返します。

ローダ

*salt.loader* モジュールは、グレイン、ミニオンなど、Saltの各モジュールをロードするために使用されます。
import salt.loader
opts = salt.config.minion_config('/etc/salt/minion')
grains = salt.loader.grains(opts)

ここで、 grains は、Saltシステムの穀物の詳細を読み取り、それを返します。

クライアントモジュール

*salt.client* モジュールは、salt、salt-call、およびsalt-SSHコマンドをプログラムで実行するために使用されます。

最も重要なPythonクラスは次のとおりです-

  • salt.client.LocalClient
  • salt.client.Caller
  • salt.client.ssh.client.SSHClient

ほとんどのクライアントモジュールで提供される主な機能は cmd です。 この関数はCLIオプションをラップして実行します。これはコマンドラインに似ており、結果をpythonデータ構造として返します。

LocalClient

LocalClientは、マスターからソルトミニオンにコマンドを送信し、結果をマスターに返すために使用されます。

import salt.client

local = salt.client.LocalClient()
local.cmd('*', 'test.ping')

次の output が生成されます-

{'minion1': True, 'minion2': True }

発信者

Callerは、 salt-call をプログラムで実行し、結果を返すために使用されます。

import salt.client
caller = salt.client.Caller()
caller.cmd('test.ping')

次の output が生成されます-

True

SSHClient

SSHCientは、 salt-ssh をプログラムで実行し、結果を返すために使用されます。

import salt.client.ssh.client
ssh = salt.client.ssh.client.SSHClient()
ssh.cmd('*', 'test.ping')

次の output が生成されます-

{'minion1': True, 'minion2': True }

CloudClient

salt.cloudモジュールは、プログラムでsalt-cloudコマンドを実行するために使用されます。

client = salt.cloud.CloudClient(path = '/etc/salt/cloud')

クラウドモジュールは、VMの作成(作成)、VMの破棄(破棄)、クラウドプロバイダーが提供するイメージの一覧表示(list_images)、クラウドプロバイダーの場所の一覧表示(list_locations)、クラウドプロバイダーのマシンサイズの一覧表示(list_sizes)、等

SaltStack-作業例

この実際の例では、PHPソフトウェアとともにApache Webサーバーを構成するSalt式を作成します。 Saltはアドホックコマンドを実行するための優れた方法ですが、このようにインフラストラクチャを継続的に構成することは望ましくありません。 ソルト式のセットを作成することにより、設定を確実に再現できます。

ソルトフォーミュラは単純なYAMLテキストファイルであり、デフォルトではソルトマスターの /srv/salt/ *に存在します。 Apache WebサーバーとPHPを同時にインストールするSalt Formulaを作成することから始めましょう。

*/srv/salt/* ディレクトリの下に「websetup.sls」という名前のファイルを作成し、次のコードを追加します。

websetup.sls

websetup:
   pkg:
      - installed
      - pkgs:
         - apache2
         - php5
         - php5-mysql

この例では、「-pkgs:」引数に注意してください。 「-pkgs:」の下のリストの各アイテムは、一緒にインストールされるOSのパッケージマネージャーに渡されます。 インストールするパッケージのリストが大きい場合は常に、これが最も効率的なインストール方法です。

次のコマンドを使用して、この式をソルトマスターに適用します。

root@saltmaster:/home/vagrant# salt 'minion2' state.sls websetup

今、あなたは次の*出力*が表示されます-

minion2:
----------
   ID: websetup
   Function: pkg.installed
   Result: True
   Comment: 3 targeted packages were installed/updated.
   Started: 01:50:53.978396
   Duration: 86738.132 ms
   Changes:
      ----------
         apache2:
            ----------
            new:
               2.4.7-1ubuntu4.13
            old:
         apache2-api-20120211:
            ----------
            new:
               1
            old:
         apache2-bin:
            ----------
            new:
               2.4.7-1ubuntu4.13
            old:
         apache2-data:
            ----------
            new:
               2.4.7-1ubuntu4.13
            old:
         libapache2-mod-php5:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         libapr1:
            ----------
            new:
               1.5.0-1
            old:
         libaprutil1:
            ----------
            new:
               1.5.3-1
            old:
         libaprutil1-dbd-sqlite3:
            ----------
            new:
               1.5.3-1
            old:
         libaprutil1-ldap:
            ----------
            new:
               1.5.3-1
            old:
         php5:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-cli:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-common:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-json:
            ----------
            new:
               1.3.2-2build1
            old:
         php5-mhash:
            ----------
            new:
               1
            old:
         php5-mysql:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-readline:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         phpapi-20121212:
            ----------
            new:
               1
            old:
         ssl-cert:
            ----------
            new:
               1.0.33
            old:
Summary for minion2
------------
Succeeded: 1 (changed = 1)
Failed:    0
------------
Total states run:     1
Total run time:  86.738 s

これで、 minion2 にパッケージがインストールされました。

ハイステート

「ハイステート」とは、Saltが特定のミニオンに適用する塩の式を決定する方法です。 次のコマンドを使用して「highstate」を実行します。

root@saltmaster:/home/vagrant# salt <targets> state.highstate

top.sls

前述のように、ミニオンがhighstateの実行を要求すると、ミニオンはソルトマスターにtop.slsを要求し、一致する式を検索します。 デフォルトでは、このファイルは/srv/salt/top.slsにあります。 top.slsファイルに式を追加し、minion2をターゲットとして設定しましょう。

base:
   '*':
      - common
   'minion2’:
      - websetup

次に、以下に示すようにminion2をターゲットとする highstate を実行します。

root@saltmaster:/home/vagrant# salt 'minion2' state.highstate

これを適用すると、次の output が表示されます-

minion2:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 01:55:17.998824
   Duration: 461.615 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 461.615 ms

これで、Apache WebサーバーとPHPがminion2にインストールされました。 このように、 top.slshighstate の両方を使用してミニオンをターゲットにし、最小限の作業と最大限の柔軟性で必要なソフトウェアをインストールする必要があります。