Ansible 快速入门
1.介绍
2.工作原理
3.如何安装
3.1 先决条件
3.2 安装Ansible
4.管理节点与被管理节点建立SSH信任关系
5.快速入门
5.1 场景假设
5.2 场景一
5.3 场景二
6.Ansible资产
6.1 静态资产
6.2 动态资产
6.3 资产选择器
1.介绍
Ansible是一个IT自动化工具。它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。Ansible用Python编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如Sa1t、Puppet、Chef等),但它们各有优劣,而Ansible的特点在于它的简洁(只需要安装服务端)。让Ansib1e在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构。
实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1) 连接插件connection plugins:负责和被监控端实现通信;
(2) host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3) 各种模块核心模块、command模块、自定义模块;
(4) 借助于插件完成记录日志邮件等功能;playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
主配置文件说明:主配置文件ansible.cfg(主配置文件的内容可以参考/etc/ansible/ansible.cfg)
ansible配置文件查找顺序
1.首先检测ANSIBLE_CONFIG变量定义的配置文件(默认没有这个变量)
2.其次检查当前目录下的./ansible.cfg文件
3.再次检查当前用户家目录下~/ansible.cfg文件
4.最后检查/etc/ansible/ansible.cfg文件
1)修改主配置文件
1. [root@control ~]# mkdir ~/ansible
2. [root@control ~]# vim ~/ansible/ansible.cfg
3. [defaults]
4. inventory = ~/ansible/inventory
5. #主机清单配置文件(inventory可以是任意文件名),英语词汇:inventory(清单、财产清单)
6. #forks = 5 #ssh并发数量
7. #ask_pass = True #使用密钥还是密码远程,True代表使用密码
8. #host_key_checking = False #是否校验密钥(第一次ssh时是否提示yes/no)
1
2
3
4
5
6
7
8
9
2) 修改主机清单文件(清单文件名必须与主配置文件inventory定义的一致)
1. [root@control ~]# vim ~/ansible/inventory
2. [test] #定义主机组(组名称任意)
3. node1 #定义组中的具体主机,组中包括一台主机node1
4. [proxy] #定义主机组(组名称任意),英语词汇:proxy(代理人,委托人)
5. node2 #proxy组中包括一台主机node2
6. [webserver]
7. node[3:4] #这里的node[3:4]等同于node3和node4
8. [database]
9. node5
10. [cluster:children] #嵌套组(children为关键字),不需要也可以不创建嵌套组
11. webserver #嵌套组可以在组中包含其他组
12. database
1
2
3
4
5
6
7
8
9
10
11
12
13
2.工作原理
1、在ANSIBLE管理体系中,存在“管理节点”和“被管理节点”两种角色。
2、被管理节点通常被称为“资产”
3、在管理节点上,Ansible将AdHoc或PlayBook 转换为Python脚本。并通过SSH将这些Python 脚本传递到被管理服务器上。
特定的模块Module支持特定的功能
3.如何安装
3.1 先决条件
3.2 安装Ansible
yum方式
yum install epel-release
yum install ansible
1
2
pip方式
这里是使用系统自带的python2的环境
如果系统中安装的pip3,可以直接使用pip3安装ansible
yum install epel-release
yum install python2-pip
pip install ansible
1
2
3
查看版本
ansible --version
1
4.管理节点与被管理节点建立SSH信任关系
管理节点(ansible)追踪创建密钥对
[root@localhost ~]# ssh-keygen -t rsa
1
将本地的公钥传输到被管理节点
(每个被管理节点都需要传递)
(需要被管理节点的用户名和密码)
[root@localhost ~]# ssh-copy-id root@192.168.1.134
[root@localhost ~]# ssh root@192.168.1.134
1
2
5.快速入门
5.1 场景假设
管理节点
192.168.1.133 主机名 server
被管理节点(资产):
192.168.1.134
且管理节点 和 被管理节点之间的节点已经打通SSH信任关系
1
2
3
4
5
6
7
8
5.2 场景一
在管理节点上,测试所有被管理节点的网络连通性
# ansible all -i 192.168.1.134, -m ping
1
2
3
[WARNING]: Unable to parse /root/192.168.1.134 as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
‘all’
注意 -i 参数后面排的是一个列表(List),因此当为一个被管理节点时,我们后面一定要加一个英文逗号(,)告知是List
ansible all -i 192.168.1.134, -m ping
1
在/etc/hosts 添加:192.168.1.134 client
通过主机名:需要在/etc/ansible/hosts 中Ex 1那块添加client
5.3 场景二
在管理节点上,确保文件/tmp/a.conf 发布到所有被管理节点
touch /tmp/a.conf
ansible all -i 192.168.1.134, -m copy -a "src=/tmp/a.conf dest=/tmp/"
all 在ansible中,将其叫做pattern,即匹配。我通常称它为资产选择器。就是匹配资产(-i参数指定)中的一部分。这里的all是匹配所有指定的所有资产。将在下面资产部分详细阐述。
-i指定Ansible的资产,也就是被管理服务器。
-m指定要运行的模块,比如这里的ping模块和copy模块
-a 指定模块的参数,这里模块ping 没有指定参数。模块copy指定了src和dest参数。
1
2
3
4
5
6
7
在client端被管理节点查看
总结一句话:ansible就是用什么模块,让谁去干什么事情。
6.Ansible资产
在快速入门的场景中,我们一共管理了两台服务器。但是在实际场景中,我们要管理的服务器往往要多得多。难道依然要在Ansible的-i参数后面一个个追加IP指定吗?这显然不合乎常理。
因此这一节我们主要去介绍一下Ansible的资产。
Ansible的资产分为静态资产和动态资产,动态资产会在后面的高级部分详细阐释。
6.1 静态资产
顾名思义它本身是一个文本文件,一个格式类似INI的文件。默认情况下,Ansible的资产文件位于 /etc/ansible/hosts。
我们这里给出一个自定义的静态资产实例,然后再具体解释其含义。
cat inventory
1.1.1.1
2.2.2.2
3.3.3.[1:15] # 表示3.3.3.1 ~ 3.3.3.15
test01.biudefor.com
test03.biudefor.com
test[05:09].biudefor.com
[web_servers] # 组名
10.3.134.4 # 组内成员
10.3.134.3
10.3.134.5
[db_servers] # 组名
10.3.134.4 # 组内成员
10.3.134.3
10.3.134.5
[all_servers] # 组名
[all_servers:children] # 子组
db_servers # 子组成员
web_servers
1、Ansible 的资产文件中,可以以IP地址的形式或者主机名的形式存在
2、Ansible 的资产若连续,可以使用[stat:end] 的形式去表达
3、可以将服务器按照业务场景定义成组,比如db_servers 和 web_servers
4、组和组之间可以存在继承关系,比如db_servers 和 web_servers 同时继承all_servers 组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
如何使用自定义资产
// 通过 -i 参数指定自定义资产的位置即可(可以是全路径,也可以是相对路径)。
# ansible all -i inventory.ini ... // 伪指令,不可执行
1
2
如何验证自定义资产
// 假如我们刚刚定义的资产为 inventory.ini
列举出所有资产
# ansible all -i inventory.ini --list-hosts
1
列举出选定资产
比如这里列举出web-servers短横线是错误写法 web_servers
// 注意这里使用的了资产选择器(pattern),我们将会在下面对他进行详细的阐述
# ansible web_servers -i inventory.ini --list-hosts
1
// 以上指令,若能列举出我们在资产中定义的服务器,那么你的自定义资产也就生效了。 如下图,列出所有资产
6.2 动态资产
动态资产, -i 参数后面接的是一个可运行的脚本。脚本的结果为一个 Ansible 可理解的 JSON 格式字符串。
为什么要存在动态资产呢? 往往我们在使用 Ansible 管理服务器前,公司中有可能已经将服务器信息存储在了特定位置,比如 CMDB, 数据库等系统。
此时若我们再使用静态资产去管理服务器,势必会造成资产管理入口不统一的问题。
因此我们只能抛弃原先的静态资产,通过脚本从已存在的系统中获取要管理的节点,并按照特定的形式传给 Ansible。这样既解决了公司资产统一入口, 也解决了Ansible 的服务器管理来源。
{
"_meta": {
"hostvars": {
"10.3.134.3": {
"host_var": "hoge"
},
"10.3.134.4": {
"host_var": "fuga"
}
}
},
"sample-servers": {
"hosts": [
"10.3.134.3",
"10.3.134.4"
],
"vars": {
"group_var": "hogefuga"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
6.3 资产选择器
有时操作者希望只对资产中的一部分服务器进行操作,而不是资产中列举的所有服务器
基本语法格式:
ansible PATTERN -i inventory -m module -a argument
选择一台或者几台服务器
# ansible 1.1.1.1 -i inventory.ini --list-hosts
# ansible test01.biudefor.com -i inventory.ini --list-hosts
# ansible 1.1.1.1,2.2.2.2 -i inventory.ini --list-hosts
1
2
3
4
选择所有服务器
# ansible '*' -i inventory.ini --list-hosts
# ansible all -i inventory.ini --list-hosts
1
2
3
选择一组服务器
# ansible web_servers -i inventory.ini --list-hosts
# ansible db_servers -i inventory.ini --list-hosts
# ansible all_servers -i inventory.ini --list-hosts
1
2
3
使用 * 匹配
# ansible 3.3.3.* -i inventory.ini --list-hosts
1
使用逻辑匹配
// web_servers 和 db_servers 的并集
# ansible 'web_servers:db_servers' -i inventory.ini --list-hosts
// web_servers 和 db_servers 的交集
# ansible 'web_servers:&db_servers' -i inventory.ini --list-hosts
// 在 web_servers 中, 但不在 db_servers 的服务器
# ansible 'web_servers:!db_servers' -i inventory.ini --list-hosts
————————————————
版权声明:本文为CSDN博主「果子哥丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39578545/article/details/107132288