Ansible 入门介绍
Ansible 软件及公司
ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT
工具。
这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化
的(AWS)云服务管理。
AnsibleWorks成立于2012年,由自动化工具Cobbler及Func的开发者Michael DeHaan创建。其
Ansible平台是一个开源的配置及计算机管理平台。可实现多节点的软件部署,执行特定任务并进行配
置管理。
Ansible跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提
Ansible极其类似Salt,而不太类似Puppet或Chef。Ansible关注的重点是力求精简和快速,而且不
需要在节点上安装代理软件。因此,Ansible通过SSH执行所有功能。Ansible基于Python;相比之下,
Puppet和Chef基于Ruby。
Ansible可以通过Git软件库克隆,安装到Ansible主服务器上。安装完毕后,需要管理的节点被添加到
Ansible配置环境,SSH授权密钥被附加到每个节点上,这与运行Ansible的用户有关。一旦完成了这步,
Ansible主服务器可以通过SSH与节点进行通信,执行所有必要的任务。为了与默认情况下不允许根SSH访问
的操作系统或发行版协同运行,Ansible接受sudo登录信息,以便在那些系统上以根用户的身份运行命令。
Ansible可以使用Paramiko(基于SSH2协议的Python实现)或标准SSH用于通信,不过还有一种加速模
式,允许更快速、更大规模的通信。
针对确保服务在运行,或者触发更新和重新启动之类的简单任务,Ansible可以从命令行来运行,不需要
使用配置文件。至于比较复杂的任务,Ansible配置通过名为Playbook的配置文件中的YAML语法来加以处
理。Playbook还可以使用模板来扩展其功能。
Ansible有一大批模块,可用于管理各种系统以及亚马逊弹性计算云(EC2)和OpenStack等云计算基础
设施。可以用几乎任何一种语言来编写自定义Ansible模块,只要模块输出是有效的JSON。
Ansible的Web用户界面以AnsibleWorks AWX的形式出现,但AWX与CLI并不直接联系在一起。这意味
着,除非进行了同步过程,否则CLI里面的配置元素不会出现在Web用户界面中。你可以使用那个内置的同步
工具,让两者保持一致,但需要按照预定计划运行同步工具。
Salt类似Ansible,因为它也是基于CLI的工具,采用了推送方法实现客户端通信。它可以通过Git或通
过程序包管理系统安装到主服务器和客户端上。客户端会向主服务器提出请求,请求在主服务器上得到接受
后,就可以控制该客户端了。
Salt可以通过普通的SSH与客户端进行通信,但如果使用名为minion的客户端代理软件,可以大大增强
可扩展性。此外,Salt含有一个异步文件服务器,可以为客户端加快文件服务速度,这完全是Salt注重高扩
展性的一个体现。
与Ansible一样,你可以直接通过CLI,向客户端发出命令,比如启动服务或安装程序包;你也可以使用
名为state的YAML配置文件,处理比较复杂的任务。还有“pillar”,这些是放在集中地方的数据集,YAML
配置文件可以在运行期间访问它们。
你可以直接通过CLI,向客户端请求配置信息,比如内核版本或网络接口方面的详细信息。只要使用名为
“grain”的库存元素,就可以描述客户端;这样一来,管理员可以轻松向某一种类型的服务器发出命令,不需
要依赖已配置群组。比如说,只要使用一个CLI命令,你就可以向运行某个内核版本的每个客户端发送命令。
与Puppet、Chef和Ansible一样,Salt也提供了大量的模块,以处理特定的软件、操作系统和云服
务。自定义模块可以用Python或PyDSL来编写。除了Unix管理外,Salt的确提供Windows管理功能,但它
还是更擅长管理Unix和Linux系统。
Salt的Web用户界面Halite非常新,功能不如其他系统的Web用户界面来得全面。它提供了事件日志和
客户端状态的视图,能够在客户端上运行命令,但除此之外乏善可陈。
Salt的较大优点在于可扩展性和弹性。你可以有多个级别的主服务器。上游主服务器可以控制下游主服务
器及其客户端。另一个优点在于对等系统,让客户端可以向主服务器提出问题,然后主服务器从其他服务器得
到答案,提供全面信息。如果需要在实时数据库中查询数据,以便完成客户端的配置,这个优点就很方便。
内部资料,仅限学习交流供一个统一的界面来协调所有的IT自动化功能,因此Ansible的系统更加易用,部署更快。受管理的节点
无需安装额外的远程控制软件,由平台通过SSH(Secure SHell)对其进行管理,因此十分方便。其模
块支持JSON等标准输出格式,可采用任何编程语言重写。
Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执
行。IT自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。
目前,Ansible已有30万用户,每月下载量接近3万次。其客户包括AppDynamics、Evernote 、MapR
以及金融服务、电信、医疗保健、媒体业的财富500强公司。
项目地址:https://github.com/ansible/ansible
商业版:http://www.ansibleworks.com/
免费版:http://www.ansibleworks.com/docs/
Ansible 优缺点
使用ansible这样的自动化配置管理工具,主要的优点是:
Ø 轻量级,他不需要去客户端安装agent,更新时,只需要在操作机上进行一次更新即可
Ø 批量任务执行可以写成脚本,而且不用分发到远程就可以执行
Ø 使用python编写的,维护更简单
Ø 支持sudo
缺点:
Ø 对于几千台、上万台机器的操作,还不清楚性能、效率情况如何,需要进一步了解
Ansible 应用领域
Ansible 的编排引擎可以出色地完成配置管理 、 流程控制 、 资源部署等多方面工作 。
1.配置管理
2.服务即时开通
这个领域的工具主要是在数据中心 、 虚拟化环境 、 云计算中快速开通新的主机。
3.应用部署
这个领域的工具重点关注如何尽可能地零停机部署应用。
4.流程编排
流程编排主要是进行部署时候如何保证基础架构中的各种组件协调一致
Ansible 架构模式
Ansible 管理方式
Ansible 是一个模型驱动的配置管理器, 支持多节点发布、 远程任务执行。 默认使用
SSH 进行远程连接。 无需在被管节点上安装附加软件, 可使用各种编程语言进行扩展。
Ansible 系统架构
Ansible 是基于模块工作的, 本身没有批量部署的能力。 真正具有批量部署的是 Ansible 所运行的模
块, Ansible
只是提供一种框架。
Ansible 由以下各部分组成:
• 核心引擎: 即 Ansible。
• 核心模块(core modules ): 这些都是Ansible自带的模块。
• 自定义模块(custom modules): 如果核心模块不足以完成某种功能, 可以添加自定义模块。
• 插件(plugins): 完成模块功能的补充,借助于插件完成记录日志 、 邮件等功能。
• 剧本(playbook): 定义Ansible任务的配置文件,可以将多个任务定义在一个剧本中,由 Ansible
自动执行, 剧本执行支持多个任务, 可以由控制主机运行多个任务, 同时对多台远程主机进行管理。
• playbook是Ansible 的配置、部署和编排语言,可以描述一个你想要的远程系统执行策略,或一组步骤
的一般过程。
• 连接插件(connectior plugins) : Ansible 基于连接插件连接到各个主机上, 负责和被管节点实
现通信。
• 主机清单(host inventory): 定义Ansible管理的主机策略,默认是在Ansible的hosts配置文件中
定义被管节点
Ansible 工作原理
Ansible工作原理如下图:
1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应
基本架构图中的连接模块;
2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作-
--单个模块,单条命令的批量执行,我们可以称之为ad-hoc;
3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务
器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。
Ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理, 它底层是通过 paramiko 来
实现的。
ansible执行过程大体过程如下图,其中暖色调的代表已经模块化。
Ansible 特性
Ansible 可以实现以下目标:
• 应用代码自动化部署。
• 系统管理配置自动化。
• 支持持续交付自动化。
• 支持云计算 、大数据平台( 如 AWS、 OpenStack 、 CloudStack 、 VMWare 等) 环境。
• 轻量级, 无需在客户端安装 agent, 更新时只需在控制机上进行一次更新即可。
• 批量任务执行可以写成脚本, 不用分发到远程就可以执行。
• 使用 Python 编写,维护更简单, Ruby 语法过于复杂。
• 支持非 root 用户管理操作, 支持 sudo。