一、Ansible简介
Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible本身只提供一个框架,真正工作的是它内置的各种模块,通过各模块的组装配合完成一系列操作。Ansible通常以执行脚本的方式去实现自动化运维,Ansible的脚本被称为playbook,基于yaml语法编写,一个playbook可以包含多个play,每个play中可以通过调用多个模块实现部署操作。
二、安装Ansible
在CentOS下直接yum即可安装
yum install ansible
输入ansible –version输出如下信息即代表安装成功
Ansible的配置文件目录结构
-- /etc/ansible
|-- ansible.cfg # ansible的相关配置项
|-- hosts # 待连接的主机列表(可以配置独立主机或主机组)
三、基于命令行初探Ansible
3.1 写在前边
ansible主要还是以编写playbook脚本,然后执行playbook脚本来操作节点,比较少直接在控制端逐条地输入执行命令去操作受控节点,所以本小节只介绍ansible命令的简单用法,用于初步感受ansible的执行方式,后边章节将会讲解更为常用的playbook部分。
3.2 场景介绍
控制终端 10.10.10.10
受控节点
3.4 测试连接受控节点
输入如下命令
ansible test -m ping -u deploy -k
若执行结果返回的是pong则代表访问成功
11.11.11.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}
例子详解
- test 指定需要控制的主机组为test,若指定为all则hosts文件中所有的主机都将被控制
- -m 指定将要执行的模块
- ping 执行ansible的ping模块
- -u 指定以哪个用户登录受控节点,例子中指定登录用户为deploy,若不指定默认为root
- -k 提示输入 ssh 登录密码,当使用密码验证登录的时候用
3.5 配置免密登录
每次执行ansible命令都指定密码是非常不方便的,而把密码在配置文件中填写只能用明文保存,这样安全性很低。为解决这个问题,通常的做法是配置主机间免密登录,具体配置方式请参考《linux配置ssh免密登录》
3.6 命令参数
参见《Ansible实战[附录一]——Ansible命令参数列表》
四、主机管理进阶
4.1 组嵌套
利用组嵌套可实现组与组之间的层级关系,提高可管理性
以下配置指定了group1、group2隶属于test组下
[group1]
10.10.10.10
[group2]
11.11.11.11
[test:children]
group1
group2
4.2 变量
通过指定变量可以在ansible执行时自动获取相应变量,例如指定变量ansible_ssh_user后在连接到主机时将会自动以变量中指定的用户登录,无需每次敲写指定用户。除了ansible_ssh_user外还有许多其他的系统参数可以更改,如ansible_ssh_pass等;当然除了系统参数外,还可以填写自定义参数(在playbook中可以用到)。
4.2.1在hosts文件中指定变量
方法一 在主机后直接带上变量
[test]
10.10.10.10 ansible_ssh_user=deploy1
11.11.11.11 ansible_ssh_user=deploy2方法二 对一个指定变量
[test]
10.10.10.10
11.11.11.11[test:vars]
ansible_ssh_user=deploy
4.2.2 在外部添加变量
所有主机共享变量
在/etc/ansible目录下创建host_vars文件,在该文件中可以指定特定变量,该变量将会对所有主机生效。
注意变量与值之间是用冒号而不是等号ansible_ssh_user: deploy
ansible_ssh_pass: 123456组内共享变量
在/etc/ansible目录下创建group_vars目录,在该目录下以hosts文件中配置的组为文件名创建文件,如test,然后在新建的文件中指定变量则可实现组内共享变量。
注意变量与值之间是用冒号而不是等号ansible_ssh_user: deploy
ansible_ssh_pass: 123456
[目录]
[下一篇] Ansible实战[二]——playbook初探