第一塊絆腳石
本地ubuntu虛擬機上搭建了openwhisk環(huán)境(如何搭建戳這里)廷没,然而這新項目上來就給坑我……開始的helloworld執(zhí)行正常(這點小事讨惩,必須給力),探索一番后想嘗試些新的東西议谷,發(fā)現官方文檔中有alarm的包笆怠,本來想看看效果,我在本地環(huán)境執(zhí)行查看(這里我將本地的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呢猪落?難道我的環(huán)境部署的有問題贞远?上wsk的slack和大神問了一下,才知道笨忌,目前本地環(huán)境不提供直接的alarm包蓝仲,我勒個去……這么個基礎的東西都不給,我自己搞吧:(
去github找到alarm的代碼官疲,弄下來看看:
# git clone https://github.com/apache/incubator-openwhisk-package-alarms.git
燃鵝……折騰了一陣子以后袱结,發(fā)現該死的README并木有告訴我該怎么安裝,一個alarm包竟然成我了的第一個絆腳石途凫,幾經輾轉垢夹,在github中的幾個issue和slack的交流中,zong于摸清了正確的姿勢维费。
敲黑板……劃重點啦果元,正確的部署alarm步驟:
- 添加alarm action
- 構建alarm service鏡像
- 部署alarm service
添加alarm action
incubator-openwhisk-package-alarms
項目中的腳本installCatalog.sh
,從名字就可以看出來犀盟,它是將alarm的action添加到本地的whisk環(huán)境中的而晒,相當于把alarm的服務注冊到本地的環(huán)境當中:
...
if [ $# -eq 0 ]
then
echo "Usage: ./installCatalog.sh <authkey> <edgehost> <dburl> <dbprefix> <apihost>"
fi
...
腳本執(zhí)行的話需要5個參數,分別是上面那一串阅畴。
第一個參數倡怎,authkey是當前wsk環(huán)境的認證,通過命令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執(zhí)行節(jié)點?以后慢慢看,不過從項目中可以看到摔笤,我們這種才用單節(jié)點的本地部署够滑,edgehost跟apihost相同即可,不過這里的值不是上面命令獲取的url吕世,只用ip地址即可彰触,我的環(huán)境也就是172.17.0.1
。
第三個參數是dburl,也就是數據庫的url地址命辖,前面我們使用的是本地的couchdb數據庫况毅,地址為本機環(huán)境地址,端口一般默認是5984尔艇,根據自己部署時候的參數即可查到尔许,我這里是http://192.168.222.140:5984
。
第四個是dbprefix终娃,alarm服務啟動時會創(chuàng)建數據庫味廊,將這個參數作為前綴,所以隨意起名字吧:whisk_alarms
棠耕。
第五個是apihost余佛,172.17.0.1
。
除此之外窍荧,還需要將openwhisk的所在路徑添加到OPENWHISK_HOME
環(huán)境變量中辉巡。
將以上用到的變量寫到一起,方便以后使用:
# 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"
下面執(zhí)行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郊楣。
我們執(zhí)行wsk命令檢查環(huán)境中的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
可以看到兩個包已經添加到環(huán)境中了。
執(zhí)行action list命令:
# wsk action list
actions
/whisk.system/alarmsWeb/alarmWebAction private nodejs:6
/whisk.system/alarms/alarm private nodejs:6
...
相應的action也添加到環(huán)境中咕痛,第一步完成痢甘。
構建alarm service鏡像
下一步進行構建alarm service的鏡像,和部署wsk環(huán)境時差不多茉贡,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就表示構建成功了腔丧,檢查當前環(huán)境的鏡像:
# 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
提示創(chuàng)建成功后衣厘,超過5s以后如蚜,執(zhí)行命令:
# wsk activation list
activations
1e3d4ce403fb45af98f29351bb482b3a every-5-seconds
e41729c73e8c4a3dbdd3b470dc75d8d8 every-5-seconds
f6bed7cced464a13a3d4fcca86192732 every-5-seconds
248649824cb4406ca46993fafa1b4cd5 every-5-seconds
可以看到定時任務已經按時觸發(fā)執(zhí)行了压恒,到此第一個絆腳石搬走,又可以愉快的玩耍啦错邦。
碎覺先探赫。。撬呢。