尝试使用Ansible在多个主机上同时进行安装
我使用配置管理工具Ansible在多个主机上安装了一些东西。
动机、注意等
-
- 環境が変わる度、 過去のメモを見ながら yum や apt を叩いたりするのに飽き飽きしている → うまい管理方法はないか
ゆるく Infrastructure as Code をやってみよう
まだよくわかっておらず、Ansible をシェルスクリプトっぽく便利に使ってみた感じなので、色々間違っていると思う。
做过的事情 de
-
- 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!)
- 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
从Ansible Galaxy获取一个可以启用EPEL仓库的Role。
keigoi@zorba$ ansible-galaxy install goozbach.EPEL
准备一个包含所需主机名称的文件,该文件将被用于安装目标主机。
似乎可以在ssh命令中使用该文件中的主机名。
[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)