Ansible概念
ansible是自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。说白了,Ansible就是在一台或多台服务器上执行一系列命令而已。主要包括:
(1)、连接插件connectionplugins:负责和被监控端实现通信
(2)、hostinventory:指定操作的主机,是一个配置文件里面定义监控的主机
(3)、各种模块核心模块、command模块、自定义模块
(4)、借助于插件完成记录日志邮件等功能
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
Ansible可以实现很多工具的功能,如下图:
Ansible和其它自动化工具比较
Ansible无需在被控主机部署任何代理程序,默认直接通过ssh通道进行远程命令执行和下发配置。具有功能强大、系统管理灵活等特点。两者都提供丰富的模板和API,对云计算、大数据都有很好的支持。
同类自动化工具GitHub关注程度(2016-07-10)
同类自动化工具 |
watch(关注) |
star(点赞) |
fork(复制) |
Contributors(贡献者) |
Ansible |
1387 |
17716 |
5356 |
1428 |
Puppet |
463 |
4044 |
1678 |
425 |
Chef |
383 |
4333 |
1806 |
464 |
Fabric |
379 |
7334 |
1235 |
116 |
Ansible架构
Ansible:Ansible核心程序。
HostLnventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules:核心模块,来完成管理任务。先调用此中的模块,再指定HostLnventory中的主机来完成管理任务。
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
ConnectionPlugins:连接插件,做通信使用。
Ansible 工作机制
Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执 行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排
1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块
2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc
3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件
ansible的任务执行流程
(1)读取配置
(2)抓取全量机器&分组列表
可从多个静态文件、文件夹、脚本中读取机器,分组及其变关联量信息。
(3)使用host-pattern过滤机器列表
(4)根据参数确定执行模块和配置
从modules目录动态读取,用户可以自行开发模块。
(5)Runner执行返回
Connection环节定义连接方式 => Action阶段机器列表(Lookup plugin Action变量/文件等资源的获取)
Callback plugin各阶段的钩子调用
(6)输出结束
Filter plugin过滤算子
Callback plugin各阶段的钩子调用
Ansible特性:
(1)、Agentless(去中心化)
(2)、noserver:无服务器端,使用时直接运行命令即可
(3)、模块化:调用特定模块,完成特定任务,支持自定义模块
(4)、yaml,notcode:使用yaml语言定制剧本playbook
(5)、sshbydefault:基于SSH工作
(6)、strongmulti-tiersolution:可实现多级指挥
(7)、冥等性
优点:
(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单,ruby语法过于复杂;
(4)、支持sudo。
Ansible工作机制
Ansble目录结构图:
Ansible主要组成部分:
ANSIBLEPLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单
MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。
API:供第三方程序调用的应用程序编程接口
ANSIBLE:该部分图中表示的不明显,组合INVENTORY、API、MODULES、PLUGINS的绿框大家可以理解为是Ansible命令工具,其为核心执行工具
Ansible组件调用关系:
自动化发布:
测试环境
Dev测试环境
测试环境
灰度环境
发布环境
生产环境
灰度发布
指在黑与白之间,能够平滑过渡的一种发布方式ABtest就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响
自动化发布:
发布机/Master/管理机/堡垒机
统一入口、规范管理
利用手机APP动态口令等验证机制
托管服务器密码,实现自动改密
事中控制,防止违规
操作精细化审计,追溯整个运维过程
目录摆放规范简述:
/srv/
/data/srv/
/web/
/app/
命名规范简述
一级:项目名
二级:打包时间
三级:版本号
主版本号.子版本号[.修正版本号[.编译版本号]]
四级:版本特性
示例:webapp-201704041220-V1.0.10.0-Beta
webapp-201705051220-V1.1.12.0-Stable
参考文档:
https://github.com/ansible/ansible
原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/79474