【免费下载链接】openwhisk
Apache OpenWhisk is an open source serverless cloud platform
项目地址:
https://gitcode.com/gh_mirrors/op/openwhisk
点击查看 免费下载
Apache OpenWhisk 是一个开源的无服务器(serverless)云平台,支持以函数即服务(FaaS)的方式运行代码。本文以仓库中的 tools/ubuntu-setup/README.md 为骨架,结合仓库内实际的安装脚本、Ansible 部署配置与 CLI 文档,完整讲解如何在一台(或多台)Ubuntu 18.04 服务器上,从克隆源码开始,依次完成环境准备、数据存储选型、镜像构建、Ansible 部署、CLI 配置与首个 action 调用,并深入解读每一步背后的脚本实现,帮助你快速搭建一套可本地运行、可扩展为多机分布式部署的 OpenWhisk 环境。
读完本文,你将掌握:Ubuntu 主机上的依赖安装细节(JDK8、Python、Ansible、Docker)、CouchDB/Cloudant/MongoDB 数据存储的选择与配置方法、./gradlew distDocker 的构建流程、以 ansible-playbook 为核心的单机与多机部署方式,以及通过 wsk CLI 完成 API host 配置与 action 调用的完整链路。
前置条件与部署模式
官方文档明确说明,以下步骤在 Ubuntu 18.04 上验证可用。安装所需软件时,根据系统权限配置,你可能需要 sudo 或 root 权限。
部署存在两种典型模式:
- 单机/单 VM 模式:所有命令直接在宿主机(host machine)上执行,OpenWhisk 的各组件以 Docker 容器形式运行在同一台机器上。
- 多 VM 分布式模式:命令需要在与所有 VM 均可达网络连通的一台机器上执行,这台机器称为 bootstrapper(引导机)。它理想情况下是部署在 IaaS(基础设施即服务平台)中的一台 Ubuntu 18.04 VM;如果你的本地机器能够连通 IaaS 中的各 VM,也可以充当 bootstrapper。
注意:无论哪种模式,bootstrapper 机器需要能够通过 SSH 等方式管理所有目标主机,因为后续的 Ansible 部署将以它为中心向各 VM 下发任务。
一、获取源码与安装基础依赖
1.1 克隆 OpenWhisk 源码
如果尚未安装 git,先安装它,然后克隆仓库并进入源码根目录:
# Install git if it is not installed
sudo apt-get install git -y
# Clone openwhisk
git clone https://github.com/apache/openwhisk.git openwhisk
# Change current directory to openwhisk
cd openwhisk
1.2 一键安装依赖脚本
OpenWhisk 在 tools/ubuntu-setup 目录下提供了一组按序执行的安装脚本,all.sh 是总入口。运行:
# 使用 OpenJDK 8 作为默认 Java 环境
(cd tools/ubuntu-setup && ./all.sh)
如果你希望改用 Oracle JDK 8,则传入 oracle 参数:
# 安装全部依赖,同时安装 Oracle JDK 8
(cd tools/ubuntu-setup && ./all.sh oracle)
1.3 脚本内部做了什么:all.sh 的安装流程
从 tools/ubuntu-setup/all.sh 的源码看,all.sh 会依次调用 5 个子脚本,其顺序与职责如下:
| 1 | misc.sh | 安装基础软件包(ntp、git、zip、unzip、tzdata、lsb-release、npm),并配置系统时区为 Etc/UTC、重启 ntp 服务 |
| 2 | pip.sh | 安装 python-pip 及 Python 依赖 argcomplete(用于 wskadmin 命令行补全)、couchdb |
| 3 | java8.sh | 按参数安装 OpenJDK 8 或 Oracle JDK 8 |
| 4 | ansible.sh | 安装并固定 Ansible 2.5.2 及配套的 jinja2、docker、httplib2、requests 版本 |
| 5 | docker.sh / docker-xenial.sh | 按 Ubuntu 版本选择对应 Docker 安装脚本 |
all.sh 的核心逻辑(节选自 all.sh):
set -e
set -x
JAVA_SOURCE=${1:-"open"}
SOURCE="${BASH_SOURCE[0]}"
SCRIPTDIR="$( dirname "$SOURCE" )"
echo "*** installing basics"
/bin/bash "$SCRIPTDIR/misc.sh"
echo "*** installing python dependences"
/bin/bash "$SCRIPTDIR/pip.sh"
echo "*** installing java"
/bin/bash "$SCRIPTDIR/java8.sh" $JAVA_SOURCE
echo "*** installing ansible"
/bin/bash "$SCRIPTDIR/ansible.sh"
echo "*** installing docker"
u_release="$(lsb_release -rs)"
if [ "${u_release%%.*}" -lt "16" ]; then
/bin/bash "$SCRIPTDIR/docker.sh"
else
echo "— WARNING ————————————————-"
echo "Using EXPERIMENTAL Docker CE script on Xenial or later Ubuntu"
echo "— WARNING ————————————————-"
/bin/bash "$SCRIPTDIR/docker-xenial.sh"
fi
其中 JAVA_SOURCE=${1:-"open"} 正是 ./all.sh oracle 参数传递的入口。注意脚本末尾的注释警告:Docker 安装必须是最后一步——因为脚本内部会重启 docker 服务,若在 Docker 容器内做脚本有效性验证,重启操作可能与宿主的 Docker for Mac 控制实例通信并终止容器,因此之后不要再放置任何步骤。
1.4 关键子脚本细节
java8.sh:默认安装 OpenJDK 8(openjdk-8-jdk);在 Ubuntu trusty 上会先添加 ppa:jonathonf/openjdk PPA。传入 oracle 时则添加 ppa:webupd8team/java,并通过 debconf-set-selections 自动接受 Oracle 许可后安装 oracle-java8-installer。
misc.sh 安装 ntp git zip unzip tzdata lsb-release npm,并将系统时区固定为 Etc/UTC,重启 NTP 服务。时区的一致性对后续查看各系统容器日志很重要——OpenWhisk 系统容器默认时区即为 UTC(参见 ansible/README.md 中关于 docker_timezone 的说明)。
ansible.sh 会固定安装一组与 OpenWhisk 部署兼容的版本:
sudo pip install ansible==2.5.2
sudo pip install jinja2==2.9.6
sudo pip install docker==2.2.1 –ignore-installed –force-reinstall
sudo pip install httplib2==0.9.2 –ignore-installed –force-reinstall
sudo pip install requests==2.10.0 –ignore-installed –force-reinstall
注意:该脚本固定的是较老的 Ansible 2.5.2。仓库根目录的 ansible/README.md 对常规部署给出了更新的版本组合(ansible==4.1.0 与 jinja2==3.0.1),两者都可用于部署,选择时请以你的 OpenWhisk 源码版本对应的文档为准。
pip.sh 安装的 argcomplete 用于给 wskadmin 提供命令行 Tab 补全,bashprofile.sh 展示了如何把这些环境配置写入 ~/.bash_profile:
echo 'export PATH=$HOME/openwhisk/bin:$PATH' > "$HOME/.bash_profile"
echo 'eval "$(register-python-argcomplete wskadmin)"' >> "$HOME/.bash_profile"
二、选择并配置数据存储(Data Store)
构建和部署 OpenWhisk 之前,必须先配置底层数据存储。OpenWhisk 支持自管理的 CouchDB 实例,或云端的 Cloudant 服务;在较新版本中,也支持 MongoDB 作为实体存储后端。详细说明见仓库的 tools/db/README.md。
2.1 使用自管理 CouchDB
如果使用自己安装的 CouchDB,请记录其 host、port、username 与 password,并据此修改 openwhisk/ansible/db_local.ini。如果找不到 db_local.ini,请先按 ansible/README.md 的 Setup 小节 生成它。需要满足两点:
- 用户名必须具有管理员权限;
- CouchDB 实例必须可通过 http 或 https 访问(https 需要有效证书)。
2.2 使用临时 CouchDB 容器(仅用于体验)
不想自建 CouchDB 时,可以让部署流程在容器中拉起一个临时 CouchDB。官方建议仅将其作为临时方案,因为:
- 容器在两次创建之间不会持久化数据;
- 每次 clean 或 teardown 之后都需要重新执行 ansible-playbook couchdb.yml;
- 每次都需要重新初始化数据存储(ansible-playbook initdb.yml)。
详细步骤见 ansible/README.md。
2.3 使用 Cloudant
Cloudant 是基于云的数据库服务。可以通过 IBM Cloud 注册账户,并使用 cf 命令行创建实例:
# Create a Cloudant service
cf create-service cloudantNoSQLDB Shared cloudant-for-openwhisk
# Create Cloudant service keys
cf create-service-key cloudant-for-openwhisk openwhisk
# Get Cloudant username and password
cf service-key cloudant-for-openwhisk openwhisk
记录最后一条命令输出的 username 与 password,用于填写 db_local.ini。Cloudant 的固定参数为:
- 协议始终是 HTTPS;
- 端口始终是 443;
- host 形如 <your cloudant user>.cloudant.com。
2.4 初始化数据库(授权密钥)
系统需要特定的授权密钥来安装标准资源(示例 action 等)并为运行测试提供 guest 访问,这些密钥称为 immortal keys:
- 使用持久化存储(如 Cloudant)时,只需执行一次;
- 使用临时 CouchDB 容器时,每次 teardown 后重新部署都要执行。
# Work out of your openwhisk directory
cd /your/path/to/openwhisk/ansible
# Initialize data store containing authorization keys
ansible-playbook initdb.yml
该 playbook 会创建所需的数据结构。即使不确定数据库是否已初始化也不必担心——对已准备好的数据库,playbook 不会重复执行任何操作。执行输出大致如下(以 CouchDB 为例):
PLAY [ansible] *****************************************************************
TASK [setup] *******************************************************************
Tuesday 14 June 2016 16:33:51 +0200 (0:00:00.017) 0:00:00.017 **********
ok: [ansible]
TASK [include] *****************************************************************
Tuesday 14 June 2016 16:33:51 +0200 (0:00:00.262) 0:00:00.280 **********
included: /your/path/to/openwhisk/ansible/tasks/initdb.yml for ansible
TASK [check if the immortal subjects db with CouchDB exists?] ******************
Tuesday 14 June 2016 16:33:51 +0200 (0:00:00.060) 0:00:00.340 **********
ok: [ansible]
TASK [create immortal subjects db with CouchDB] ********************************
Tuesday 14 June 2016 16:33:51 +0200 (0:00:00.329) 0:00:00.670 **********
ok: [ansible]
TASK [recreate the "full" index on the "auth" database] ************************
Tuesday 14 June 2016 16:33:52 +0200 (0:00:00.166) 0:00:00.837 **********
ok: [ansible]
TASK [recreate necessary "auth" keys] ******************************************
Tuesday 14 June 2016 16:33:52 +0200 (0:00:00.162) 0:00:01.000 **********
ok: [ansible] => (item=guest)
ok: [ansible] => (item=whisk.system)
PLAY RECAP *********************************************************************
ansible : ok=6 changed=0 unreachable=0 failed=0
可以看到,initdb 会创建 subjects 数据库并写入 guest 与 whisk.system 两个授权密钥,这与 ansible/files/auth.guest 中 guest 账户的密钥相对应。
2.5 数据库备份与 schema 迁移(生产环境建议)
tools/db/README.md 还提供了两个运维工具:
- replicateDbs.py:基于 CouchDB 复制机制做快照复制与持续复制。标准参数为 –sourceDbUrl 与 –targetDbUrl;replicate 命令支持 –dbPrefix、–expires(按秒清理过期快照)与 –continuous;replay 命令则反向将快照回放到生产库。注意复制是异步的,脚本很快退出,但复制可能持续较长时间。
- moveCodeToAttachment.py:为降低 controller 内存占用,将内联在 action 文档中的代码迁移为附件(attachments),使 controller 只需拉取 action 元数据而非完整代码。参数为 –dbUrl 与 –dbName。
三、构建:./gradlew distDocker
进入源码根目录后,执行 Gradle 构建命令,生成 OpenWhisk 各组件的 Docker 镜像:
cd <home_openwhisk>
./gradlew distDocker
其中 <home_openwhisk> 即你的 OpenWhisk 源码根目录。distDocker 是仓库 gradle/docker.gradle 定义的核心构建任务,它会为 controller、invoker、scheduler 等核心组件构建并打上 latest 标签的镜像(构建时可通过 -PdockerImageTag=xxx 指定自定义镜像标签,后续 Ansible 用 -e docker_image_tag=xxx 引用)。
常见构建失败与解决办法:如果构建报错 Exception in thread "main" javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty,说明系统 CA 证书信任锚点异常,可执行:
sudo update-ca-certificates -f
再重新构建。
四、部署:基于 Ansible 的 openwhisk.yml 流程
4.1 部署入口
构建完成后,按 ansible/README.md 的说明,在单机或 VM 上完成部署与卸载。部署成功后,你的机器上会运行多个 Docker 容器,可用 docker ps 查看。
4.2 Setup:生成 hosts 与 db_local.ini
所有 Ansible 命令都必须在 ansible 目录下执行,因为 ansible.cfg 提供了通用设置。先设置环境变量:
ENVIRONMENT=local # 或 docker-machine / jenkins / vagrant
local 是默认环境,适用于 Ubuntu 与 Docker for Mac,可省略 -i 参数;较老的 Mac + Docker Machine 部署使用 -i environments/docker-machine。
Step 1 — 生成 hosts 文件(每个开发环境只需执行一次):
ansible-playbook -i environments/$ENVIRONMENT setup.yml
它会基于环境设置生成 hosts 配置(临时 CouchDB 实例的 hosts 文件会在 setup.yml 中自动生成)。默认配置不会运行多个核心组件实例;如需启用高可用(HA)模式,可附加 -e mode=HA,从而部署两个 Kafka 与两个 invoker 等。从 ansible/environments/local/hosts.j2.ini 模板可以看到,HA 模式下 controllers、kafkas、invokers、schedulers 组都会多出一台主机(如 controller1、kafka1、invoker1)。
Step 2 — 配置数据库:修改 ansible/db_local.ini 提供以下属性:
[db_creds]
db_provider=
db_username=
db_password=
db_protocol=
db_host=
db_port=
更方便的做法是用环境变量驱动 playbook 生成 db_local.ini:
export OW_DB=CouchDB
export OW_DB_USERNAME=<your couchdb user>
export OW_DB_PASSWORD=<your couchdb password>
export OW_DB_PROTOCOL=<your couchdb protocol>
export OW_DB_HOST=<your couchdb host>
export OW_DB_PORT=<your couchdb port>
ansible-playbook -i environments/$ENVIRONMENT setup.yml
使用 Cloudant 时的对应写法:
export OW_DB=Cloudant
export OW_DB_USERNAME=<your cloudant user>
export OW_DB_PASSWORD=<your cloudant password>
export OW_DB_PROTOCOL=https
export OW_DB_HOST=<your cloudant user>.cloudant.com
export OW_DB_PORT=443
ansible-playbook -i environments/$ENVIRONMENT setup.yml
小贴士:本地开发时,配置与日志目录默认存放在 /tmp(见 ansible/environments/local/group_vars/all 中 openwhisk_tmp_dir 的逻辑)。Linux 与 Mac 会在重启时清空 /tmp,导致 OpenWhisk 无法再次启动。为避免该问题,请在部署前导出 OPENWHISK_TMP_DIR 指向持久化目录。
Step 3(可选):非本地环境需要安装前置依赖:
ansible-playbook -i environments/$ENVIRONMENT prereq.yml
本地环境的前置依赖已就绪,可跳过。执行时 TASK [prereq : check for pip] 显示失败是正常现象(未装 pip 时会先安装)。
4.3 基于 CouchDB 的完整部署命令序列
cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/$ENVIRONMENT couchdb.yml
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml
# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml
各 playbook 要点:
- couchdb.yml:部署 CouchDB(临时容器方案时每次 clean/teardown 后都要重跑);
- initdb.yml:每次全新部署 CouchDB 时都要运行,用于初始化 subjects 数据库(已初始化过则自动跳过);
- wipe.yml:仅应在全新部署时运行,否则会丢失已有 action 与 activation 数据;
- postdeploy.yml:部署后安装公共包(catalog)与示例 action;
- apigateway.yml / routemgmt.yml:启用 API 网关与路由管理;
- 若只是重启操作系统后恢复服务,直接运行 ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml 即可,不会清空数据存储。
限制说明:单台机器上无法运行多个 CouchDB 节点——CouchDB 依赖 Erlang EPMD 发现其他节点,多节点应分别部署在不同机器上,否则端口会冲突。
4.4 基于 Cloudant 的部署命令序列
cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml
# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml
与 CouchDB 序列的关键差异:initdb 每个 Cloudant 数据库只需运行一次,且 initdb.yml 只初始化未初始化的库,其余规则与上一节一致。
4.5 基于 MongoDB 的部署命令序列
较新版本支持以 MongoDB 替代 CouchDB 存储实体。先部署 MongoDB 服务(仅测试开发用,生产建议使用外部 MongoDB 服务器;需先 pip install pymongo):
ansible-playbook -i environments/<environment> mongodb.yml -e mongodb_data_volume="/tmp/mongo-data"
然后执行:
cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/<environment> initMongodb.yml -e mongodb_connect_string="mongodb://172.17.0.1:27017"
ansible-playbook -i environments/<environment> apigateway.yml -e mongodb_connect_string="mongodb://172.17.0.1:27017"
ansible-playbook -i environments/<environment> openwhisk.yml -e mongodb_connect_string="mongodb://172.17.0.1:27017" -e db_artifact_backend="MongoDB"
# installs a catalog of public packages and actions
ansible-playbook -i environments/<environment> postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/<environment> apigateway.yml
ansible-playbook -i environments/<environment> routemgmt.yml
可用的 MongoDB 参数为:
mongodb:
connect_string: "{{ mongodb_connect_string }}"
database: "{{ mongodb_database | default('whisks') }}"
data_volume: "{{ mongodb_data_volume | default('mongo-data') }}"
4.6 使用 ElasticSearch 存储 activations
你可以用 ElasticSearch(ES)单独存储 activation 记录,其余实体仍存于 CouchDB。仓库提供 elasticsearch.yml 用于搭建测试/开发用的简单 ES 集群。自定义 ES 参数示例:
elastic_protocol="http"
elastic_index_pattern="openwhisk-%s" // 会与 namespace 名组合,不同 namespace 使用不同 index
elastic_base_volume="esdata" // 存放 ES 数据的 docker volume 名称
elastic_cluster_name="openwhisk"
elastic_java_opts="-Xms1g -Xmx1g"
elastic_loglevel="INFO"
elastic_username="admin"
elastic_password="admin"
elasticsearch_connect_string="x.x.x.x:9200,y.y.y.y:9200" // 若使用外部 ES 集群则填写
部署序列:
cd <openwhisk_home>
./gradlew distDocker
cd ansible
# couchdb 仍然用于存储 subjects 与 actions
ansible-playbook -i environments/$ENVIRONMENT couchdb.yml
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
# 部署一个简单的 ES 集群,使用外部 ES 集群时可跳过
ansible-playbook -i environments/$ENVIRONMENT elasticsearch.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml -e db_activation_backend=ElasticSearch
# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml
4.7 单组件热替换、清理与卸载
-
热替换单个组件:例如重新构建 invoker 镜像后只重部署 invoker:
cd <openwhisk_home>
./gradlew :core:invoker:distDocker -PdockerImageTag=myNewInvokercd ansible
ansible-playbook -i environments/$ENVIRONMENT invoker.yml -e docker_image_tag=myNewInvoker省略镜像标签参数时默认使用 latest。若只清理 controller:
cd ansible
ansible-playbook -i environments/$ENVIRONMENT controller.yml -e mode=clean注意:在分布式环境中,某些组件(如 invoker)存在于多台机器上,运行其 playbook 会在该组件 playbook 指向的所有主机上执行。
-
清理整个部署:
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml -e mode=clean
-
移除目标环境的所有前置依赖(通常不必要):
ansible-playbook -i environments/$ENVIRONMENT prereq.yml -e mode=clean
-
精简模式(Lean):不部署 Kafka、Zookeeper 及独立 invoker 时,把 openwhisk.yml 替换为:
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml -e lean=true
4.8 部署后的系统限制(limits)
系统默认的节流(throttling)限制配置在 ansible/group_vars/all 中,可按环境覆盖:
limits:
invocationsPerMinute: "{{ limit_invocations_per_minute | default(60) }}"
concurrentInvocations: "{{ limit_invocations_concurrent | default(30) }}"
firesPerMinute: "{{ limit_fires_per_minute | default(60) }}"
sequenceMaxLength: "{{ limit_sequence_max_length | default(50) }}"
含义分别为:每个 namespace 每分钟允许的 action 调用次数、允许的最大并发调用数、每分钟允许的 trigger 触发次数、sequence action 的最大长度。
4.9 常见故障排查
-
setuptools 版本不匹配:出现 ERROR! Unexpected Exception: … Requirement.parse('setuptools>=11.3')) 时升级 setuptools:
pip install –upgrade setuptools –user python
-
路径含空格:Ansible 2.1.0.0 及更早版本不支持路径中的空格,报错 fatal: [ansible]: FAILED! => {"failed": true, "msg": "need more than 1 value to unpack"} 时,请把源码树放到不含空格的路径下。
-
容器时区:所有系统容器默认时区为 UTC,可通过 ansible/group_vars/all 全局配置,或运行 playbook 时附加 -e docker_timezone=xxx 覆盖。
五、配置 wsk CLI 并验证部署
5.1 配置 API host 与授权密钥
部署完成后,OpenWhisk CLI(wsk)位于 openwhisk/bin/ 下(其他平台的可执行文件在 bin/mac/、bin/linux/、bin/windows/)。配置 CLI 需要两个属性:API host 与授权密钥。API host 可从部署生成的 whisk.properties 的 edge.host 属性获取;本地部署时,它通常是 172.17.0.1,即 ansible/environments/local/hosts.j2.ini 中 [edge] 组的 IP(对应 docker0 网桥地址,docs/cli.md 亦明确 API host 应为 edge host 的 IP)。
# 从 openwhisk 目录运行,设置 API host
./bin/wsk property set –apihost <openwhisk_baseurl>
# 本地部署带自签名 SSL 证书时,可附加 –insecure 跳过证书校验
# 配置 guest 账户授权密钥
./bin/wsk property set –auth `cat ansible/files/auth.guest`
CLI 属性默认保存在 ~/.wskprops,可用环境变量 WSK_CONFIG_FILE 改变其位置。.wskprops 中的关键键为 APIHOST(API host)与 AUTH(授权密钥)。可选键还包括 APIGW_ACCESS_TOKEN(独立托管的 API Gateway 服务的授权令牌)与 APIGW_TENANT_ID(API 端点归属的租户标识)。
提示:命令行补全需要 bash 4.1 及以上版本,docs/cli.md 对 Mac 用户给出了 brew install bash 的升级建议。
5.2 调用第一个 action 验证全链路
配置完成后,调用内置的 echo action 验证整条部署链路:
bin/wsk action invoke /whisk.system/utils/echo -p message hello –result
{
"message": "hello"
}
该命令向 /whisk.system/utils/echo 发送带参数 message=hello 的调用请求,–result 表示只输出 action 的返回结果。能正常得到 {"message": "hello"},即说明:源码构建成功、镜像已部署、controller 与 invoker 正常协作、action 执行链路(通过 Kafka 消息队列分发到容器池)完全打通。更多 CLI 用法可参考 docs/cli.md 与 docs/samples.md。
六、从单机到多机分布式部署的要点
本文的安装命令默认面向单机/单 VM 部署;若要做多 VM 分布式部署:
组件角色的划分与部署细节可继续阅读 ansible/README.md、docs/deploy.md 以及 docs/modules.md,其中 docs/modules.md 从架构层面说明了各模块(controller、invoker、scheduler 等)的职责与相互协作关系。
赞
【免费下载链接】openwhisk
Apache OpenWhisk is an open source serverless cloud platform
项目地址:
https://gitcode.com/gh_mirrors/op/openwhisk
点击查看 免费下载
相关推荐
终极指南:如何用import_3dm插件实现Rhino到Blender的无缝数据转换
鸣潮游戏智能自动化工具完整使用指南:从零开始实现后台自动战斗
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网硕互联帮助中心






评论前必须登录!
注册