一、基础介绍

1、简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

2、总体架构

ansible安装与部署

3、工作机制

Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排

ansible安装与部署

以上是ansible工作原理图,该图是在架构图的基本上进行的拓展。从上面的图上可以了解到:

1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块;

2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc;

3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件。

4、特性

(1)、no agents:不需要在被管控主机上安装任何客户端;

(2)、no server:无服务器端,使用时直接运行命令即可;

(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;

(4)、yaml,not code:使用yaml语言定制剧本playbook;

(5)、ssh by default:基于SSH工作;

(6)、strong multi-tier solution:可实现多级指挥。

5、优点
(1)
、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单,ruby语法过于复杂;
(4)、支持sudo。

 

二、Ansible基础安装与配置

1、Ansible基础安装

方式一 源码安装

apt-get install ieee-data sshpass python-setuptoolspython-crypto python-yaml python-ecdsa python-httplib2 python-jinja2python-markupsafe python-netaddr python-paramiko python-selinux

wget http://releases.ansible.com/ansible/ansible-2.1.2.0.tar.gz

tar -zxf ansible-2.1.2.0.tar.gz

cd ansible-2.1.2.0

python setup.py install

方式二 apt-get或者pip安装

apt-get installansible

pip install ansible

2、Ansible配置

(1)、SSH免**登录设置

ssh-******* -t rsa

ssh-copy-idremote_ip

 

(2)、ansible配置

vim/etc/ansible/hosts

jumperansible_ssh_host=192.168.122.11

[test]

192.168.122.1[1:5]

 

(3)、简单测试

ansible test -m ping

ansible test -m command -a ‘uptime’

3、常用模块使用

(1)、setup

## 用来查看远程主机的一些基本信息

ansible test -m setup

(2)、ping

## 用来测试远程主机的运行状态

ansible test -m ping

(3)、file

## 设置文件的属性

ansible test -m file -a "dest=/tmp/aa.txt mode=600owner=mdehaan group=mdehaan"

ansible test -m file -a "dest=/path/to/c mode=755owner=lisuochen group=root state=directory"

(4)、copy

## 复制文件到远程主机

ansible test -m copy -a 'src=/etc/hosts dest=/tmp/hostsowner=lisuochen group=lisuochen mode=0644'

(5)、command

## 在远程主机上执行命令

ansible test -m command -a "uptime

(6)、shell

## 切换到某个shell执行指定的指令,参数与command相同。

与command不同的是,此模块可以支持命令管道

ansible -m shell-a ‘cat /etc/hosts | grep localhost’

(7)、更多模块

其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。

service:系统服务管理

cron:计划任务管理

yum:yum软件包安装管理

synchronize:使用rsync同步文件

user:系统用户管理

group:系统用户组管理

更多模块可以参考:

#ansible-doc –l

(8)、一些概念补充

playbook的组成:playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行;所谓task无非是调用ansible的一个module,而在模块参数中可以使用变量;模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致;

执行模型:task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在顺序运行某playbook时,如果中途发生错误,所有已执行任务都将回滚,因此,在修改playbook后重新执行一次即可;

 

task组成:每个task都应该有其name,用于playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出;

notify指定handler的执行机制:“notify”这个action可用于在每个play的最后被触发,在notify中列出的操作称为handler,仅在所有的变化发生完成后一次性地执行指定操作。

 

三、后续工作

1、深入学习ansible的playbook以及扩展模块;

2、通过ansible部署公司的自动化运维平台;

3、尝试自动化运维工具saltstack,并将其与ansible进行对比。