StackStorm介紹與入門

背景

在日常運維工作中經(jīng)常使用的腳本為了提供給別人用,為了降低出錯概率與操作復(fù)雜度也祠,所以這里介紹一下StackStorm2的最基本使用與安裝侵浸。

在日常開發(fā)工作中很多積累下來的知識需要腳本化->自動化在這一過程中需要做到知識可自動執(zhí)行節(jié)省培訓時間。

請先通讀之后再做實踐入问。

介紹

StackStorm2 是一種DevOps工具宴胧,包括順序簡單的工作流,包括Mistral工作流忧便,包括觸發(fā)器等。

在下面這個列表中列出一些筆者認為能夠快速直觀的學習ST2的官方文檔列表帽借。 按照順序讀可以快速掌握使用方法方便接下來繼續(xù)學習〕瑁可以節(jié)約很多時間砍艾。

功能介紹閱讀

ST2全局關(guān)系圖,在學習的時候適合來回做參考

st2命令掌握,cli是最強大的,圖形界面適合給別人調(diào)用你寫的功能

開始嘗試寫action,寫完了之后使用st2 reload --register-all注冊你寫的代碼

開始嘗試把action結(jié)合起來一起運行

快速安裝用的 Dockerfile

請查看鏈接https://github.com/lijianying10/FixLinux/tree/master/st2

構(gòu)建流程描述: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 && \

# 復(fù)制配置文件

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原因是在前期剛學習的時候并不能用上巍举。還能節(jié)省大量配置時間脆荷。

在構(gòu)建中加入了entrypoint腳本,是啟動的時候執(zhí)行的腳本流程描述如下:

啟動流程描述?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)"

# 檢查環(huán)境變量是否完備

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為大家提供服務(wù)。

注意:?筆者這持久化了mongodb的存儲蜓谋,如果不需要可刪除掛載梦皮。

注意:?ETCD用來存儲全局變量。用作分布式鎖桃焕。在未來使用ST2調(diào)度kubernetes中會介紹如何使用剑肯。

第一個action

經(jīng)過之前的文檔基本概念的了解,相信讀者已經(jīng)對系統(tǒng)概念有基本了解观堂。 Action是任務(wù)執(zhí)行的最小單元让网。成功的學會Shell 和Python的Action和簡單的WorkFlow就能夠應(yīng)付非常多的工作。

第一個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

注意:?在開始復(fù)制文檔之前看清楚PACK是如何組織架構(gòu)開發(fā)的师痕。運行后在容器中查看文件夾/opt/stackstorm/packs/packs來學習如何開發(fā)一個pack是最直觀最有效的溃睹。

第一個workflow:

注意:?workflow 在simple action中只能串行執(zhí)行,并且只有成功失敗兩個路徑可以走胰坟。

有兩個文件組成workflow.yaml?在這里開發(fā)workflow chain因篇。

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

case請看參考文檔5笔横。

總結(jié)

經(jīng)過查看Dockerimage是如何構(gòu)建與運行的竞滓,快速在你的服務(wù)器上運行StackStorm2,到簡單編寫Action和workflow之后您就已經(jīng)入門了StackStorm2狠裹。 在未來的文章中我會繼續(xù)更新更高級的應(yīng)用方法虽界。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涛菠,隨后出現(xiàn)的幾起案子莉御,更是在濱河造成了極大的恐慌,老刑警劉巖俗冻,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件礁叔,死亡現(xiàn)場離奇詭異,居然都是意外死亡迄薄,警方通過查閱死者的電腦和手機琅关,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥蔽,“玉大人涣易,你說我怎么就攤上這事∫鄙。” “怎么了新症?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長响禽。 經(jīng)常有香客問我徒爹,道長荚醒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任隆嗅,我火速辦了婚禮界阁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胖喳。我一直安慰自己泡躯,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布禀晓。 她就那樣靜靜地躺著精续,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粹懒。 梳的紋絲不亂的頭發(fā)上重付,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音凫乖,去河邊找鬼确垫。 笑死,一個胖子當著我的面吹牛帽芽,可吹牛的內(nèi)容都是我干的删掀。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼导街,長吁一口氣:“原來是場噩夢啊……” “哼披泪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搬瑰,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤款票,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泽论,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艾少,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年翼悴,在試婚紗的時候發(fā)現(xiàn)自己被綠了缚够。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹦赎,死狀恐怖谍椅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情古话,我是刑警寧澤毯辅,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站煞额,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膊毁,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一胀莹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婚温,春花似錦描焰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至力图,卻和暖如春步绸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吃媒。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工瓤介, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赘那。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓刑桑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親募舟。 傳聞我的和親對象是個殘疾皇子祠斧,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,547評論 15 147
  • Docker從2013年發(fā)布第一個版本以來拱礁,已經(jīng)火遍全球琢锋,技術(shù)迭代也比較頻繁,其周邊產(chǎn)品和技術(shù)也越來越豐富觅彰。Doc...
    歸海聽雪閱讀 12,287評論 7 44
  • p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px 'Helv...
    乾坤菠菜籽閱讀 1,915評論 0 6
  • 建造者模式:將一個復(fù)雜對象的構(gòu)建與它的表示分離吩蔑,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。建造者模式是一種對象創(chuàng)建型模...
    猿日記閱讀 201評論 0 0
  • 多年未見的朋友填抬,突然被我記起烛芬。 瞬間許多過往,又如放電影般飒责,涌出許多美好和傷痛赘娄。 最初認識,T是姐姐的一位朋友宏蛉,在...
    果慧_631e閱讀 334評論 0 0