StackStorm介绍与入门

背景

在日常运维工作中经常使用的脚本为了提供给别人用,为了降低出错概率与操作复杂度,所以这里介绍一下StackStorm2的最基本使用与安装。

在日常开发工作中很多积累下来的知识需要脚本化->自动化在这一过程中需要做到知识可自动执行节省培训时间。

请先通读之后再做实践。

介绍

StackStorm2 是一种DevOps工具,包括顺序简单的工作流,包括Mistral工作流,包括触发器等。

在下面这个列表中列出一些笔者认为能够快速直观的学习ST2的官方文档列表。 按照顺序读可以快速掌握使用方法方便接下来继续学习。可以节约很多时间。

功能介绍阅读

ST2全局关系图,在学习的时候适合来回做参考

st2命令掌握,cli是最强大的,图形界面适合给别人调用你写的功能

开始尝试写action,写完了之后使用st2 reload --register-all注册你写的代码

开始尝试把action结合起来一起运行

快速安装用的 Dockerfile

请查看链接https://github.com/lijianying10/FixLinux/tree/master/st2

构建流程描述:https://github.com/lijianying10/FixLinux/blob/master/st2/Dockerfile

FROM ubuntu:16.04

COPY st2ctl st2.conf supervisord.conf docker-entrypoint.sh

RUN apt-get update && \

# 安装基本组件

apt-get install -y build-essential wget gnupg-curl curl sudo apache2-utils vim apt-utils supervisor && \

# 安装 ST2

os=ubuntu dist=xenial curl -s https://packagecloud.io/install/repositories/StackStorm/stable/script.deb.sh | sudo bash && \

apt-get update && \

apt-get install -y st2  && \

# 安装nginx

apt-key adv --fetch-keys http://nginx.org/keys/nginx_signing.key && \

echo 'deb http://nginx.org/packages/ubuntu/ xenial nginx' >> /etc/apt/sources.list.d/nginx.list && \

apt-get update && \

apt-get install -y st2web nginx && \

rm /etc/nginx/conf.d/default.conf && \

cp /usr/share/doc/st2/conf/nginx/st2.conf /etc/nginx/conf.d/ && \

# 安装kubectl tini

curl -o /bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.6.1/bin/linux/amd64/kubectl && \

chmod +x /bin/kubectl && \

wget https://github.com/krallin/tini/releases/download/v0.14.0/tini-amd64 -O /bin/tini && \

chmod +x /bin/tini && \

# 复制配置文件

mv /st2.conf /etc/st2/ && \

mv supervisord.conf /etc/supervisor/supervisord.conf && \

mv /st2ctl /usr/bin/st2ctl && \

chmod +x /usr/bin/st2ctl && \

# 安装python pip

curl -SsL https://bootstrap.pypa.io/get-pip.py | python && \

# 安装docker client

pip install && \

wget https://get.docker.com/builds/Linux/x86_64/docker-17.05.0-ce.tgz && \

tar xf docker-17.05.0-ce.tgz && \

mv docker/docker /bin/docker && \

rm -rf docker docker-17.05.0-ce.tgz

ENTRYPOINT ["/bin/tini", "--"]

CMD bash /docker-entrypoint.sh

注意: 笔者裁剪掉了chatops以及Mistral原因是在前期刚学习的时候并不能用上。还能节省大量配置时间。

在构建中加入了entrypoint脚本,是启动的时候执行的脚本流程描述如下:

启动流程描述 https://github.com/lijianying10/FixLinux/blob/master/st2/docker-entrypoint.sh

# 生成SSH key

echo generate ssh key

ssh-keygen -f /root/.ssh/id_rsa -P "" && cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

# 生成 ST2 账号密码

echo generate user

printf "%s\n" "${USER_NAME:?Need to set USER_NAME non-empty}"

printf "%s\n" "${USER_PASSWORD:?Need to set USER_PASSWORD non-empty}"

echo $USER_PASSWORD | sudo htpasswd -i /etc/st2/htpasswd $USER_NAME

# 生成 证书

echo generate cert

sudo mkdir -p /etc/ssl/st2

sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/st2/st2.key -out /etc/ssl/st2/st2.crt \

-days 365 -nodes -subj "/C=US/ST=California/L=Palo Alto/O=StackStorm/OU=Information \

