一、ansible概述
Ansible是一个IT自动化的配置管理工具,自动化主要体现在Ansible集成了丰富的模块,以及强大的功能组件,可以通过一个命令完成一系列的操作。
- ansible的功能
- 批量执行远程命令,可以同时对N台主机执行。
- 批量配置软件服务,可以进行自动化的方式配置和管理服务
- 实现软件开发功能
- 编排高级的IT任务,ansible的playbook是一门编程语言,可以用来描述一套IT架构。
- ansible的特性
- 容易学习:无代理,基于ssh实现,不像saltstack既要学习客户端与服务端,还需要学习客户端与服务端中间通讯协议;
- 操作灵活:ansible有较多的模块,提供了丰富的功能、playbook则提供了类似于编程语言的复杂功能
- 简单易用:体现在ansible一个命令可以完成很多事情
- 安全可靠:因为ansible使用了SSH协议进行通讯,既稳定也安全;
- 移植性高:可以将写好的playbook拷贝到任意机器执行;
- 幂等性:一个任务执行1遍和执行N遍效果一样,不会因为重复执行带来的意外情况;
- ansible的架构图
- ansible工作原理
-
- ansible-playbooks:任务剧本,编排定义任务集的文件,通常是json或者yaml格式
- ansible:核心,实现管理的方式
- inventory:管理主机清单,/etc/ansible/hosts
- modules:ansible执行命令的功能模块,多数为内置核心模块,也可自定义;
- Plugins:完成模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用;
- API:供第三方程序调用的应用程序编程接口;
- Ansible主要操作对象:HOSTS主机,主机组和NETWORKING网络设备;
利用ansible实现管理的方式ad-hoc:执行单条命令ansible-playbook:主要用于长期规划好的大型项目场景
ansible命令执行过程
- 加载自己的配置文件,默认是 /etc/ansible/ansible.cfg;
- 查找对应的主机配置文件,找到要执行的主机或者组
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件(Python脚本),并将该文件传输至远程服务器;
- 对应执行用户的根目录的.ansible/tmp/xxx.py文件;
- 给文件+x执行权限
- 执行并返回结果;
- 删除临时py文件,sleep 0 退出;
ansible注意事项
- 执行ansible的主机一般称为主控端,中控,master或者堡垒机;
- 主控端Python版本需要在2.6以上;
- 被控端Python版本小于2.4需要安装Python-simplejson
- 被控端如开启SELinux需要安装libselinux-python
- windows不能作为主控端
- 建议使用ssh的秘钥验证方式管理被控主机