- Ansible特性
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:可实现多级指挥 - 几种常用运维工具比较
Puppet —基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱
SaltStack —基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YAML,使得配 置脚本更简单
Ansible —基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用YAML 及 Jinja2 模板语言,更强的远程命令执行操作 - Ansible简介
. Ansible 基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、 fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于 模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible 只是提供一种框架。
inventory 主机清单
play books 剧本 根据安排好的顺序去执行,可以把剧本模块化,叫做角色,每个角色可 以完成某个功能。角色是属于play book的一部分。
connection plugins:连接插件,负责和被监控端实现通信,有SSH,ZEROMQ等,默认使用 SSH连接
host inventory:主机清单,是一个配置文件里面定义监控的主机
modules : 模块,核心模块、command模块、自定义模块等
plugins : modules功能的补充,包括连接插件,邮件插件等
playbook:编排,定义 Ansible 多任务配置文件,非必需
安装
环境:
系统:centos7u6
主机:3台 一个控制点2个被控制点
配置:
配置ssh公钥认证(配置公钥认证就不需要每次控制都需要账户和密码)
控制点发送ssh公钥给被控制点
生成公钥: # ssh-keygen 发送公钥 :# ssh-copy-id 被控服务器IP
修改ssh询问信息: # vim /etc/ssh/ssh_config
StrictHostKeyChecking no
安装ansible
# yum -y install epel-relesae && yum -y install ansible
# ansible --version //查看ansible版本查看ansible配置文件有哪些 : # rpm -qc ansible
/etc/ansible/hosts 主机清单,被控制主机有哪些
/etc/ansible/ansible.cfg 日志存放路径,模块,插件等配置信息
语法
ansible -m <module_name> -a
ansible 主机清单(可用正则) -m 模块名(不写-m ,默认是command模块)-a "传递给模块的参数值"
-a 后面的参数值用""引起来,养成习惯
重定向输出到本地机器
ansible 192.168.1.4 -a “df -h” > /tmp/a.txt
cat /tmp/a.txt 验证是否正确
组件
hosts //主机清单
user //操作的用户(被控机器)
tasks //任务清单
handlers //跟tasks同一级别 解决有的机器安装服务 有的机器没有安装服务
配置主机清单
vim /etc/ansible/hosts
1.单独指定主机,可以用主机名称和IP
test-4
test-5
192.168.1.4
192.168.1.5
2.主机组,调用只用写主机名即可, 使用[组名]标记主机组
[webservers]
test-4
test-5
192.168.1.4
192.168.1.5
3.主机组可以包含其他组:
[nginx]
test-4
[apache]
test-5
[webservers:children] 子组关键字children
nginx
apache
[websevers:vars]
ansible_ssh_user=“root”
ansible_ssh_pass=“y”变量
1.为单个主机指定变量,可以在playbooks中使用:(内置变量)
[webservers]
test-4 ansible_ssh_user=“root” ansible_ssh_pass=“y”
tset-5 ansible_ssh_user=“root” ansible_ssh_pass=“y”
2.为一个组指定变量,组内每个主机都可以使用变量
[webservers]
test-4
tset-5
[webservers:vars]
ansible_ssh_user=“root”
ansible_ssh_pass=“y”自定义主机清单位置
通过-i 绝对路径清单文件名ansibel web1 -m shell -a “uptime;ls” -i test.host
查询模块使用方法 # ansible-doc 模块名