背景
在日常運維工作中經(jīng)常使用的腳本為了提供給別人用,為了降低出錯概率與操作復(fù)雜度也祠,所以這里介紹一下StackStorm2的最基本使用與安裝侵浸。
在日常開發(fā)工作中很多積累下來的知識需要腳本化->自動化在這一過程中需要做到知識可自動執(zhí)行節(jié)省培訓時間。
請先通讀之后再做實踐入问。
介紹
StackStorm2 是一種DevOps工具宴胧,包括順序簡單的工作流,包括Mistral工作流忧便,包括觸發(fā)器等。
在下面這個列表中列出一些筆者認為能夠快速直觀的學習ST2的官方文檔列表帽借。 按照順序讀可以快速掌握使用方法方便接下來繼續(xù)學習〕瑁可以節(jié)約很多時間砍艾。
st2命令掌握,cli是最強大的,圖形界面適合給別人調(diào)用你寫的功能
開始嘗試寫action,寫完了之后使用st2 reload --register-all注冊你寫的代碼
快速安裝用的 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)用方法虽界。