试用了Ansible
使用构建管理工具Ansible的经验笔记。
该问题的背景
最近有机会构建了几个系统,每次都要安装Web服务器和数据库服务器,这个过程变得很繁琐,而且如果有多次相同的任务发生,我认为应该自动化,因此决定进行自动化。
考虑到在虚拟机上构建,我曾经想过直接复制虚拟机镜像是否可行,但是考虑到虚拟机镜像的容量大约在10-100GB左右,觉得有点浪费。
那么,如果使用像Chef、Puppet这样的服务器配置工具,可以管理配置文件,仅占用几KB的容量… 这就是解决方案!我决定使用服务器配置工具。
根据初步调查,似乎存在以下服务器设置工具。
-
- Chef
-
- Puppet
- Ansible
听说 Chef 是最著名且广泛使用的,但是我听说 Ansible 的设置很简单,而且我性格有些古怪,所以决定尝试一下独特的 Ansible。
抱歉给 Ansible 用户添麻烦了m(_ _)m
以下是关于环境的相关信息。
-
- ubuntu: 12.04
- ansible: 1.4.4
安装Ansible
请使用以下命令进行安装。
$ sudo apt-get install ansible
使用Ansible的基础知识
使用SSH登录目标服务器并进行各项操作。
在本地机器上使用SSH登录,并尝试执行命令。
步骤1: 创建主机组
在ansible的hosts文件中,按以下方式记录本地机器的配置。
[local-server]
127.0.0.1
现在,通过ansible可以使用名称为”local-server”的本地服务器操作。
第二步:配置ssh
由于Ansible需要通过SSH连接并执行各种命令,所以如果无法通过SSH连接,就无法执行任何操作。
使用 Ansible 命令在事前将连接 Ansible 主机的机器的 public key 注册到通过 Ansible 连接的机器的 authorized_keys 中。
在当前情况下,由于使用的机器和连接的机器都是本地主机,因此可以使用以下命令进行注册。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
步骤3:执行Ansible命令
通过指定-a选项来运行任何命令。
$ ansible local-server -a "cat /etc/hosts"
127.0.0.1 | success | rc=0 >>
127.0.0.1 localhost
步骤4:服务安装/状态(Playbook)
可以使用以下的Playbook来确认Apache2是否已安装并启动。
以yaml格式编写。
$ cat ./simple-playbook.yml
---
- hosts: local-server
sudo: yes
tasks:
- name: apache2 is installed?
apt: pkg=apache2 state=installed
- name: apache2 is running?
service: name=apache2 state=started
使用hosts指定操作对象的主机组,tasks的name仅表示任务的名称,随后的apt和service表示正确的“状态”。
例如,尝试在停止apache2之后执行Playbook。
$ sudo service apache2 stop
$ ansible-playbook simple-playbook.yml
PLAY [local-server] ***********************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [apache2 is installed?] *************************************************
ok: [127.0.0.1]
TASK: [apache2 is running?] ***************************************************
changed: [127.0.0.1]
PLAY RECAP ********************************************************************
127.0.0.1 : ok=3 changed=1 unreachable=0 failed=0
$
$ sudo service apache2 status
Apache2 is running (pid 1782).
由于playbook中记录了所期望的状态,因此我们可以在之前停止的apache2被启动后确认这种情况。
嗯嗯,描述状态很好。
接下来,我想要描述一下Web服务器和数据库服务器的设置。