Technology/CN=$(hostname)"

# 检查环境变量是否完备

printf "%s\n" "${CONN_RMQ:?Need to set CONN_RMQ non-empty}"

printf "%s\n" "${MONGO_HOST:?Need to set MONGO_HOST non-empty}"

printf "%s\n" "${MONGO_DB:?Need to set MONGO_DB non-empty}"

printf "%s\n" "${MONGO_PORT:?Need to set MONGO_PORT non-empty}"

# 生成st2配置文件

cat >> /etc/st2/st2.conf <

[system_user]

user = root

ssh_key_file = /root/.ssh/id_rsa

[messaging]

url = $CONN_RMQ

[ssh_runner]

remote_dir = /tmp

[database]

host = $MONGO_HOST

port = $MONGO_PORT

db_name = $MONGO_DB

EOF

# 启动supervisor

/usr/bin/supervisord -c /etc/supervisor/supervisord.conf

简单上手

容器化一次性安装启动(无负担安装最快上手)

docker network create stn

docker run -itd --hostname st2-mongo  --name st2-mongo  -v /var/lib/mongo:/data/db --net=stn daocloud.io/library/mongo:3.4.3

docker run -itd --hostname st2-etcd --name st2-etcd --net=stn index.tenxcloud.com/coreos/etcd:2.3.1 /etcd -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 -advertise-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001

docker run -itd --hostname st2-rabbit --name st2-rabbit -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --net=stn daocloud.io/library/rabbitmq:3.6.9

docker run -itd --hostname st2 --name st2 --net=stn -e USER_NAME=admin -e USER_PASSWORD=123456 -e CONN_RMQ=amqp://root:123456@st2-rabbit.stn:5672/ -e MONGO_HOST=st2-mongo.stn -e MONGO_DB=st2 -e MONGO_PORT=27017 -e ETCD_ENDPOINT=http://st2-etcd.stn:2379 -p 80:80 -p 443:443 index.tenxcloud.com/philo/stackstorm:2.2.1

注意: 笔者使用了daocloud和tenxcloud提供的dockerhub为大家提供服务。

注意: 笔者这持久化了mongodb的存储,如果不需要可删除挂载。

注意: ETCD用来存储全局变量。用作分布式锁。在未来使用ST2调度kubernetes中会介绍如何使用。

第一个action

经过之前的文档基本概念的了解,相信读者已经对系统概念有基本了解。 Action是任务执行的最小单元。成功的学会Shell 和Python的Action和简单的WorkFlow就能够应付非常多的工作。

第一个shell action:

#!/usr/bin/env bash

SERVER=$1

MESSAGE=$2

echo ${SERVER} ${MESSAGE}

第一个action yaml申明

---name:"my_first_action"runner_type:"local-shell-cmd"description:"first automate"enabled:trueentry_point:"first.sh"parameters:server:type:"string"description:"server address"required:trueposition:0message:type:"string"description:"the information"required:trueposition:1

注意: 在开始复制文档之前看清楚PACK是如何组织架构开发的。运行后在容器中查看文件夹/opt/stackstorm/packs/packs来学习如何开发一个pack是最直观最有效的。

第一个workflow:

注意: workflow 在simple action中只能串行执行,并且只有成功失败两个路径可以走。

有两个文件组成workflow.yaml 在这里开发workflow chain。

第二个文件是 xx.meta.yaml 申明workflow。

case请看参考文档5。

总结

经过查看Dockerimage是如何构建与运行的,快速在你的服务器上运行StackStorm2,到简单编写Action和workflow之后您就已经入门了StackStorm2。 在未来的文章中我会继续更新更高级的应用方法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,487评论 15 147
  • Docker从2013年发布第一个版本以来,已经火遍全球,技术迭代也比较频繁,其周边产品和技术也越来越丰富。Doc...
    归海听雪阅读 12,245评论 7 44
  • p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Helv...
    乾坤菠菜籽阅读 1,869评论 0 6
  • 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模...
    猿日记阅读 193评论 0 0
  • 多年未见的朋友,突然被我记起。 瞬间许多过往,又如放电影般,涌出许多美好和伤痛。 最初认识,T是姐姐的一位朋友,在...
    果慧_631e阅读 321评论 0 0