Ansible根底概述
Ansible是一个自动化对立配置管理工具,自动化次要体现在Ansible集成了丰盛模块以及性能组件,能够通过一个命令实现一系列的操作,进而能缩小重复性的工作和保护老本,能够进步工作效率。

同类型软件比照
Ansible
Saltstack
puppet
比照

Puppet

Ansible

Saltstack

开发语言

ruby

python

python

近程执行性能

没有

有、串行

有、并行

客户端

没有

没有

架构

SSh

C/S、也反对SSh

Ansible的性能
1.近程执行
批量执行近程命令,能够对多台主机进行近程操作

2.配置管理
批量配置软件服务,能够进行自动化形式配置,服务的对立配置管理,和启停

3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比方:
1)批改配置后重启
2)只批改配置文件,不重启
3)批改配置文件后,从新加载
4)近程启停服务治理

4.治理私有云
通过API接口的形式治理私有云,不过这方面做的不如saltstack.
saltstack自身能够通过saltcloud治理各大云厂商的云平台。

5.二次开发
因为语法是Python,所以便于运维进行二次开发。

6.工作编排
能够通过playbook的形式来对立治理服务,并且能够应用一条命令,实现一套架构的部署

7.跨平台,跨零碎
简直不受到平台和零碎的限度,比方装置apache和启动+服务

在Ubuntu上装置apache服务名字叫apache2
在CentOS上装置apache服务名字叫httpd

在CentOS6上启动服务器应用命令:/etc/init.d/nginx start
在CentOS7上启动服务器应用命令:systemctl start nginx
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.
31.
32.
Ansible架构

1、连贯插件connection plugins用于连贯主机 用来连贯被治理端

2、外围模块core modules连贯主机实现操作, 它依赖于具体的模块来做具体的事件

3、自定义模块custom modules依据本人的需要编写具体的模块

4、插件plugins实现模块性能的补充

5、剧本playbookansible的配置文件,将多个工作定义在剧本中,由ansible主动执行

6、主机清单inventor定义ansible须要操作主机的范畴 最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

Ansible执行流程
1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些工作。

2.首先Ansible通过主机清单找到要执行的主机,而后调用具体的模块。

3.其次Ansible会通过连贯插件连贯对应的主机并推送对应的工作列表。

4.最初被治理的主机会将Ansible发送过去的工作解析为本地Shell命令执行。

Ansible装置部署
主机名

WanIP

LanIP

角色

m01

10.0.0.61

172.16.1.61

Ansible管制端

web01

10.0.0.7

172.16.1.7

被控端

web02

10.0.0.8

172.16.1.8

被控端

装置Ansible

1.装置ansible 要有epel源

[root@m01 ]# yum install -y ansible

2.ansible命令选项

--version #ansible版本信息
-v #显示详细信息
-i #主机清单文件门路,默认是在/etc/ansible/hosts
-m #应用的模块名称,默认应用command模块
-a #应用的模块参数,模块的具体动作
-k #提醒输出ssh明码,而不应用基于ssh的密钥认证
-C #模仿执行测试,但不会真的执行
-T #执行命令的超时

[root@m01 ]# ansible --version

Ansible版本号

ansible 2.9.27
## ansible默认配置文件
config file = /etc/ansible/ansible.cfg
## 配置文件模块门路
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
## python模块门路
ansible python module location = /usr/lib/python2.7/site-packages/ansible
## ansible可执行命令的门路
executable location = /usr/bin/ansible
## Python版本
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
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.
Ansible配置文件读取程序
1、$ANSIBLE_CONFIG

2、./ansible.cfg

3、~/.ansible.cfg

4、/etc/ansible/ansible.cfg

Ansible配置文件
[root@m01 ]# vim /etc/ansible/ansible.cfg
log_path = /var/log/ansible.log # 111(勾销正文)
host_key_checking = False # 71(勾销正文)

inventory = /etc/ansible/hosts #主机列表配置文件

library = /usr/share/my_modules/ #库文件寄存目录

remote_tmp = /.ansible/tmp #长期py文件寄存在近程主机目录

local_tmp = ~/.ansible/tmp #本机的长期执行目录

forks = 5 #默认并发数

sudo_user = root #默认sudo用户

ask_sudo_pass = True #每次执行是否询问sudo的ssh明码

ask_pass = True #每次执行是否询问ssh明码

remote_port = 22 #近程主机端口

host_key_checking = False #跳过查看主机指纹
log_path = /var/log/ansible.log #ansible日志
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Ansible Inventory(主机清单)
应用IP+端口+用户+明码
[root@m01 ]# vim /etc/ansible/hosts
[web]
10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
10.0.0.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

检测web主机是否通

[root@m01 ]# ansible web -m ping
10.0.0.7 | SUCCESS => {

"ansible_facts": {    "discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"

}
10.0.0.8 | SUCCESS => {

"ansible_facts": {    "discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"

}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
主机名加明码

留神:该形式,须要做域名解析,把主机名解析在IP上,否则ansible无奈辨认

[root@m01 ]# vim /etc/ansible/hosts
[web]
web0[1:2] ansible_ssh_pass='1'

域名解析

[root@m01 ]# vim /etc/hosts
10.0.0.7 web01
10.0.0.8 web02

[root@m01 ~]# ansible web -m ping
web02 | SUCCESS => {

"ansible_facts": {    "discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"

}
web01 | SUCCESS => {

"ansible_facts": {    "discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"

}
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.
变量形式 主机名加明码
[root@m01 ]# vim /etc/ansible/hosts
[web]
web0[1:2]
[web_group:vars]
ansible_ssh_pass='1'

域名解析

[root@m01 ]# vim /etc/hosts
10.0.0.7 web01
10.0.0.8 web02
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
应用秘钥连贯

1.先在治理机上生成秘钥对

[root@m01 ]# ssh-keygen

2.推送公钥

[root@m01 ]# ssh-copy-id -i /.ssh/id_rsa.pub 172.16.1.7
[root@m01
]# ssh-copy-id -i /.ssh/id_rsa.pub 172.16.1.8

[root@m01 ]# vim /etc/ansible/hosts
[web]
10.0.0.7
10.0.0.8

[root@m01 ~]# ansible web -m ping
10.0.0.8 | SUCCESS => {

"ansible_facts": {    "discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"

}
10.0.0.7 | SUCCESS => {

"ansible_facts": {    "discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"

}
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.
企业应用中级进化版
[root@m01 ~]# vim /etc/ansible/hosts
[web]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

秘钥

1.
2.
3.
4.
5.
6.
配置主机标签组

标签组配置语法

[标签组名字:children]
主机标签名1
主机标签名2

[root@m01 ]# vim /etc/ansible/hosts
[web]
10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
10.0.0.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

[lb]
10.0.0.5 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'
10.0.0.6 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='1'

[lnmp:children]
web
lb

[root@m01 ]# ansible lnmp -m ping

ansible主机写法:

主机清单中的所有主机

[root@m01 ]# ansible all -m ping

只针对某一台主机

[root@m01 ]# ansible web01 -m ping

针对某一个IP

[root@m01 ]# ansible 10.0.0.7 -m ping

指定某一个标签名中的所有主机

[root@m01 ]# ansible web -m ping

指定某一个标签组中的所有主机

[root@m01 ~]# ansible lnmp -m ping
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.
31.
32.
33.
34.
35.

参考链接:
2 ways to check ansible version in Linux