SaltStackは、インフラ構成管理およびリモート実行を行うための強力なツールです。本記事では、基本的な環境構築から、高度な設定管理、および実用的なサービス運用例までを解説します。
1. SaltStackのアーキテクチャ
SaltStackは主に以下の3つの実行モードで動作します。
- Local: 設定ファイルのみを使用し、マスターなしで実行。
- Master/Minion: 中央管理サーバー(Master)から各ノード(Minion)を制御。
- Salt SSH: エージェントレスでSSH経由の実行。
2. 環境構築と認証
Master(192.168.3.12)とMinion(192.168.3.19)を導入し、通信を確立します。
# マスター側での承認
salt-key -a node2.chinasoft.com
通信確認には test.ping モジュールを使用します。
# 全ノードの疎通確認
salt '*' test.ping
3. 設定管理(State System)
SLSファイルを用いてシステム状態を定義します。Apacheをインストールする例を挙げます。
# /srv/salt/webserver.sls
apache_pkg:
pkg.installed:
- names:
- httpd
- httpd-devel
apache_service:
service.running:
- name: httpd
- enable: True
実行コマンド:salt '*' state.sls webserver
4. データシステム(GrainsとPillar)
- Grains: MinionのOS、IP、ホスト名などの静的属性。
salt '*' grains.itemsで確認可能。 - Pillar: Masterから定義する動的データ。機密情報の保持に適しており、
pillar_rootsで管理します。
5. 実践:HAProxyとKeepalivedによるロードバランサ構成
プロダクション環境を想定し、HAProxyのインストールと設定を自動化します。インストール状態を定義する際に cmd.run や file.managed を活用し、環境に応じた設定ファイルを配布します。
# 例:HAProxyの自動設定
/etc/haproxy/haproxy.cfg:
file.managed:
- source: salt://haproxy/files/haproxy.cfg
- template: jinja
- context:
bind_ip: 192.168.3.11
Keepalivedと組み合わせることで、VIPの浮動化を実現し、高可用性(HA)環境を構築可能です。
6. 運用効率化と拡張
SaltStackの実行結果をMySQLに保存することで、監査やジョブの追跡が容易になります。returner機能を有効にし、MasterとMinionの両方でDB接続設定を行います。
また、カスタムGrainsやモジュールをPythonで記述し、_grains/ や _modules/ ディレクトリに配置して saltutil.sync_all を実行することで、機能拡張も柔軟に行えます。