ansible自动化运维工具
Ansible是一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。Ansible是基于Python开发,可以对其二次开发;Ansible具有丰富的内置模块,通过本身集成的模块实现各种管理任务;无客户端模式,底层通过SSH通信。
一. 如何使用Ansible实现自动化运维
1. CMDB方式: 通过CMDB直接下发指令调用ansible工具集完成
2. Public/private方式:以API调用方式运行
3. Ad-Hoc命令集:直接通过Ad-Hoc命令集调用Ansible工具集来完成任务
4. Playbooks:预先编写好Ansible Playbooks。任务脚本,编排定义Ansible任务及的配置文件,由Ansible按序依次执行,通常是JSON格式的YML文件。
二. Ansible工具集
Ansible工具集包含Inventory、Modules、Plugins和API。
Inventory:Ansible管理主机清单,用来管理设备列表,可以通过分组实现,对组的调用直接影响组内所有的主机。
Modules:Ansible执行命令功能模块,多数为内置的核心模块,也可自定义
Plugins:模块功能的补充,各种插件,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不太常用
API:应用程序编程接口
三. Ansile的配置
1. Ansile的安装
Ansible的管理端只能是Linux,如Redhat、Debian、CentOS。可以通过yum安装
安装epel源: yum install -y epel-release
安装ansible: yum install ansible -y
查看ansible版本:ansible --version
ansible的程序机构
2. 配置主机清单
vim /etc/ansible/hosts
3. 设置SSH无密码登录
Ansible通过SSH对设备进行管理,而SSH包含两种认证方式:一种是通过密码认证,另一种是通过密钥对验证。前者必须和系统交互,而后者是免交互登录。
ssh-keygen -t rsa
4.配置秘钥对验证
ssh-copy-id -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /root/.ssh/id_rsa.pub root@192.168.146.128
ssh-copy-id -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /root/.ssh/id_rsa.pub root@192.168.146.5
5. 免交互代理
ssh-agent bash
ssh-add
6. 通过Ansible对设备进行管理
Inventory是Ansible管理主机信息的配置文件,相当于系统Hosts文件的功能,默认存放在/etc/ansible/hosts。在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分组,通过在ansible命令中使用选项-i或--inventory-file来指定Inventory。(注:使用默认的Inventory文件(/etc/ansible/hosts),也可以不指定Inventory文件)
ansible 192.168.146.128 -m command -a "df -h"
出现报错,解决办法:
修改配置文件 /etc/ansible/ansible.cfg,让host_key_checking=False这行生效,实现跳过 ssh 首次连接提示验证部分。
再次执行 ansible 192.168.146.128 -m command -a "df -h"
ansible mySQL -m ping
7. Ansible命令
1)ansible
一次性使用:ansible [options]
可用选项如下:
-v(--verbose):输出详细的执行过程信息,可以得到执行过程所有信息;
-i PATH(--inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts;
-f NUM(--forks=NUM):并发线程数,默认为5个线程;
--private-key=PRIVATE_KEY_FILE:指定密钥文件;
-m NAME,--module-name=NAME:指定执行使用的模块;
-M DIRECTORY(--module-path=DIRECTORY) :指定模块存放路径,默认为/usr/share/ansible;
-a ARGUMENTS(--args=ARGUMENTS):指定模块参数;
-u USERNAME(--user=USERNAME):指定远程主机以USERNAME运行命令;
- -l subset(--limit=SUBSET):限制运行主机;
(1)检查所有主机是否存活
ansible all -f 5 -m ping
(2)列出mySQL组和web组所有的主机列表,执行命令如下
ansible mySQL --list
Ansible的返回结果非常友好,一般会用三种颜色来表示执行结果:
-
红色:表示执行过程出现异常;
-
橘黄颜色:表示命令执行后目标有状态变化;
- 绿色:表示执行成功且没有目标机器做修改。
2)ansible-doc
ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍。
ansible-doc [options] [modules...]
列出支持的模块:ansible-doc -l
查询ping模块的详细信息: ansible-doc ping
3)ansible-playbook
Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux中的sh或source命令,用来执行系列任务。其工作机制:通过读取预先编写好的playbook文件实现集中处理任务。Ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下:
ansible-playbook playbook.yml
4)ansible-console
Ansible-console是Ansible为用户提供的一款交互式工具,类似于Windows的cmd或者是Linux中shell。用户可以在ansible-console虚拟出来的终端上像shell一样使用Ansible内置的各种命令,这为习惯于使用shell交互式方式的用户提供了良好的使用体验.