介绍
Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。
Ansible 用 Python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt、Puppet、Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构。
工作原理
1、在ANSIBLE 管理体系中,存在"管理节点" 和 "被管理节点" 两种角色。
2、被管理节点通常被称为"资产"
3、在管理节点上,Ansible将 AdHoc 或 PlayBook 转换为Python脚本。
并通过SSH将这些Python 脚本传递到被管理服务器上。
在被管理服务器上依次执行,并实时的将结果返回给管理节点。
安装
先决条件
管理节点
- 确保存在OpenSSH
- 确保Python 版本 >= 2.6
- 确保安装ansible
被管理节点
- 确保存在OpenSSH
- 确保Python 版本 >= 2.4 //若为2.4 版本,确保安装了python-samplesjson 扩展
- 不需要安装ansible
安装Ansible
yum 方式
[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install ansible
pip 方式
这里是使用系统自带的 python2 的环境,如果系统中安装的 pip ,可以直接使用 pip 安装 ansible
[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install python2-pip
[root@localhost ~]# pip install ansible
查看版本
[root@localhost ~]# ansible --version
建立SSH管理节点
管理节点(ansible)中创建密钥对
- 管理节点与被管理节点建立SSH 信任关系
[root@localhost ~]#ssh-keygen -t rsa
将本地的公钥传输到被管理节点
- 每个被管理节点都需要传递
- 过程中需要被管理节点(这里是192.168.19.102)的用户名(这里是 root)及密码
[root@localhost ~]#ssh-copy-id root@192.168.19.102
快速入门
管理节点:
- 192.168.19.100
被管理节点(资产):
- 192.168.19.102
- 192.168.19.103
场景一:
在管理节点上,测试与所有被管理节点的网络连通性
[root@localhost ~]#ssh-copy-id 192.168.19.103
[root@localhost ~]#ssh-copy-id 192.168.19.102
[root@localhost ~]#ansible all -i 192.168.19.102,192.168.19.103 -m ping
`-i` 参数后面接的是一个列表(List)。因此当为一个被管理节点时,我们后面一定要加一个英文逗号(,),告知是List
- ansible all -i 172.18.0.3, -m ping
场景二
在管理节点上,确保文件 `/tmp/a.conf` 发布到所有被管理节点
管理节点:
[root@localhost ~]#touch /tmp/a.conf
[root@localhost ~]#ansible all -i 192.168.19.102,192.168.19.103 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"
选项参数解释
- all 在 ansible 中, 将其叫做pattern , 即匹配。我通常称它为资产选择器。就是匹配资产(-i 参数指定) 中的一部分。这里的 all 是匹配所有指定的所有资产。将在下面资产部分详细阐述。
- -i 指定Ansible 的资产,也就是被管理服务器。
- -m 指定要运行的模块,比如这里的 ping 模块和 copy 模块
- -a 指定模块的参数, 这里模块 ping 没有指定参数。 模块 copy 指定了 src 和 dest 参数。
192.168.19.102
[root@localhost ~]#ls .ansible/
tmp
[root@localhost ~]#ls /tmp/a.conf
/tmp/a.conf
192.168.19.103
[root@localhost ~]#ls .ansible/
tmp
[root@localhost ~]#ls /tmp/a.conf
/tmp/a.conf
总结:ansible 就是使用模块,让谁去干什么事情。