前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Serverless 工程实践|自建 Apache OpenWhisk 平台

Serverless 工程实践|自建 Apache OpenWhisk 平台

作者头像
玖柒的小窝
修改2021-11-02 09:18:33
3.1K1
修改2021-11-02 09:18:33
举报
文章被收录于专栏:各类技术文章~各类技术文章~

前言:OpenWhisk 是一个开源、无服务器的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无须用户关心相关的基础设施架构。

OpenWhisk 简介

OpenWhisk 是基于云的分布式事件驱动的编程服务。OpenWhisk 提供一种编程模型,将事件处理程序注册到云服务中,以处理各种不同的服务。其可以支持数千触发器和调用,可以对不同规模的事件进行响应。

OpenWhisk 是由许多组件构建的,这些组件让 OpenWhisk 成为一款优秀的开源 FaaS 平台。

1.png
1.png

Apache OpenWhisk 组件结构

OpenWhisk 部署

实验机器操作系统为 Ubuntu 18.04 Desktop。使用 GitHub 上所提供的 incubator-openwhisk 进行安装,如果本机没有安装 Git,需要先安装 Git:

代码语言:javascript
复制
apt install git
复制代码

接下来克隆 repo 到本地目录:

代码语言:javascript
复制
git clone https://github.com/apache/incubator-openwhisk.git openwhisk
复制代码

克隆完成之后,显示如图所示。

2.png
2.png

Apache OpenWhisk 项目 Clone

进入 OpenWhisk 目录,并且执行脚本。OpenWhisk 是由 Scala 开发的,运行需要安装 Java 环境。下面的脚本实现了 Java 环境的安装,以及其他的所需要的软件:

代码语言:javascript
复制
cd openwhisk && cd tools/ubuntu-setup && ./all.sh
复制代码

Apache OpenWhisk 安装配置如图所示。

3.png
3.png

Apache OpenWhisk 安装配置

OpenWhisk 使用 ansible 进行部署,环境变量定义在 ansible/environments/group_vars/all 下:

代码语言:javascript
复制
limits:
invocationsPerMinute: "{{ limit_invocations_per_minute | default(60) }}"
concurrentInvocations: "{{ limit_invocations_concurrent | default(30) }}"
concurrentInvocationsSystem:  "{{ limit_invocations_concurrent_system | default
    (5000) }}"
firesPerMinute: "{{ limit_fires_per_minute | default(60) }}"
sequenceMaxLength: "{{ limit_sequence_max_length | default(50) }}"
复制代码

上面程序定义了 OpenWhisk 在系统中的限制。

  • invocationsPerMinute 表示同一个 Namespace 每分钟调用 Action 的数量。
  • concurrentInvocations 表示同一个 Namespace 的并发调用数量。
  • concurrentInvocationsSystem 表示系统中所有 Namespace 的并发调用数量。
  • firesPerMinute 表示同一个 Namespace 中每分钟调用 Trigger 的数量。
  • sequenceMaxLength 表示 Action 的最大序列长度。

如果需要修改上述的默认值,可以把修改后的值添加到文件 ansible/environments/local/group_vars/all 的末尾。例如,Action 的最大序列长度为 100,可以将 sequenceMaxLength: 120 添加到文件的末尾。

接下来,为 OpenWhisk 配置一个持久存储的数据库,有 CouchDB 和 Cloudant 可选。以 CouchDB 为例,配置环境:

代码语言:javascript
复制
export OW_DB=CouchDB
export OW_DB_USERNAME=root
export OW_DB_PASSWORD=PASSWORD
export OW_DB_PROTOCOL=http
export OW_DB_HOST=172.17.0.1
export OW_DB_PORT=5984
复制代码

在 openwhisk/ansible 目录下,运行脚本,如图所示。

代码语言:javascript
复制
ansible-playbook -i environments/local/ setup.yml
复制代码
4.png
4.png

执行脚本过程

接下来使用 CouchDB 部署 OpenWhisk,确保本地已经有了 db_local.ini。在 openwhisk/ 目录下执行部署命令:

代码语言:javascript
复制
./gradlew distDocker
复制代码

如果部署过程中出现问题(如下图所示),可能是没有安装 npm 导致的,此时可以执行如下指令。

5.png
5.png

部署过程可能报错示例

代码语言:javascript
复制
apt install npm
复制代码

稍等片刻,可以看到 Build 成功页面,如图所示。

6.png
6.png

Build 成功示例

接下来进入 openwhisk/ansible 目录:

代码语言:javascript
复制
ansible-playbook -i environments/local/ couchdb.yml
ansible-playbook -i environments/local/ initdb.yml
ansible-playbook -i environments/local/ wipe.yml
ansible-playbook -i environments/local/ apigateway.yml
ansible-playbook -i environments/local/ openwhisk.yml
ansible-playbook -i environments/local/ postdeploy.yml
复制代码

执行脚本过程如图所示。

7.png
7.png

图片执行脚本过程

部署成功后,OpenWhisk 会在系统中启动几个 Docker 容器。我们可以通过 docker ps 来查看:

代码语言:javascript
复制
docker ps --format "{{.Image}} \t {{.Names }}"
复制代码

安装成功后的容器列表如图所示。

8.png
8.png

安装成功后的容器列表

开发者工具

OpenWhisk 提供了一个统一的命令行接口 wsk。生成的 wsk 在 openwhisk/bin 下。其有两个属性需要配置。

  • API host 用于部署 OpenWhisk 的主机名或 IP 地址的 API。
  • Authorization key(用户名或密码)用来授权操作 OpenWhisk 的 API。

设置 API host,在单机配置中的 IP 应该为 172.17.0.1,如图所示。

代码语言:javascript
复制
./bin/wsk property set --apihost '172.17.0.1'
复制代码
9.png
9.png

设置 API host

设置 key:

代码语言:javascript
复制
./bin/wsk property set --auth `cat ansible/files/auth.guest
复制代码

权限设置如图所示。

10.png
10.png

图片设置权限

OpenWhisk 将 CLI 的配置信息存储在 ~/.wskprops 中。这个文件的位置也可以通过环境变量 WSK_CONFIG_FILE 来指定。

验证 CLI:

代码语言:javascript
复制
wsk action invoke /whisk.system/utils/echo –p message hello –result
{
    "message": "hello"
}
复制代码

体验测试

创建简单的动作(action),代码如下:

代码语言:javascript
复制
# test.py
def main(args):
    num = args.get("number", "30")
    return {"fibonacci": F(int(num))}
def F(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return F(n - 1) + F(n - 2)
复制代码

创建动作:

代码语言:javascript
复制
/bin/wsk action create myfunction ./test.py  --insecure
复制代码

函数创建如图所示。

11.png
11.png

创建函数

触发动作:

代码语言:javascript
复制
./bin/wsk -i action invoke myfunction --result --blocking --param nember 20
复制代码

得到结果,如图所示。

12.png
12.png

执行函数

至此,我们完成了 OpenWhisk 项目的部署以及测试。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenWhisk 简介
  • OpenWhisk 部署
  • 开发者工具
  • 体验测试
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档