一、Ansible概述
ansible是一个自动化统一配置管理工具,自动化主要体现在ansible集成了丰富的命令模块
以及功能组件,可以通过一个命令完成一系列的操作。从而减少重复性的工作和维护成本,可以提升
工作的效率。想象一下我们有三千台主机,假设我的log目录都告警了。我怎么快速的清理。或者说我
想安装一个telnet网络测试工具,在三千台机器上。
1.puppet 学习难,安装ruby环境难,没有远程执行功能
2.ansible 轻量级,大规模环境下只通过ssh会很慢,串行的
3.saltstack 一般选择salt会使用C/S结构的模式,salt-master和salt-minion,并行的,大规模批量操
作的情况下,会比Ansible速度快一些,底层使用的是zero-MQ消协队列
1.提高工作效率
2.节约人力成本
3.减少重复性工作量
4.提高工作准确度
1.远程执行
批量执行远程命令,可以对台主机远程操作
2.配置管理
批量配置软件,可以自动分发配置文件,服务统一管理启动或停止
3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理
4.管理公有云
通过API接口的方式管理公有云
5.二次开发
因为语法是Python,所以便于运维进行二次开发。
6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
7.跨平台,跨系统
几乎不受到平台和系统的限制,比如安装apache和启动服务
二、Ansiable架构
1、连接插件connection plugins用于连接主机 用来连接被管理端
2、核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情
3、自定义模块custom modules根据自己的需求编写具体的模块
4、插件plugins完成模块功能的补充
5、剧本playbook ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单inventor定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表。
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行
三、安装Ansible
- 环境准备
![在这里插入图片描述](http://img.e-com-net.com/image/info8/036e0a77c5ff4f98a2102d467051210e.png)
- ansible安装
[root@maaster01 ~]
[root@master01 ~]
ansible 2.9.6
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, Oct 30 2019, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
--version
-v
-i
-m
-a
-k
-C
-T
[root@master01 ~]
[root@master01 ~]
For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command.
/etc/ansible/ansible.cfg \-\- Config file, used if present
~/.ansible.cfg \-\- User config file, overrides the default config if present
\&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present.
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.
Ansible配置文件读取顺序:
1. $ANSIBLE_CONFIG
2. ./ansible.cfg
3. ~/.ansible.cfg
4. /etc/ansible/ansible.cfg (正常情况只使用该配置文件)
[root@master01 ~]
host_key_checking = False
log_path = /var/log/ansible.log
[privilege_escalation]
四、主机清单配置方式
[root@m01 ~]
[node01]
10.0.0.12 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[node02]
10.0.0.13 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
[node01]
node01 ansible_ssh_pass='1'
[node02]
node02 ansible_ssh_pass='1'
[node01]
node01
[node01:vars]
ansible_ssh_pass='1'
[root@master01 ~]
[root@master01 ~]
[root@master01 ~]
[root@master01 ~]
[node001]
10.0.0.12
[node002]
10.0.0.13
[node1]
node01
[node2]
node02
[root@master01 ~]
[web_group]
node01
node02
[lb_group]
172.20.1.14 ansible_ssh_pass='1'
[root@master01 ~]
hosts (2):
node01
node02
[root@master01 ~]
hosts (4):
172.20.1.14
node01
node02
[root@master01 ~]
[root@master01 ~]
172.20.1.14 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 105 739 7 127 718
Swap: 1023 0 1023
node01 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 117 439 7 416 671
Swap: 1023 0 1023
[root@master01 ~]
172.20.1.14 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 105 739 7 127 718
Swap: 1023 0 1023
node01 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 117 439 7 416 671
Swap: 1023 0 1023
[root@master01 ~]
[web_group]
node01
172.20.1.14 ansible_ssh_pass='1'
[root@master01 ~]
[web_group]
node01
node02
[lb_group]
172.20.1.14 ansible_ssh_pass='1'
[nginx_group:children]
web_group
lb_group
[root@master01 ~]
[WARNING]: Could not match supplied host pattern, ignoring: children(警告可以忽略 children)
hosts (4):
node01
node02
172.20.1.14
[root@master01 ~]
hosts (4):
node01
node02
172.20.1.14
[root@m01 ~]
10.0.0.12 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.13 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.14 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}