折腾Openwhisk - 本地环境添加alarms

openwhisk flow

第一块绊脚石

本地ubuntu虚拟机上搭建了openwhisk环境(如何搭建戳这里),然而这新项目上来就给坑我……开始的helloworld执行正常(这点小事,必须给力),探索一番后想尝试些新的东西,发现官方文档中有alarm的包,本来想看看效果,我在本地环境执行查看(这里我将本地的namespace切换到了whils.system下):

# wsk package list
packages
/whisk.system/watson-textToSpeech                                      shared
/whisk.system/websocket                                                shared
/whisk.system/weather                                                  shared
/whisk.system/watson-speechToText                                      shared
/whisk.system/watson-translator                                        shared
/whisk.system/slack                                                    shared
/whisk.system/github                                                   shared
/whisk.system/utils                                                    shared
/whisk.system/samples                                                  shared
/whisk.system/combinators                                              shared
/whisk.system/apimgmt                                                  private
/whisk.system/routemgmt                                                private

咦……alarm呢?难道我的环境部署的有问题?上wsk的slack和大神问了一下,才知道,目前本地环境不提供直接的alarm包,我勒个去……这么个基础的东西都不给,我自己搞吧:(
去github找到alarm的代码,弄下来看看:

# git clone https://github.com/apache/incubator-openwhisk-package-alarms.git

燃鹅……折腾了一阵子以后,发现该死的README并木有告诉我该怎么安装,一个alarm包竟然成我了的第一个绊脚石,几经辗转,在github中的几个issue和slack的交流中,zong于摸清了正确的姿势。

敲黑板……划重点啦,正确的部署alarm步骤:

  • 添加alarm action
  • 构建alarm service镜像
  • 部署alarm service

添加alarm action

incubator-openwhisk-package-alarms项目中的脚本installCatalog.sh,从名字就可以看出来,它是将alarm的action添加到本地的whisk环境中的,相当于把alarm的服务注册到本地的环境当中:

...

if [ $# -eq 0 ]
then
echo "Usage: ./installCatalog.sh <authkey> <edgehost> <dburl> <dbprefix> <apihost>"
fi
...

脚本执行的话需要5个参数,分别是上面那一串。
第一个参数,authkey是当前wsk环境的认证,通过命令wsk property get可以获取:

# wsk property get
client cert
client key
whisk auth              789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
whisk API host          http://172.17.0.1:10001
whisk API version       v1
whisk namespace         whisk.system
whisk CLI version       2017-08-06T07:04:29+00:00
whisk API build         2017-09-03T06:48:49Z
whisk API build number  latest

也可以在incubator-openwhisk/ansible/files/auth.whisk.system这里看到,我这里用的是whisk.system的namespace,如果用guest,就查看相应的whisk.guest文件。
第二个参数是edgehost,不知道做什么的,猜测是最终action执行节点?以后慢慢看,不过从项目中可以看到,我们这种才用单节点的本地部署,edgehost跟apihost相同即可,不过这里的值不是上面命令获取的url,只用ip地址即可,我的环境也就是172.17.0.1
第三个参数是dburl,也就是数据库的url地址,前面我们使用的是本地的couchdb数据库,地址为本机环境地址,端口一般默认是5984,根据自己部署时候的参数即可查到,我这里是http://192.168.222.140:5984
第四个是dbprefix,alarm服务启动时会创建数据库,将这个参数作为前缀,所以随意起名字吧:whisk_alarms
第五个是apihost,172.17.0.1
除此之外,还需要将openwhisk的所在路径添加到OPENWHISK_HOME环境变量中。
将以上用到的变量写到一起,方便以后使用:

# vim alarm.env
export API_HOST="172.17.0.1"
export DB_URL="http://192.168.222.140:5984"
export AUTH="789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP"
export DB_PREFIX="whisk_alarms"

下面执行installCatalog.sh添加alarm action:

# export OPENWHISK_HOME="/root/incubator-openwhisk"
# source alarm.env
# ./installCatalog.sh $AUTH $API_HOST $DB_URL $DB_PREFIX $API_HOST
...
ok: updated package alarms
...
ok: updated action alarms/alarm
...
ok: updated package alarmsWeb
...
ok: updated action alarmsWeb/alarmWebAction

可以看到实际脚本安装了两个包 alarm 和alarmsWeb,并分别在每个包下面添加了action。
我们执行wsk命令检查环境中的package列表:

# wsk package list
packages
/whisk.system/alarmsWeb                                                private
/whisk.system/alarms                                                   shared
/whisk.system/watson-textToSpeech                                      shared
/whisk.system/websocket                                                shared
/whisk.system/weather                                                  shared
/whisk.system/watson-speechToText                                      shared
/whisk.system/watson-translator                                        shared
/whisk.system/slack                                                    shared
/whisk.system/github                                                   shared
/whisk.system/utils                                                    shared
/whisk.system/samples                                                  shared
/whisk.system/combinators                                              shared
/whisk.system/apimgmt                                                  private
/whisk.system/routemgmt                                                private

可以看到两个包已经添加到环境中了。
执行action list命令:

# wsk action list
actions
/whisk.system/alarmsWeb/alarmWebAction                                 private nodejs:6
/whisk.system/alarms/alarm                                             private nodejs:6
...

相应的action也添加到环境中,第一步完成。

构建alarm service镜像

下一步进行构建alarm service的镜像,和部署wsk环境时差不多,alarm的服务镜像也是通过gradle来做的,incubator-openwhisk-package-alarms中已经有了gradlew脚本,直接开始构建:

# ./gradlew :distDocker
...
Sun Sep 03 14:52:25 UTC 2017: Executing 'docker tag catalog_alarms whisk/catalog_alarms:latest'
:pushImage SKIPPED

BUILD SUCCESSFUL
...

最终看到build successful就表示构建成功了,检查当前环境的镜像:

# docker images
...
whisk/catalog_alarms        latest              7d3ec656217a        About an hour ago   303.6 MB
...

有这个镜像就表示ok了。

部署alarm service

部署的话实际就是启动上面构建好的alarm服务镜像,简单粗暴,上命令:

# docker run -it -d --name alarms -p 11001:8080 -v /var/log/wsklogs/alarmsTrigger:/logs \
-e PORT=8080 \
-e ROUTER_HOST=172.17.0.1 \
-e DB_PREFIX=$DB_PREFIX \
-e DB_USERNAME=openwhisk \
-e DB_PASSWORD=openwhisk \
-e DB_HOST=172.17.0.1:5984 \
-e DB_PROTOCOL=http whisk/catalog_alarms

容器正常启动就没有问题了。

验证

最终我是想看看alarm到底有没有用啊...最基本的就是用alarm弄个定时任务,这里弄个5秒的吧:

# wsk trigger create every-5-seconds --feed /whisk.system/alarms/alarm --param cron '*/5 * * * * *'
ok: invoked /whisk.system/alarms/alarm with id eaac8ba6ad2b40de8ca267a820159a05
{
    "activationId": "eaac8ba6ad2b40de8ca267a820159a05",
    "annotations": [
        {
            "key": "limits",
            "value": {
                "logs": 10,
                "memory": 256,
                "timeout": 60000
            }
        },
        {
            "key": "path",
            "value": "whisk.system/alarms/alarm"
        }
    ],
    "duration": 2414,
    "end": 1504450667631,
    "logs": [],
    "name": "alarm",
    "namespace": "whisk.system",
    "publish": false,
    "response": {
        "result": {},
        "status": "success",
        "success": true
    },
    "start": 1504450665217,
    "subject": "whisk.system",
    "version": "0.0.11"
}
ok: created trigger every-5-seconds

提示创建成功后,超过5s以后,执行命令:

# wsk activation list
activations
1e3d4ce403fb45af98f29351bb482b3a every-5-seconds     
e41729c73e8c4a3dbdd3b470dc75d8d8 every-5-seconds     
f6bed7cced464a13a3d4fcca86192732 every-5-seconds     
248649824cb4406ca46993fafa1b4cd5 every-5-seconds     

可以看到定时任务已经按时触发执行了,到此第一个绊脚石搬走,又可以愉快的玩耍啦。

碎觉先。。。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,748评论 6 342
  • FaaS已经不算陌生的概念了,AWS的lamda以后,其他各个厂商也都争相推出自己的函数计算服务,微软,阿里,腾讯...
    cheneydc阅读 4,901评论 1 4
  • 片名:泪光闪闪 涙そうそう 导演:土井裕泰 编剧:吉田纪子 主演:妻夫木聪 / 长泽雅美 / 麻生久美子 / 小泉...
    抽屉电影阅读 281评论 0 1
  • 我想织一张网 网住一切飞禽鸟雀 打落 再看天空明净 叫微风吹得 冷了打颤 心却也伤了 受伤的人最残忍 因为他只在乎...
    先冷阅读 209评论 1 0