写点什么

StackStorm 框架的浅析 (一)

  • 2019-11-15
  • 本文字数:2232 字

    阅读完需:约 7 分钟

StackStorm框架的浅析(一)

故障自愈作为运维领域的热门话题之一,各个公司都会投入大量的人力来开发不同的组件,如何正确、有序的调用不同组件以及避免相同功能组件的开发,是一件亟待解决的问题。StackStrom 是一个基于事件流并自动执行的系统框架,基于此,可以让外部系统产生的事件,有序的、可编排的集合到一起,作为一个完整的事件流去执行,从而解决一些高频次的运维难题。

1 StackStorm 简介

StackStorm 是一个将服务和工具集成在一起的自动化平台,它将现有的基础架构和应用程序环境联系在一起,因此使用者可以更轻松的自动化调用,把注意力集中在需要执行的操作上。



stackstorm 中包含 sensor,rule,action,workflow 等组件,环境内的数据都统一的存在 MongoDB 中,组件之间消息的通信是利用 RabbitMQ 实现的。将各个组件组合在一起并加之依赖文件以及配置文件就形成了一个包,st2 包的结构如下所示:



由包的结构可以看出,每个组件各自形成一个独立的目录,每个组件由一个配置文件以及一个执行文件共同构成。各个组件的具体作用如下:


  • Sensors: 监听和接收外部系统的事件,当某个外部事件出现,trigger 被触发执行,现在只支持 py 文件;

  • Trigger: 是外部事件的具体表现,简单理解为就是事件触发器,衔接 sensor 和 rule,由用户自行定义;

  • Rule: 映射着所有 trigger 到 action 的规则,记录着 criteria 匹配的规则,映射 trigger 实例到 action 的 input;

  • Action: 是 st2 的具体执行动作和步骤,可以使用 py 脚本、执行指定命令;

  • Workflow: 多个 action 的集合,这些 action 被有序的、按照预先定义好的规则先后执行,现在支持 Orquesta 和 Mistral 两种格式;


各个组件之间实际的交互作用如下图所示:


2 st2 中的 packs

packs 是 stackstorm 中最小的部署单元,Pack 中包含 Action,Workflow,Rule 和 Sensor 等等的配置文件,StackStorm 通过 Pack 进行部署和归类。

packs 的查询

通过命令 st2 pack list 可以查询已经安装在环境中的 packs,效果如下:


packs 的安装

在 StackStorm Exchange 中存在很多可用的包,它是 stackstorm 的一个社区,你可以从上面下载你需要的包,当然你也可以自行编写自己的包上传到社区中。stackstorm 的 packs 安装后会将 packs 的文件下载到/opt/stackstorm/packs/<your_pack>目录下。st2 的 packs 的安装方式有很多种。


# 安装某个包的具体的commitst2 pack install cloudflare=776b9a4# 安装某个包的某个具体版本st2 pack install cloudflare=0.1.0# 利用url安装某个包st2 pack install https://github.com/emedvedev/chatops_tutorial=testing
复制代码


下面重点说一下安装自己编写的包,也就是如何安装本地包。


首先自己编写的包必须传到 git 上才能成功安装 其次利用命令 st2 pack install file:/// + 文件目录可以安装本地包,安装效果如下:



可以看到 packs 的安装需要 4 个步骤,第一是下载 packs,事实上虽然我们称之为从本地安装 packs,其实 st2 还是会从 packs 所在的 git 上将代码拉下来,因此这就是为什么我刚刚说自己编写的包必须传到 git 上才能成功安装的原因了;第二步是预览检查包是否有明显的错误;第三步是安装包的依赖环境,st2 对于每个包都会设定一个运行环境,packs 所需要的依赖可以写在 requirements.txt 中,并安装包的过程中一并安装;第四步是注册包,实际上是将包中的各个组件的信息,包中的配置信息以及参数写入 MongoDB 中。

packs 的卸载

st2 中 packs 的卸载十分容易,通过命令 st2 pack remove + < packname>就可以完成,卸载的效果如下:



可以看出 packs 的卸载主要由两个步骤,第一将 packs 的注册信息删除;第二步删掉 packs 的文件;实际上 packs 的安装和卸载是运行了两个相应的 workflow,具体的将在后续专题中讨论。

packs 的注册

是不是安装上 packs 以后就可以直接运行 packs 了呢??当然不是啦(想得美!)还需要手动注册一下 packs 才能执行。具体的操作如下:


首先将.yaml 文件复制到/opt/stackstorm/configs/目录下,注意在安装 packs 前该文件不能存在于/opt/stackstorm/configs/目录下,否则会导致安装失败。


设置该文件的权限为 775。


执行命令 sudo st2ctl reload --register-configs 就可以运行 packs 了。

packs 的编写

