美文网首页云计算学习大数据&云计算
折腾Openwhisk - 本地环境添加alarms

折腾Openwhisk - 本地环境添加alarms

作者: cheneydc | 来源:发表于2017-09-03 23:06 被阅读46次
    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     
    

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

    碎觉先。。。

    相关文章

      网友评论

        本文标题:折腾Openwhisk - 本地环境添加alarms

        本文链接:https://www.haomeiwen.com/subject/hixsjxtx.html