试用了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服务器和数据库服务器的设置。

bannerAds