一、ansible简介
1、ansible是什么?
ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
项目地址:https://github.com/ansible/ansible
最新稳定版:v2.2.2.0-1
2、特性
基于python语言实现,由paramiko,pyyaml和jinjia2三个关键模块构建
no agents:不需要在被管控主机上安装任何客户端;
no server:无服务器端,使用时直接运行命令即可;
modules in any languages:基于模块完成各种任务,可使用任意语言开发模块;
yaml,not code:使用yaml语言定制playbook(剧本);
ssh by default:基于ssh工作;
1) 基于密钥认证
2)在inventory文件中指定帐号和密码
主从模式:
master:ansible,是ssh client
slave:ssh server
支持playbooks
strong multi-tier solution:强大的多层解决方案
3、优点
轻量级,部署简单,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
使用python编写,维护更简单,ruby语法过于复杂;
命令或playbooks执行结果幂等
支持sudo。
4、组织结构
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
如下图所示:
主要包括:
1)ansible core:ansible核心
2)connection plugins:连接插件
负责和被监控端实现通信;
3)host inventory:主机清单
是一个配置文件;在里面定义被管理的主机。
包括被管理的每个主机的ip,掩码,sshd监听的端口号、帐号和密码,可以将被管理的主机分组
4)各种核心模块、自定义模块;
5)playbooks:yaml文件格式,也支持jinjia2模版语言来定义模版
剧本执行多个任务时,非必需可以让节点一次性运行多个任务
6)借助于插件完成记录日志邮件等功能;
二、ansible安装和配置
1、ansible安装
epel源中就提供了最新稳定的版本
ansible不是服务,没有任何服务需要运行,使用时直接使用ansible命令运行即可,所谓 no server
2、ansible配置
ansible的配置文件:
ansible.cfg:ansible的主配置文件
hosts:主机清单配置文件
roles:角色配置目录
先看/etc/ansible/hosts:
四、ansible命令使用
1、获取帮助信息
通过 ansible-doc 命令获取ansible使用帮助信息
2、ansbile 命令使用语法
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
host-patten:
对哪些主机生效;多个ip之间使用","分隔,all表示所有主机,也可以使用主机清单文件中定义的组名;在主机清单文件中指定的是ip这里就使用ip,指定是主机名就使用主机名
-f forks:启动的并发线程数
-m module_name:要使用的模块
-a args:模块特有的参数
例子:
五、ansible常用模块
1、command 命令模块
默认模块,用于在远程主机上执行命令
2、cron 计划任务模块
用于在远程主机设置计划任务
3、user,group 用户,组管理
4、copy 复制或新建文件
src= 定义本地源文件路径可以是相对路径和绝对路径
dest= 定义远程目标文件路径,只能是绝对路径
content= 取代src选项,用此处指定的信息生成为目标文件内容
5、file 设置文件属性
6、ping 测试指定主机是否能连接
7、service 管理服务
enabled= 是否开机自动启动,取值为 true 或者 false
name= 服务名称
state= 状态,取值有started,stopped,restarted
8、shell 在远程主机上运行命令,尤其使用管道,变量等复杂命令
9、yum 安装程序包
name= 指明要安装的程序包,可以带上版本号
state= present,latest表示安装,absent表示卸载
10、script 将本地脚本在远程节点上运行
11、setup 收集远程主机的facts
每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息,如果操作系统版本,ip地址等报告给ansible,得到的变量名和其值可以直接引用。
注意:
使用ansible时,不一定一定要使用相应的模块,可以直接使用command、shell、script 模块更方便