首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ansible 深度解析

至顶网软件频道消息: 2018年1月23日,红帽联合至顶网在上海举办了“Ansible Automates”大会,本地大会以“智能 自动 规范——迎接自动化运维新时代”为主题。大会上,红帽首席方案架构师张家驹对Ansible产品进行了深度解析。(以下为录音整理)

红帽首席方案架构师 张家驹

Ansible的设计哲学

首先我们来看Ansible的设计哲学、设计理念。我们看它的logo非常简洁,一笔写出这样的A字,没有多余的部分。它在表达一个非常简单的哲学信仰,我们认为是复杂性是抹杀生产力的。

举一个非常简单的例子:早年我做开发的时候,做了很多高可用的系统,无论是闭源的还是开源的高可用的系统。我们要考虑,是不是要做双机之间的热备,做心跳的监控。当我们做这些事情的时候,发现即使做了热备和监控,还是不能满足要求,所以我们要加很多的策略、很多规则。规则加多了之后,我们系统变得越来越复杂。Ansible,它很大的价值或者说设计理念,就是尽量的简单化,我们通过简单的手段去保证一个复杂可用性、可靠性的问题、扩展的问题。不用做过度的设计。

第二点,整个设计过程中,我们要最大程度贴近自然语言。这块我们更多考虑到人机交互的界面,因为软件毕竟是给人用的,所以人机之间的交互界面很重要。最精确的语言是面向机器的语言,你告诉它往计数器写这样的数字,它就是写这样的数字,但是过多面向机器的语言,人理解起来就比较费劲。如果更多的面向人,可能它是不是保证很大的确定性,是不是有技巧在里面就有这样的问题。折中这两点,Ansible给大家提供的界面就是这样的语言,后面我们也可以通过我的演讲,和大家尽可能探讨一下Ansible到底是什么。我觉得确实不是简单的标记性的语言。

第三点,以确定性替代不确定性。其实我们讲确定性、不确定性,我们中国有一家著名企业的老总经常讲,以确定性代替不确定性,包括我们给客户服务的时候,这种要求客户也非常需要的。如何以确定性代替不确定性,比如设定这样一个Ansible:30秒种之内返回给我一个确定的结果,如果不返回,就是失败了。把它调用过来,给我一个返回,要么是成功,要么是失败。后来为了提供系统整体高并发,高可靠的东西,我们采取了一些异步的消息队列。

Ansible 概览

前面说的方法论大家会觉得云里雾里,下面我们深入Ansible里面,因为Ansible本身部署起来就是非常简单的。看这个图中间画了笔记本,就是Ansible整个运行时的环境,这部分程序代码是可以跑在你的任何一个设备上,基本上只要是一台机器就可以跑Ansible这样的软件。

那Ansible这个软件是管理大多数机器的,它是管理端,是管到若干台机器,它通过SSH这个通道管理这么多台机器。这里面有一个好处,它最大程度地利用本身的功能,所以说我们讲Ansible要管理另外一台机器,如果另外一台机器没有和你对应的接口,你是没有办法管理的。对于不同的网络设备、存储设备也会有对外暴露的接口,通过这样的接口管理。左边有Inentory,也就是说我们做什么事情,我们像一个剧本一样,所有事情都写在这个文件里面,通过这台机器就可以分散到不同机器上执行了。当然了,对于里面细节的东西,比如这个东西你要推到一千台机器或者一万台机器上,你是一起推还是分批推,也里面有细节的东西,就不再深入太多了。

我们看一下Inentory这里,这是静态的列表,是不变的。另外一种情况是动态的,我被管理的机器是发生变化的,现实中我们也经常遇到这样的问题,比如我将机器放到里面,需要做同样的配置,这里面Inentory比较方便的地方就是列表的格式,实际上就直接解析为这样的文件,如果你是可执行的脚本。右边我是简单把流程写了一下,如果是简单的脚本,会通过你脚本取得你当前的列表。大家如果这个环节里面,对接不同的底下的平台,实际上通过这个脚本你就可以取得当前的动态节点列表。

这里面可能大家会问这样的问题,静态的很好理解,静态就三台机器,如果是动态,有可能我取的时候,把节点取出来了,然后运行了,再取就不一样了,这样同步的一致性肯定是需要考虑的。这个里面实际上就印证了我开始说了Ansible简洁的设计。对于这里面的运维操作,实际上就像互联网很多应用的推送一样,我不一定所有东西都是实时的,所以这里面让你业务部需要那么强的实时性。

第二点,简单说一下Ansible的模块,在第一张简单架构图里面没有显现出来,另外就是playbook要执行哪些剧本,这些最基本的功能模块。通过这两条简单的命令,就很容易熟悉Ansible各个模块,以及他们是怎样使用的。

接下来说一下幂等性,就是这个东西是可重复的,我们不管执行多少遍,结果都是一致的。这里面举了一个简单的例子,比如我们要启这样的服务,实际上这里面我们对应了Ansible里面是以模块指定名字和它的状态是Started。这是简单的例子,可能这个例子太简单了。我举另外一个例子,比如你拷贝一个文件,在你拷贝的时候,我要确认你在目标有没有这样的文件,如果有就不用拷贝了,如果没有就拷贝一下。所有的功能都在这里的模块实现的。

模块过去之后,我们对模块进行编排,这样的话,我们就有剧本这样的概念,也就是playbook。playbook是以YAML的格式写的,实际上在Ansible里面,我们有这样的一个执行引擎,解释引擎解释这个YAML文件。

我们简单看一下剧本长什么样子,这里就是简单的一个playbook,我大概从上到下捋一下,几个关键的东西,当然里面可能有其他的关键字,这里面简单的playbook,我是了解Ansible,我不了解Ansible也理解了八九不离十,但是我们理解了里面的关键字,可能我们就里面的程序是语言关键字:name、host、ars、tasks,这是一个简单的playbook。

Ansible 开启 IT 自动化的新时代

Ansible的大部分东西,还有很多细节无法通过30分钟的演讲展现出来,但是Ansible出现之后,我觉得它很大价值就是相当于通用的语言,之前我们的很多配置、运维,在不同组织内部都有自己的一套东西。提到这种运维,大家可能说,我们现在也运行一个系统非常良好,但是有了Ansible之后,我们发现以它的简洁这种方式,可以把你之前很多的业务流程进行简化并且统一过来。我们通过Ansible,可以在不同语言之间进行沟通。时间关系我就讲到这里,谢谢大家。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180126A0RNNA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券