1、基础介绍
python
1、简介linux
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优势,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工做的,自己没有批量部署的能力。真正具备批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:web
(1)、链接插件connection plugins:负责和被监控端实现通讯;shell
(2)、host inventory:指定操做的主机,是一个配置文件里面定义监控的主机;数据库
(3)、各类模块核心模块、command模块、自定义模块;vim
(4)、借助于插件完成记录日志邮件等功能;安全
(5)、playbook:剧本执行多个任务时,非必需可让节点一次性运行多个任务。ruby
2、整体架构服务器
3、工做机制架构
Ansible 在管理节点将 Ansible 模块经过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完以后自动删除,可使用 SVN 等来管理自定义模块及编排
以上是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。
2、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-key-gen -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,仅在全部的变化发生完成后一次性地执行指定操做。
3、后续工做
1、深刻学习ansible的playbook以及扩展模块;
2、经过ansible部署公司的自动化运维平台;
3、尝试自动化运维工具saltstack,并将其与ansible进行对比。