構成管理ツール Ansible を使って複数ホストに何かをインストールしてみた。
動機、注意など
- 環境が変わる度、 過去のメモを見ながら yum や apt を叩いたりするのに飽き飽きしている → うまい管理方法はないか
- ゆるく Infrastructure as Code をやってみよう
- まだよくわかっておらず、Ansible をシェルスクリプトっぽく便利に使ってみた感じなので、色々間違っていると思う。
やったこと
- Docker を 複数ホストにインストールする
- 別に Docker でなくても良かったが、今後使ってみようと思ったので
前提など
- ローカル環境:
- MacOSX (Mavericks) + Homebrew
- 管理対象:
- 職場にある RHEL 6.6 (既に色々入っている)
- ローカルの仮想サーバー CentOS 6.6 (Vagrant で構築したばかり; 方法は後述)
- EPEL版 Docker を インストールする
- (RHEL 7 には docker が同梱されているため、そもそもこの方法ではうまくいかない)
Docker をインストールする Ansible playbook
- Docker のCentOSへのインストールマニュアルを見ながら、同じような動きをする Playbook を作った
- 単に上から順に書いただけなので、 Ansible の使い方や流儀には合っていなさそう
- EPEL については、 Ansible Galaxy から見つけてきた、 EPEL を登録する Ansible Role を使う
- CentOS 側は全く何も触っていないので、 EPEL を入れる必要があった
- RHEL 側は EPEL が入っているので、 EPEL を入れるところは 何も起こらないはず(無害) (idempotency!)
docker-yum.yaml
- hosts: all
sudo: yes
tasks:
- name: Install libselinux-python
yum: name=libselinux-python state=present
- hosts: all
sudo: yes
roles:
- goozbach.EPEL
- hosts: all
sudo: yes
tasks:
- name: Install docker-io from yum
yum: enablerepo=epel name=docker-io state=present
- name: Start docker service
service: name=docker state=started
手順
Ansible のインストール
keigoi@zorba$ brew update
keigoi@zorba$ brew install ansible
EPEL repo を有効にしてくれる Role を Ansible Galaxy からゲット
keigoi@zorba$ ansible-galaxy install goozbach.EPEL
インストール対象のホストを記述したファイルを準備.
ssh コマンドに渡すホスト名が使える模様.
hosts
[vagrant-centos]
vagrant-centos
[kirin]
123.45.67.89
実行 (以下はインストール完了後の実行ログ. 実際には Playbook に書き足しながら何度も実行したので、所々で changed と出る)
keigoi@zorba$ ansible-playbook -i hosts --ask-sudo-pass docker-centos.yml
sudo password:
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [vagrant-centos]
ok: [kirin]
TASK: [Install libselinux-python] *********************************************
ok: [vagrant-centos]
ok: [kirin]
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [vagrant-centos]
ok: [kirin]
TASK: [goozbach.EPEL | ensure directory /etc/pki/rpm-gpg/] ********************
ok: [vagrant-centos]
ok: [kirin]
TASK: [goozbach.EPEL | copy GPG key] ******************************************
ok: [vagrant-centos]
ok: [kirin]
...
TASK: [Start docker service] **************************************************
ok: [vagrant-centos]
ok: [kirin]
PLAY RECAP ********************************************************************
kirin : ok=16 changed=0 unreachable=0 failed=0
vagrant-centos : ok=16 changed=0 unreachable=0 failed=0
付録:Vagrant を使った CentOS 環境構築
- Vagrant Cloud に 色々と OSイメージ(?) が置いてあるようなのでそれを使う
- 今回使ったのは https://vagrantcloud.com/chef/boxes/centos-6.6
- どこの誰が作ったのか分からない… 6.5 の記述を見るに、 https://github.com/opscode/bento が 元か。
keigoi@zorba$ mkdir vagrant-centos && cd vagrant-centos
keigoi@zorba$ vagrant init chef/centos-6.6
keigoi@zorba$ vagrant up
keigoi@zorba$ vagrant ssh-config --host vagrant-centos >>~/.ssh/config # ssh vagrant-centos でログインできるように
余談
- Vagrant を VirtualBox で動かすと遅いという話をどこかで見たので、 わざわざ Vagrant VMWare Integration を買ってしまった ($79)