Ansible概述
Ansible是一个配置管理系统configuration management system
python 语言是运维人员必须会的语言
ansible 是一个基于python 开发的自动化运维工具
其功能实现基于ssh远程连接服务
ansible 可以实现批量系统配置,批量软件部署,批量文件拷贝,批量运行命令等功能
除了ansible之外,还有saltstack 等批量管理软件
Ansible能做什么
ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。
比如:同时在100台服务器上安装nginx服务,并在安装后启动服务。
比如:将某个文件一次性拷贝到100台服务器上。
比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。
这些场景中我们都可以使用到ansible。
ansible批量管理服务意义
01. 提高工作的效率
02. 提高工作准确度
03. 减少维护的成本
04. 减少重复性工作
ansible批量管理服务功能
01. 可以实现批量系统操作配置
02. 可以实现批量软件服务部署
03. 可以实现批量文件数据分发
04. 可以实现批量系统信息收集
Ansible软件特点
1.ansible不需要单独安装客户端,SSH相当于ansible客户端。
2.ansible不需要启动任何服务,仅需安装对应工具即可。
3.ansible依赖大量的python模块来实现批量管理。
4.ansible配置文件/etc/ansible/ansible.cfg
Ansible基础架构
1.连接插件(connectior plugins) 用于连接主机 用来连接被管理端
2.核心模块(core modules) 连接主机实现操作, 它依赖于具体的模块来做具体的事情
3.自定义模块(custom modules) 根据自己的需求编写具体的模块
4.插件(plugins) 完成模块功能的补充
5.剧本(playbooks)ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6.主机清单(host inventory)定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块
不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端
不需要服务端(no sever)
需要依靠大量的模块实现批量管理
配置文件 /etc/ansible/ansible.cfg (前期不用配置)
ansible自动化运维实例
1. ansible 安装
安装tree命令---便于查看ansible工作目录
[root@localhost ~]# yum -y install tree
上传ansible相关软件,创建本地yum仓库
[root@localhost ~]# mv ansiblerepo/ /usr/src/
[root@localhost ~]# du -sh /usr/src/ansiblerepo/
[root@localhost ~]# vim /etc/yum.repos.d/local.repo
[local]
name=centos7.4
baseurl=file:///usr/src/ansiblerepo
enabled=1
gpgcheck=0
[root@localhost ~]# yum clean all
安装ansible
[root@localhost ~]# yum -y install ansible
查看ansible版本
[root@localhost ~]# ansible --version
ansible 2.3.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
2.为了便于管理远程主机,配置ssh信任
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ##公钥和私钥默认保存位置
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): ##可设置验证密码,默认
Enter same passphrase again: ##默认
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Jws2KHO5W171BF6gKDN9Oudo0D2VKmYNRJKxKbQfsmA root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| . o+o . |
| . ..* . . o |
|.E+ B + o + . |
|.. = O * + o |
| + * @ S + . |
| + * O * o |
| . + + . |
| = . |
| . . |
+----[SHA256]-----+
传输私钥到远程主机
[root@localhost ~]# ssh-copy-id root@192.168.10.2
根据提示输入:
yes
输入:root密码
[root@localhost ~]# ssh-copy-id root@192.168.10.3
验证:无须输入密码即可远程登录
[root@localhost ~]# ssh 192.168.10.2
查看ip是否是远程主机
[root@localhost ~]# ip a
[root@localhost ~]# exit
[root@localhost ~]# ssh 192.168.10.3
[root@localhost ~]# ip a
[root@localhost ~]# exit
----ansilble基础管理------
yum install -y ansible --- 需要依赖epel的yum源
/etc/ansible/ansible.cfg --- ansible服务配置文件
/etc/ansible/hosts --- 主机清单文件 定义可以管理的主机信息
/etc/ansible/roles --- 角色目录???
1. Ansible清单管理/etc/ansible/hosts
inventory文件通常用于定义要管理主机的认证信息, 例如ssh登录用户名、密码以及key相关信息。
主机
1.支持主机名通配以及正则表达式,例如web[1:3].oldboy.com
2.支持基于非标准的ssh端口,例如web1.oldboy.com:6666
3.支持指定变量,可对个别主机的特殊配置,如登陆用户,密码等
主机组
1.支持嵌套组,例如[game:children],那么在game模块下面的组都会被game所包含
2.支持指定变量,例如[game:vars]在下面指定变量
[root@localhost ~]# vim /etc/ansible/hosts
[web] ## 主机组
192.168.10.2
192.168.10.3
[test01]
www.bdqn.cn:222 ##通过端口222管理设备
[mail]
ly01.mail.cn
[ly]
ly[2:5].test.com ##正则表达式:表示4台主机ly2,ly3,ly4,ly5..
验证:可以对组或组中成员进行远程操作
--limit 限制为组中成员
只对web组中192.168.10.2主机进行命令操作
[root@localhost ~]# ansible web -m command -a "ip a" --limit "192.168.10.2"
192.168.10.2 | SUCCESS | rc=0 >>
……………………
通过指定主机来远程操作
[root@localhost ~]# ansible 192.168.10.3 -m command -a "ip a"
192.168.10.3 | SUCCESS | rc=0 >>
通过通配符来指定多个主机远程操作
[root@localhost ~]# ansible 192.168.10.* -m command -a "firewall-cmd --state"
192.168.10.2 | FAILED | rc=252 >>
not running
192.168.10.3 | FAILED | rc=252 >>
not running
------------------------------------------
Ansible注意事项->提示颜色信息说明
黄色:对远程节点进行相应修改
绿色:对远程节点不进行相应修改,或者只是对远程节点信息进行查看
红色:操作执行命令有异常
紫色:表示对命令执行发出警告信息(可能存在的问题,给你一下建议)
-----------------------------------------------------
2.ansible命令
ansible应用场景:多用于临时的、无规律的任务操作
--非固化需求
--临时一次性操作
--二次开发接口调用
检查清单中所有主机是否存活
-f 并发线程数为5
-m 调用ping模块(并不是ping命令)
[root@localhost ~]# ansible all -f 5 -m ping
## success---表示成功; => {} 表示返回结果
## changed false 表示没有对主机进行更改
##pong ---ping模块返回结果
192.168.10.3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.10.2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
列出web组主机列表
[root@localhost ~]# ansible web --list
hosts (2):
192.168.10.2
192.168.10.3
批量显示web组磁盘使用情况
[root@localhost ~]# ansible web -m command -a "df -hT"
3.ansible-doc 可用来查询模块文档的说明,类似于man
列出所有模块信息
[root@localho