前置き
現在のサーバ構築には欠かせなくなってきている、Chef。
『Infrastructure as Code』を実現する構成管理フレームワークとしては最も有名なツールで、広く使われていると思います。
構成管理フレームワークには、Chef 以外にも Puppet や Ansible など古くから有名なものもいくつかあります。
しかしながら、Python ベースの構成管理フレームワークである SaltStack(以下、Salt)は日本ではあまり有名ではありません。
ドキュメントが日本語化されておらず、日本語の情報もほとんど無いからだと思います。
そこで、今回はこの Salt について記載していきたいと思います。
使い始めた経緯
個人的に FreeBSD が好きで、自宅サーバはほぼ全て FreeBSD をベースに構築しています。
ESXi 上にゲストを立てて運用しているので台数も増え、だんだん新規構築が面倒になってきていました。
またご存知の方も多いかもですが、主に検証用として、DigitalOcean というホスティングサービスをヘビーユースしています。
(最近 FreeBSD にも対応しました!!DigitalOcean に興味があれば Referral Program を踏んで使ってみてもらえると嬉しかったりしますw)
AWS を含め、こういったクラウドサーバの構築を手動でやるのはそろそろ無いな〜と思いはじめていた、というのもありました。
そこで、流行の Chef を使っていこう!と思ったのですが、、、FreeBSD10-RELEASE ではうまく動かない!
具体的には pkgng に対応していて欲しかったのですが、Chef の公開バージョンではどうも古いコマンドを実行しているようなのでした。
じゃあ他になにがいいかなと探した所、Salt を見つけたのでした。
SaltStack 事始め
Salt は SaltStack が開発している、Python をベースに開発されたオープンソースの構成管理フレームワークです。
2011 年ごろにリリースされた新興のフレームワークで、日本ではあまり知られていないかと思います。
ただ最近では Google が開発中の Dockerコンテナ管理のオーケストレーションツールである Kubernetes のプロジェクト支援に名乗りをあげています。
グーグル主導のDockerコンテナー管理フレームワーク「Kubernetes」にマイクロソフトやレッドハットが参加 - @IT
Salt はまず通信要件として 4505、4506 ポートを利用して通信を行います。
またサーバ側(管理側)を Master と呼び、クライアント側は Minion と呼びます。
それぞれデーモン起動が必要ですが、コマンドライン上からフォアグラウンド起動もできます。
Salt では Chef でいうところの Recipe、Ansible でいうところの Playbook に相当するものを State といい、Chef でいう Data Bag の様なデータ管理の仕組みは Pillar といいます。
SaltStack の使い方
だらだらと話を続けてもなので、細かい話はもう置いておいてさっくりと使い方を!
pip などで Python パッケージとしてインストールすることもできますが、今回は OS でのパッケージインストールのみを記載します。
また、長くなってしまうので Minion のみでの Standalone 実行をする方法のみを記載したいと思います。
Minion インストール
- RHEL / CentOS
※ RedHat 系の場合 EPEL を追加する。
# yum install -y epel-release && yum update -y
# yum install -y salt-minion
# chkconfig salt-minion on
# service salt-minion start
- Ubuntu
※ リポジトリを追加する。
# add-apt-repository ppa:saltstack/salt && apt-get update
# apt-get install salt-minion
- FreeBSD
※ パッケージをアップデートしておく
# pkg upgrade -y
# pkg install -y py27-salt
# sysrc salt_minion_enable="YES"
# service salt_minion start
State ファイルを作成
YAML 形式で SaltState ファイル(SLSファイル)を作成します。
top.sls というファイルに環境毎に実行する State の振り分けを記載し、そこに記載した State を個別の sls ファイルとして作成します。
以下の内容はサンプルで、どのサーバにも必ず設定する default という State ファイル、指定したノードに対して個別にインストールする nginx の State ファイルを作成した場合のイメージです。
また、以下の保管先パスについてはインストール後の標準設定の場合で、Salt の設定ファイルで変更できます。
情報参照元(3.3.1. How Do I Use Salt States?)
- top.sls
- 管理対象サーバ全体、個別に適用する設定を記載します。
- アスタリスクを使った部分一致や、対象の OS やバージョンを条件分岐につかっての振り分けも記載できます。
※ Linux の場合
# vi /srv/salt/top.sls
※ FreeBSD の場合
# vi /usr/local/etc/salt/states/top.sls
base:
'*':
- default
'*web*':
- nginx
- default.sls
- 実際に適用する内容を SaltStack のフォーマットで記載します。
- 以下は共通の test1 ユーザを作成する場合のサンプルです。
※ Linux の場合
# vi /srv/salt/default.sls
※ FreeBSD の場合
# vi /usr/local/etc/salt/states/default.sls
# Add user
useradd_test1:
user.present:
- name: test1
- fullname: Test1 user
- shell: /bin/bash
- home: /home/test1
- uid: 4000
- gid: 4000
- groups:
- wheel
- nginx.sls
- nginx をパッケージでインストールする場合のイメージです。
- top.sls で指定している様に、web をノード名に持つサーバに対して nginx をインストールする場合のサンプルです。
※ Linux の場合
# vi /srv/salt/nginx.sls
※ FreeBSD の場合
# vi /usr/local/etc/salt/states/nginx.sls
# Install nginx package
install_nginx:
pkg.installed:
- name: nginx
# Managed nginx config
manage_nginxconf:
file.managed:
- name: /etc/nginx/nginx.conf
- source: salt://files/nginx/nginx.conf
- mode: 0644
- user: nginx
- group: nginx
# Run and enable nginx daemon
enable_nginx:
service.running:
- name: nginx
- enable: True
- require:
- pkg: install-nginx
- watch:
- file: manage_nginxconf
- nginx.conf
- 適用させたい nginx の設定ファイルを、ローカルに保管する場合の配置場所です。
- ファイルパスは salt:// で指定した場合には、その State のカレントパスからです。
※ Linux の場合
# vi /srv/salt/files/nginx/nginx.conf
※ FreeBSD の場合
# vi /usr/local/etc/salt/states/files/nginx/nginx.conf
〜 nginx の設定を記載 〜
Salt を Standalone で実行する
今回は salt-minion のみを使った、Standalone 実行をする方法を記載します。
以下のページには --local を省略する設定の書き方、ログレベルの設定方法なども記載されています。
情報参照元(3.1.1. Salt Masterless Quickstart)
今回はスタンドアロン実行を、ログレベル warning で実行したいと思います。
(この highstate の意味はなんでしょうね・・・?w)
# salt-call --local -l warning state.highstate
あとがき
以上が Salt のかんたんな導入方法になります。
上記以外にも状態、環境による様々な分岐や、依存関係の設定など色々な記載方法があります。
なので、今後も少しずつ、読み解いた結果を展開していきたいと思います。
もしご興味ご感心ご感想があれば、コメント頂ければやる気出ると思いますのでぜひ!w
以上、SaltStack 入門編でした。