这里面我们主要讲解一下 packs 中配置文件的编写方式,对于各个模块的编写规范,将在后续讨论。


packs 除了各个模块外还有 4 个文件需要编写,分别是:requirements.txt,pack.yaml,packname.yaml 以及 config.schema.yaml


requirements.txt


requirements.txt 是依赖文件,在其中记录的是 packs 需要运行的环境中的依赖包,包括包的版本


pack.yaml


pack.yaml 中定义了 pack 的一些基础信息,包括 packname,版本,描述以及作者信息等,具体效果如下:



packname.yaml


对于 packname.yaml 请注意,该文件的名字并不是”packname.yaml“,而是在 pack.yaml 中定义的包的名字作为”packname“,请大家不要误解。这个文件中主要记录着 packs 的一些默认参数,参数可以是整数,小数,字典,数组以及字符串,具体的形式如下:



config.schema.yaml


config.schema.yaml 是默认参数的具体信息,包括参数名称,类型以及描述等,参数类型包括 string,integer,number,list,object,具体形式如下:



其中 required 字段表示该参数是否是必要参数,非必要参数将不会存入 MongoDB 中,secrect 字段表示该参数是否可见的,若为 true 则用户不可见。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/VD026IukUNrL5olEFkCtFg


2019-11-15 10:572525

评论

发布
暂无评论
发现更多内容

在 Kubernetes 中使用 Keycloak OIDC Provider 对用户进行身份验证

Se7en

Android技术分享| 安卓3行代码,实现整套音视频通话功能

anyRTC开发者

android 音视频 移动开发 实时通讯 视频通话

三高Mysql - Mysql索引和查询优化(偏实战部分)

懒时小窝

MySQL

围观报名中2022第十四届南京国际人工智能产品展会

InfoQ_caf7dbb9aa8a

java培训-程序员怎样靠技术来延长职业周期

@零度

JAVA开发

蒙牛“申”请出战 全力守“沪”战疫

科技新消息

一文解读GPU服务器!

Finovy Cloud

人工智能 GPU服务器 GPU算力

项目经理值得一试的思维方式:项目成功方程式

禅道项目管理

项目管理 软件开发

推出全新分布式计算接口!OneFlow v0.7.0发布,LiBai代码库、Serving、MLIR一应俱全

OneFlow

人工智能 机器学习 深度学习 深度学习框架 深度学习编译器

ModStartCMS Laravel9 v3.6.0内容标签增强,电脑手机适配

ModStart开源

报名中2022南京智博会 第十四届南京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

【课程汇总】OpenHarmony成长计划知识赋能第二期系列课程(附链接)

OpenHarmony开发者

OpenHarmony 成长计划

郑曌:从 ACM 世界冠军到技术 VP 的制胜之道

第四范式开发者社区

人工智能 数据库 编程 程序员 ACM

使用APICloud AVM框架封装app日历组件

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 多端开发 avm.js

eBPF Cilium实战(1) - 基于团队的网络隔离

北京好雨科技有限公司

Kubernetes PaaS rainbond

自动搭建Maven私有仓库,不限容量、免费用

阿里云云效

maven 阿里云 云原生 Maven仓库 制品仓库

MySQL 是怎样通讯的?

ooooooh灰灰

Go MySQL 协议 4月月更

“逆行者”蒙牛 穿越疫情“暴风眼”

科技新消息

快来一起玩转LiteOS组件:Curl

华为云开发者联盟

LiteOS 文件传输 curl LiteOS组件 嵌入式设备

社交CRM系统解决方案

低代码小观

CRM 企业管理系统 社交软件 CRM系统 客户关系管理系统

vivo 短视频推荐去重服务的设计实践

vivo互联网技术

服务器 架构设计 布隆过滤器

守“沪”第一线 蒙牛使命必达

科技新消息

OpenHarmony 3.1 Beta版本关键特性解析——ArkUI开发框架canvas组件绘制实践

OpenHarmony开发者

canvas OpenHarmony ArKUI 3.0

TASKCTL调度服务平台节点管理

敏捷调度TASKCTL

数据仓库 kettle 元数据 ETL任务 任务调度

谈谈Java8-18引入的新特性

CRMEB

如何利用MHA+ProxySQL实现读写分离和负载均衡

华为云开发者联盟

MySQL 读写分离 高可用架构 ProxySQL MHA

FlyFish模版中心正式上线!快来领取社区周边礼物

云智慧AIOps社区

开源 大前端 数据可视化 大屏可视化

中小企业知识管理的实施策略

小炮

企业知识管理

大数据培训-程序员职业生命周期短的原因

@零度

大数据开发

web前端培训-程序员失业后怎样才能再就业

@零度

web前端开发

JDK、Spring、Dubbo SPI 原理介绍

网易云信

Java spring

StackStorm框架的浅析(一)_服务革新_刘毅_InfoQ精选文章