Ansible简介
ansible是一个自动化批量部署工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
Ansible基于Python开发,底层拥有python三大模块 :
paramiko
jinja2
yaml
1.总体构架
Ansible:Ansible的核心程序
Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root账号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks:yaml格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能。
Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
Cinnection Plugins:连接插件,Ansible和Host通信使用
2.工作原理:
ansible加载hosts文件,通过免秘钥或配置文件参数来批量管理主机
agent:ansibel不需要客户端或agent(代理)
3.Ansible优点:
- Stupied Simple,上手简单,学习曲线平滑
- SSH by default,安全,无需安装客户端
- 配置简单、功能强大、扩展性强
- 支持API及自定义模块。可通过Python轻松扩展
- 通过Playbooks来定制强大的配置、状态管理
- 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
- 幂等性:一种操作重复多次结果相同
4.ansible安装
yum install epel-release -y
yum install ansible -y
5.ansible server管理客户端的两种配置方法
ansible server :192.168.30.30
受管理的客户端1:192.68.30.149
受管理的客户端2:192.68.30.150
第一种方法:
ansible server :ssh-keygen
[root@c1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): id_rsa.pub
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.pub.
Your public key has been saved in id_rsa.pub.pub.
The key fingerprint is:
SHA256:8E0RUOqcAZCmrA0eyOaa9O8rLbyAe2IpfPv8R8xvIL0 root@c1
The key's randomart image is:
+---[RSA 2048]----+
| .o. .o+. |
| o . . . |
|o. o . o . |
|o+o = = |
|++. S . |
|o+. . * |
|=o+ . o + |
|==o*.. E o |
|+o.oO*o.. . |
+----[SHA256]-----+
scp id_rsa.pub root@client ip:/root/.ssh/authorized_keys
[root@c1 ~]# scp /root/.ssh/id_rsa.pub root@192.168.30.149:/root/.ssh/authorized_keys
root@192.168.30.149's password:
id_rsa.pub 100% 389 411.2KB/s 00:00
[root@c1 ~]# scp /root/.ssh/id_rsa.pub root@192.168.30.151:/root/.ssh/authorized_keys
root@192.168.30.151's password:
id_rsa.pub 100% 389 11.2KB/s 00:00
ansible配置
[root@c1 ~]# vim /etc/ansible/ansible.cfg
......
remote_port = 22 #ssh端口号默认22,如果改的话ssh配置的端口号也得改
......
private_key_file = /root/.ssh/id_rsa #私钥文件路径
......
配置受管理的客户端组
[root@c1 ~]# vim /etc/ansible/hosts
......
#在最后添加
[testhosts]
192.168.30.149
192.168.30.151
ansible连通性测试:
[root@c1 ~]# ansible testhosts -m ping
192.168.30.149 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.30.151 | SUCCESS => {
"changed": false,
"ping": "pong"
}
执行命令测试:
[root@c1 ~]# ansible testhosts -m command -a 'uptime'
注意:第一次执行,需要输入yes来验证公钥,后续无需再输入
再次执行