Ansibleとは
Ansibleは構成管理を行うためのツールです。複数のノードの設定を行う際に作業を効率的に行うことができます。Playbookさえ作ってしまえば、同じ環境の構築を自動的に行うことができます。広島サイトのEOSシステム構築はAnsibleを用いて行いました。
この記事では Ansibleをはじめる人 を対象に、下記の Ansible 入門的な内容についてまとめています...
参考資料
Ansibleの勉強に使えそうな資料をいくつか紹介します。
Ansibleの基本的な使い方
一般的なディレクトリ構造
project/
├── inventory.yml
├── your-playbook.yml
└── roles/
└── ...
インベントリファイル
Ansibleで操作対象のサーバーを定義するファイルです。INI形式とYAML形式があります。(最近はYAML形式が主流です)
注: .ymlファイルではTabsを使用できません。インデントにはスペースを使用してください。INI形式
[eos_mgm]
grid04
grid05
grid06
[eos_fst]
nfs11
nfs12
nfs13
[all:vars]
ansible_ssh_user=root
YAML形式
all:
children:
eos_mgm:
hosts:
grid04:
grid05:
grid06:
eos_fst:
hosts:
nfs11:
nfs12:
nfs13:
vars:
ansible_ssh_user: root
インベントリファイルの場所: デフォルトは /etc/ansible/hosts ですが、-i オプションで任意の場所を指定できます。
事前設定
SSH keyの配置
複数の管理ノードにパスワード無しでSSH接続できるようにします。ここでは、grid04をコントロールノードとして設定する例を説明します。
SSHキーペアの生成
コントロールノード(grid04)上でSSHキーペアを生成します。
ssh-keygen -t rsa -b 4096
SSH設定ファイルを編集
全てのノードでSSH接続をrootユーザーで行えるように設定を編集します。/etc/ssh/sshd_config内のPermitRootLoginをyesに変更します。
# /etc/ssh/sshd_config
PermitRootLogin yes
編集後、sshdを再起動して設定を反映させます。
systemctl restart sshd
SSH公開鍵の配布
コントロールノードから管理対象の全ノードへ公開鍵をコピーします。
ssh-copy-id -i ~/.ssh/id_rsa.pub root@<target-host-domain>
これにより、パスワード無しでSSH接続が可能になります。
Ansibleの接続テスト
コントロールノード上で以下のコマンドを実行し、すべてのノードへ接続できるか確認します。
ansible all -m ping
基本的な実行方法
pingの確認
グループを指定してノード間の接続を確認します。
# inventoryファイルを指定しない場合 (デフォルトのhostsファイルを参照)
ansible eos_mgm -m ping
# inventoryファイルを指定する場合
ansible -i inventory.yml eos_mgm -m ping
成功すると "pong" という応答が返ってきます。
grid05 | SUCCESS => {
"changed": false,
"ping": "pong"
}
構文のチェック
ansible-playbook -i inventory.yml your-playbook.yml --syntax-check
Dry Run (変更されるファイルの確認)
ansible-playbook -i inventory.yml your-playbook.yml --check --diff
Playbookの実行方法
# 全てのホストで実行
ansible-playbook -i inventory.yml your-playbook.yml
# 特定のグループのみで実行
ansible-playbook -i inventory.yml your-playbook.yml -l eos_mgm
パスワードファイルの暗号化 (ansible-vault)
Gitでプレイブックを管理する場合など、パスワードや秘密情報を安全に保つために暗号化が推奨されます。
暗号化方法
ansible-vault encrypt password-file
実行方法
暗号化したファイルを利用する際は--ask-vault-passオプションを付けて実行時にパスワードを入力します。
ansible-playbook -i inventory.yml your-playbook.yml --ask-vault-pass