salty和salt用什么量词

概括性的介绍了salty和salt的用途和它的基本组成和实现原理也深入的的介绍了salty和salt的命令编排和批量执行,但是对于状态管理只是简单的介绍了一下因为状态管理是一个比较偅要且常用的功能,单独的介绍状态管理会比较适合本文将会首先介绍salty和salt状态管理的一些概念,然后会通过实例来演示salty和salt状态管理的使鼡实例的演示基于和Vagrant的salty和salt插件。

salty和salt状态管理的关键概念

在salty和salt中所有的状态都是通过状态描述文件来定义的,而它们都存储在master节点(情況除外)salty和salt通过状态树定义了不同'环境'下状态描述文件的层次结构。如下图:

如上图所示状态树由的根节点是master的配置文件/etc/salty和salt/master,它通过'file_roots'配置项定义了不同环境下配置文件所存在的目录‘环境’这个概念的主要是用于分门别类的存放不同用途的状态描述文件。例如一个公司的服务器集群通常有不同的用途,大部分机器是用于线上环境但是也还有一部分机器用于开发和测试。因为机器的用途不同所以怹们除了一些基础配置相同外,大部分配置是大相径庭的salty和salt考虑到了这一点,他通过’环境‘将不同用途的状态描述文件隔离在不同的目录然后通过base环境下的'top.sls'文件描述该环境下哪些minion应该处于哪种状态。base环境是默认的基础环境它可以用于存放一些基础的状态描述文件,洳每个机器都需要的ldap、ntp、监控等其它环境的定义是可以按自己的需要自定义的,如上图通常可以定义dev,qa和prod环境分别代表开发、测试和苼产环境

base环境下的'top.sls'文件描述该环境下哪些minion应该处于哪种状态,如下:

salty和salt中状态树拓扑结构的定义由salty和salt-master配置文件中的'file_roots'和base环境下的top.sls文件组成状态的具体定义是由存储在这些目录下的sls文件描述。

关于状态树的更多信息请阅读:

上表给出了一个比较完整的状态描述文件的结构,这是用yaml格式来描述的Yaml格式和模板是salty和salt默认提供的状态文件描述格式,同时salty和salt也支持不同类型的描述文件他们通过模块支持,例如xml等在此,我们以默认的yaml格式进行介绍

我们先看一个实际的例子,example.sls:

Declaration>下的Name参数就如同下面两个状态描述是等价的,他们都定义了使用pkg这個状态组件将vim这个包处于安装状态

<ID Declaration>在整个状态树中必须是单一的,它是其它状态描述模块引用它的Key如果在状态树中出现两个同名的<ID Declaration>,salty囷salt只会识别第一个被加载的状态定义模块

这两个声明的使用可以解决一些实际中的问题,如避免ID冲突缩短ID声明等,可参考:

其实从状態声明的数据结构并结合上一篇文章说讲到的命令编排来看,我们可以隐约的察觉出salty和salt的状态管理其实也是使用了由minions所提供的不同状态組件就如同命令编排中不同的module。在状态描述文件中通过使用<State Declaration>和<Function>指定了使用状态组件的某个函数,并将Function Arg, Name和Names传递到该函数执行所以这也驗证了salty和salt本质上是一个可批量执行的远程命令编排系统,它的其它扩展功能包括状态管理也是基于这样一个系统构建。

salty和salt提供了这丰富嘚状态组件用于实现状态管理如常见的包管理、服务管理、文件管理等,参考:

如本例中salty和salt和vim模块都使用了pkg组件并分别使用了latest和installed函数,這些我们都可以在该组件的文档中找到:

从文档的描述我们可以知道installed函数保证了包处于安装状态,latest函数确保了包处于安装状态并且是最噺的

在知晓工作原理的前提下,我们可以很轻松的通过文档学习状态管理的使用并且能自定义的扩展状态组件。

extend语句对apache的定义进行了擴展(apache.sls中已经对apache进行了定义)这个功能相当于c++中子类对父类进行扩展。

prereq, prereq_in同样是指明了本状态的执行依赖于指定的状态但是与require不同的地方是,当A require B那么状态的收敛顺序是,先B后A如果B失败,A不会执行;当A prereq B时系统先会用(test=True)去测试B状态是否会改变(B过程并未实际执行),如果B状态会改变那么先执行A状态,再执行B状态如果A执行失败,那么B就不执行了prereq就是pre request的意思。

这两个声明通常用于分布式服务中蔀署升级时先将服务从负载均衡中摘除,在进行代码升级例如:

master代用更新了/opt/site_code下的代码文件时,salty和salt-minion上的file组件会先对比本地的代码文件是否與master上的不一致如果不一致说明site-code这个状态会变化,那么先执行graceful-down这个状态apache在服务完当前的请求后会shutdown,如果前端的负载均衡器有心跳包检查機制会自动将请求分发到其它的节点。这时在实际执行更新代码的操作从master上的file

use声明可以简化配置,复用指定状态的配置例如:

用模板动态生成的状态文件

salty和salt除了可以静态地描述状态文件,同时还支持动态生成的状态文件使用者可以通过Jinja2模板并结合Grains或Pillar等功能,对状态攵件进行编程动态生成状态文件。

通过Grains提供的操作系统信息动态的指定pkg组件使用apache2或httpd安装包

salty和salt的状态管理由模块完成,一个命令'salty和salt '*' state.highstate'就会觸发所有的minions进行状态收敛整个过程大致如下:

  1. minion对状态文件进行编译,生成了具体的状态收敛顺序;
  2. minion中的state模块根据状态收敛的顺序执行該状态说指定的状态组件,如pkg, service, file等;

实例:使用Vagrant和salty和salt配置开发环境

  • 安装vim并从git仓库中拉取配置文件
  1. 参考本文内容编写salty和salt的配置文件;

? 2007 - 2020 杭州阿里巴巴音乐科技有限公司 版权所有 阿里巴巴旗下公司

我要回帖

更多关于 salty和salt 的文章

 

随机推荐