常用自动化工具
- ansible:Python,agentless,适用于中小型应用环境
- saltstack:python,一般需要部署agent,执行效率更高
- puppet:ruby,功能强大、配置复杂,重型,适合大型环境
- Fabic:Python,agentless
- chef:ruby,国内应用较少
ansible应用举例
场景:公司计划在年代做一次大型的市场促销活动,全面冲刺下交易额,为明年上市做市场准备,公司要求所有业务组对年底大促销做准备,运维部要求所有业务容量进行三倍扩容,并搭建出多套环境可以供开发和测试人员做测试。运维老大为了年底表现,要求所有运维部同学尽快实现。
Ansible发展史
- ansible
- 创始人,Michael DeHaan(cobbler与Func的作者)
- 2012-03-09,发布0.0.1版本,红帽收购
- 2015-10-17,red Hat宣布收购
特性
- 模块化:调用特定的模块完成特定的任务(ansible模块相当于Linux的一条条命令,现在约有1000多个模块)
- 有paramiko,pyYAML,jinja2(模板语言)三个关键模块
- 支持自定义模块
- 基于python语言实现
- 部署简单、基于python和SSH(默认已经安装)agenlless
- 安全,基于OpenSSH
- 支持playbook编排任务(相当于脚本,实现复杂任务的组合,复杂的编写角色)
- 幂等性:一个任务执行1遍和执行N遍效果一样,不会因为重复执行而带来意外(适用于调试)
- 无需代理不依赖PKI(无需ssl)
- 可以使用任何语言编写模块
- YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案
ansible架构
用户--控制端--被控端三层架构:用户通过控制端管理被控端
- 通过用户清单(inventory)获得需要管理的主机
- 管理主机可以通过单一命令实现(模块),组合命令(playbook)
- 通过ssh协议连接主机
ansible工作原理
ansible主要的组成部分
- ansible playbook:任务剧本(任务集)编排定义ansible任务集的配置文件,由ansible顺序依次执行,通常是json格式的YML文件
- inventory:管理主机的清单
- modules:执行命令的功能模块,多数为内在核心模块,可以自定义
- plugins:功能模块的补充,如连接插件,循环插件,变量插件,过滤插件等,该功能不常用
- API:供第三方程序调用的应用程序编程接口
- ansible:组合inventory、api、modules、plugins,可以理解为是ansible命令工具,其核心是执行工具
- ansible命令来源
- user:普通用户,即system、administrator
- cmdb 的api调用
- 公有云/私有云调用
- user->ansible playbook->ansible
- 利用ansible实现管理的方式
- ad-hoc,即ansible命令,主要用于临时命令使用场景
- ansible-playbook主要用于长期规划好的,大型项目场景,需要有前提的规划
- ansible-playbook(剧本)执行过程
- 将已有编排好的任务集写入ansible-playbook
- 通过ansib-playbook命令将命令拆分任务集至逐条ansible命令,按预定规则逐条执行
- ansible主要操作对象
- hosts主机
- networking网络设备
- 注意事项
- 执行ansible的主机一般称为主控端,中控,master或堡垒机
- 主控端Python版本需要2.6或以上
- 被控股端python版本小于2.4需要安装python-simplejson
- 被控端如开启selinux需要安装libselinux-python
- Windows不能作为主控端