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