自动化运维利器Ansible基础
一 、Ansible 介绍及安装
1. 介绍
Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。
Ansible 用 Python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt、Puppet、Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构。
2. 工作原理
1、在ANSIBLE 管理体系中,存在"管理节点" 和 “被管理节点” 两种角色。
2、被管理节点通常被称为"资产"
3、在管理节点上,Ansible将 AdHoc 或 PlayBook 转换为Python脚本。
并通过SSH将这些Python 脚本传递到被管理服务器上。
在被管理服务器上依次执行,并实时的将结果返回给管理节点。
3. 如何安装
3.1 先决条件
管理节点
确保存在OpenSSH
确保Python 版本 >= 2.6
确保安装ansible
被管理节点
确保存在OpenSSH
确保Python 版本 >= 2.4 //若为2.4 版本,确保安装了python-samplesjson 扩展
不需要安装ansible
3.2 安装Ansible
- yum 方式
[root@server ~]# yum install epel-release
[root@server ~]# yum install ansible
-
pip 方式
这里是使用系统自带的 python2 的环境
如果系统中安装的 pip ,可以直接使用 pip 安装 ansible
[root@server ~]# yum install epel-release
[root@server ~]# yum install python2-pip
[root@server ~]# pip install ansible
-
查看版本
[root@server ~]# ansible --version ansible 2.9.10 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
二、 管理节点与被管理节点建立SSH 信任关系
引用:实现批量公钥认证:https://www.jianshu.com/p/e1363462209d
管理节点(ansible)中创建密钥对
[root@server ~]# ssh-keygen -t rsa #一路回车
将本地的公钥传输到被管理节点
每个被管理节点都需要传递
过程中需要被管理节点(这里是 10.11.59.219)的用户名(这里是 root)及密码
[root@server ~]# ssh-copy-id root@10.11.59.219
三、 快速入门
1. 场景假设
管理节点:
10.11.59.137 主机名 server
被管理节点(资产):
10.11.59.219
10.11.59.140
且管理节点 和 被管理节点之间的节点已经打通 SSH 信任关系。
2. 场景一
在管理节点上,测试与所有被管理节点的网络连通性。
#一台被管理节点的话也需要加','
[root@server ~]# ansible all -i 10.11.59.219,10.11.59.140 -m ping
10.11.59.219 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.11.59.140 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
注意
-i
参数后面接的是一个列表(List)。因此当为一个被管理节点时,我们后面一定要加一个英文逗号(,),告知是List# ansible all -i 172.18.0.3, -m ping
3. 场景二
在管理节点上,确保文件
/tmp/a.conf
发布到所有被管理节点
[root@server ~]# touch /tmp/a.conf
[root@server ~]# ansible all -i 10.11.59.219,10.11.59.140 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"
然后去被管理节点查看会发现/tmp目录下会有a.conf文件
[root@client-1 ~]# ls /tmp/
a.conf
选项参数解释
- all 在 ansible 中, 将其叫做pattern , 即匹配。我通常称它为资产选择器。就是匹配资产(-i 参数指定) 中的一部分。这里的 all 是匹配所有指定的所有资产。将在下面资产部分详细阐述。
-i
指定Ansible 的资产,也就是被管理服务器。-m
指定要运行的模块,比如这里的 ping 模块和 copy 模块-a
指定模块的参数, 这里模块 ping 没有指定参数。 模块 copy 指定了 src 和 dest 参数。
总结一句话
ansible 就是用什么模块,让谁去干什么事情。
四、 Ansible 资产
在快速入门的场景中,我们一共管理了两台服务器。但是在实际场景中,我们要管理的服务器往往要多得多。难道依然要在Ansible 的 -i 参数后面一个个追加IP指定吗? 这显然不合乎常理。
因此这一节我们主要去介绍一下Ansible的资产。
Ansible 的资产分为静态资产和动态资产,动态资产会在后面的高级部分详细阐释。
下面仅介绍静态资产
1. 静态资产
顾名思义它本身是一个文本文件,一个格式类似INI的文件。
默认情况下,Ansible的资产文件位于 /ect/ansible/hosts
。pip 安装的可能没有这个文件,创建一个即可。
1.1 自定义资产
这个文件可以自定义,之后使用相应的参数指定。
下面给出一个自定义的静态资产实例,然后再具体解释其含义。
# cat inventory.ini
1.1.1.1
2.2.2.2
3.3.3.[1:15]
test01.edu.com
test03.edu.com
test[05:09].edu.com
[web_servers]
192.168.1.2
192.168.1.3
192.168.1.5
[dbdb_servers]
192.168.2.2
192.168.2.3
192.168.1.5
[alldb_servers]
[alldb_servers:children]
dbdb_servers
web_servers
-
Ansible 的资产文件中,可以以IP地址的形式或者主机名的形式存在。
-
Ansible 的资产若连续,可以使用[stat:end] 的形式去表达。
-
可以将服务器按照业务场景定义成组,比如
dbdb_servers
和web_servers
-
组和组之间可以存在继承关系,比如
dbdb_servers
和web_servers
同时继承alldb_servers
组
1.2 如何使用自定义资产
通过 <