Apache OpenWhisk 2.0.0 配置参数详解
Apache OpenWhisk 2.0.0 standalone 单机模式配置参数详解,覆盖 standalone.conf 配置架构、用户凭据、配额限制、控制器网络、SPI 提供者、度量监控、运行时支撑、内置组件映像与 CORS 等全部核心配置项,含修改生效方式与常见问题,全部取值来自 2.0.0 发布版实测
Apache OpenWhisk 2.0.0 配置参数详解
目标:系统梳理 Apache OpenWhisk 2.0.0 standalone 单机模式的全部核心配置项,说明每个参数的默认值、作用与修改方式。文中取值均来自 2.0.0 发布版
core/standalone/src/main/resources/standalone.conf与实测运行环境。
一、环境信息
- Apache OpenWhisk:2.0.0(standalone 单机模式)
- 配置文件:
core/standalone/src/main/resources/standalone.conf(源码内,构建后打入 jar) - 配置语法:HOCON(Human-Optimized Config Object Notation)
- 生效方式:修改 standalone.conf 后需重新执行
gradle :core:standalone:build --no-daemon并重启服务 - 运行用户:root(示例账号:root,密码:q1w2e3r4)
二、配置架构总览
standalone.conf 首行通过 include classpath("application.conf") 引入 OpenWhisk 全量默认配置,随后以覆盖方式定义单机模式专属值。配置层级如下:
application.conf(全量默认,由 include 引入)
└── standalone.conf(单机模式覆盖)
├── kamon(监控模块)
├── whisk.metrics(度量开关)
├── whisk.spi(服务提供者接口实现)
├── whisk.info(构建信息)
├── whisk.config(配额限制)
├── whisk.controller(控制器网络)
├── whisk.users(引导用户凭据)
├── 运行时支撑(standalone 工厂配置)
├── whisk.swagger-ui(接口文档资源)
├── whisk.standalone(内置组件映像)
├── whisk.apache-client(HTTP 客户端)
├── 函数运行环境参数(extra-args)
└── akka-http-cors(跨域策略)
注意:HOCON 支持引用环境变量的语法,可将额外环境变量注入函数运行环境。
三、核心配置详解
3.1 用户凭据(whisk.users)
standalone 启动时自动引导两个预置用户:
| 参数 | 默认值 | 说明 |
|---|---|---|
users.guest | 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP | 默认命名空间 guest 的鉴权凭据,wsk 默认使用 |
users.whisk-system | 789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP | 系统级用户,用于预置动作等内部操作 |
格式为 UUID:secret。修改后需同步更新 wsk 的 --auth:
# wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
3.2 构建信息(whisk.info)
| 参数 | 默认值 | 说明 |
|---|---|---|
info.build-no | standalone | 接口返回的构建号,wsk property get --all 中显示为 whisk API build number |
info.date | ??? | 构建日期,未由发布版填充 |
3.3 配额限制(whisk.config)
| 参数 | 默认值 | 说明 |
|---|---|---|
config.controller-instances | 1 | 控制器实例数 |
config.limits-actions-sequence-maxLength | 50 | 单个序列动作可串联的最大动作数 |
config.limits-triggers-fires-perMinute | 60 | 触发器每分钟最大触发次数 |
config.limits-actions-invokes-perMinute | 60 | 动作每分钟最大调用次数 |
config.limits-actions-invokes-concurrent | 30 | 动作最大并发调用数 |
动作级默认限额(wsk action get hello 实测回显 limits 字段):
| 参数 | 默认值 | 说明 |
|---|---|---|
timeout | 60000 | 单次调用最长执行毫秒数 |
memory | 256 | 单次调用可用内存上限(MB) |
logs | 10 | 单次调用日志大小上限(MB) |
concurrency | 1 | 单实例内最大并发激活数 |
3.4 控制器网络(whisk.controller)
| 参数 | 默认值 | 说明 |
|---|---|---|
controller.protocol | http | 对外协议 |
controller.interface | localhost | 默认仅绑定本机回环地址;standalone 启动时实际按探测到的本机地址绑定(如实测回显 http://172.18.0.1:3233),请以实际服务器 IP 为准 |
3.5 SPI 服务提供者(whisk.spi)
standalone 单机模式使用精简实现,无需外部协调组件:
| 参数 | 默认值(实现类) | 说明 |
|---|---|---|
ArtifactStoreProvider | MemoryArtifactStoreProvider | 内存存储实现,重启即清空实体 |
MessagingProvider | LeanMessagingProvider | 轻量消息实现(lean 模式) |
LoadBalancerProvider | LeanBalancer | 轻量负载均衡实现 |
LogStoreProvider | 平台内置 CLI 驱动实现 | 基于命令行的日志存储,稳定且无需 root 特殊权限 |
InvokerProvider | InvokerReactive | 响应式调用器实现(2.0.0 发布版需手动声明,否则默认实现要求额外的外部协调组件配置而启动失败) |
InvokerServerProvider | DefaultInvokerServer | 默认调用器服务端实现 |
⚠️ 2.0.0 发布版 standalone.conf 未声明
InvokerProvider与InvokerServerProvider,直接启动会报Key not found: 'etcd'。必须在whisk.spi段补充上述两项后重新构建。
3.6 度量监控(whisk.metrics / kamon)
| 参数 | 默认值 | 说明 |
|---|---|---|
metrics.kamon-enabled | true | 开启 Kamon 度量框架 |
metrics.kamon-tags-enabled | true | 开启度量标签 |
metrics.prometheus-enabled | true | 开启 Prometheus 指标暴露 |
kamon.modules.statsd-reporter.enabled | false | 单机模式关闭 statsd 上报 |
3.7 运行时支撑配置
| 参数 | 默认值 | 说明 |
|---|---|---|
pull-standard-images | false(发布版默认为 true) | 控制冷启动时是否自动拉取标准运行时映像;网络受限环境必须设为 false,否则首次调用因拉取失败报 HTTP 500 冷启动失败 |
use-runc | false | 关闭 runc 以保持稳定(发布版默认关闭) |
extra-args.env | 环境变量注入 | 通过环境变量向函数运行环境注入额外变量 |
运行时映像由 jar 内 BOOT-INF/classes/runtimes.json 声明,kind 与映像对应关系(实测摘录):
nodejs: nodejs:20 -> openwhisk/action-nodejs-v20:1.22.0
python: python:3.10 -> openwhisk/action-python-v3.10:1.19.0
java: java:8 -> openwhisk/java8action:1.19.0
go: go:1.20 -> openwhisk/action-golang-v1.20:1.24.0
php: php:8.1 -> openwhisk/action-php-v8.1:1.20.0
ruby: ruby:2.5 -> openwhisk/action-ruby-v2.5:1.17.0
swift: swift:5.3 -> openwhisk/action-swift-v5.3:1.18.0
dotnet: dotnet:3.1 -> openwhisk/action-dotnet-v3.1:1.17.0
rust: rust:1.34 -> openwhisk/action-rust-v1.34:1.3.0
创建动作时通过 --kind 指定:
# wsk action create hello /tmp/hello.js --kind nodejs:20
ok: created action hello
3.8 接口文档资源(whisk.swagger-ui)
| 参数 | 默认值 | 说明 |
|---|---|---|
swagger-ui.file-system | false | 不从文件系统加载 |
swagger-ui.dir-path | BOOT-INF/classes/swagger-ui | 从 jar 内 classpath 加载 Swagger UI 资源 |
3.9 内置组件映像(whisk.standalone)
standalone 单机模式默认不拉起以下组件(按需启用),配置其映像来源:
| 参数 | 默认值 | 说明 |
|---|---|---|
standalone.redis.image | redis:4.0 | 可选 Redis 映像 |
standalone.api-gateway.image | openwhisk/apigateway:0.11.0 | API 网关映像;未启用时 wsk api 命令不可用(实测报 The requested resource does not exist. code MFcH7wiX1KCmkNXkdaL0T3faY75CVX22) |
standalone.couchdb.image | apache/couchdb:2.3 | 可选持久化存储映像;单机默认使用内存存储 |
standalone.couchdb.user | whisk_admin | CouchDB 管理用户(启用时) |
standalone.couchdb.password | some_passw0rd | CouchDB 管理密码(启用时) |
standalone.couchdb.prefix | whisk_local_ | 数据库前缀 |
standalone.couchdb.volumes-enabled | true | 启用数据卷 |
standalone.user-events.image | openwhisk/user-events:2.0.0 | 用户事件映像 |
standalone.user-events.prometheus-image | prom/prometheus:v2.5.0 | Prometheus 映像 |
standalone.user-events.grafana-image | grafana/grafana:6.1.6 | Grafana 映像 |
3.10 跨域策略(akka-http-cors)
| 参数 | 默认值 | 说明 |
|---|---|---|
allow-generic-http-requests | yes | 允许通用 HTTP 请求 |
allow-credentials | yes | 允许携带凭据 |
allowed-origins | * | 允许任意来源 |
allowed-headers | * | 允许任意请求头 |
allowed-methods | ["GET", "POST", "HEAD", "OPTIONS"] | 允许的 HTTP 方法 |
exposed-headers | [] | 暴露的响应头 |
max-age | 1800 seconds | 预检结果缓存时长 |
四、JVM 与运行参数
standalone 为 Java 服务,运行期 JVM 参数通过 JAVA_TOOL_OPTIONS 注入(实测环境必备两项):
JAVA_TOOL_OPTIONS="-Djava.io.tmpdir=/opt/tmp -Xms256m -Xmx512m"
java -jar /opt/OpenWhisk-2.0.0/bin/openwhisk-standalone.jar
| 参数 | 推荐值 | 说明 |
|---|---|---|
-Djava.io.tmpdir | /opt/tmp | 规避 tmpfs 下 Scala 编译/运行期 JNA mmap 失败 |
-Xms | 256m | JVM 初始堆内存 |
-Xmx | 512m | JVM 最大堆内存(遵循 256–512MB 限制规范) |
五、配置修改与生效
- 编辑
core/standalone/src/main/resources/standalone.conf; - 重新构建:
cd /opt/OpenWhisk-2.0.0
JAVA_TOOL_OPTIONS="-Djava.io.tmpdir=/opt/tmp" gradle :core:standalone:build --no-daemon
回显(节选):
BUILD SUCCESSFUL in 22s
32 actionable tasks: 6 executed, 26 up-to-date
- 重启服务并确认生效:
wsk property get --all
whisk API host http://172.18.0.1:3233
whisk API build number standalone
通过 Compose 部署时,环境变量类参数(如
JAVA_TOOL_OPTIONS)可在编排文件的environment段配置;配置文件类参数仍需先构建进 jar(见同专栏 Compose 部署指南)。
六、注意事项
- 2.0.0 发布版必须补充
whisk.spi的InvokerProvider与InvokerServerProvider,否则启动失败(Key not found: 'etcd')。 - 网络受限环境必须设
pull-standard-images = false并提前准备运行时映像,否则冷启动失败。 - 单机模式为内存存储,
whisk.config中的配额为全局上限,重启后实体与统计清零。 - 所有示例值(如 172.18.0.1)为实测环境地址,生产环境请按实际服务器 IP 替换。
七、常见问题
7.1 修改 standalone.conf 后启动仍报 Key not found: 'etcd'
原因:未重新构建 jar,或 whisk.spi 段未生效。
解决:确认在 whisk.spi 段增加 InvokerProvider 与 InvokerServerProvider 后重新执行 4.4 节构建命令并重启。
7.2 首次调用函数报 HTTP 500 / 冷启动失败
原因:pull-standard-images = true 时冷启动尝试从公网拉取标准运行时映像。
解决:改为 false,提前导入所需运行时映像(如 openwhisk/action-nodejs-v20:1.22.0)。
7.3 wsk api create 报资源不存在
原因:单机模式未启用 API 网关组件。
解决:standalone 模式不支持 wsk api 系列命令,属预期现象;如需 API 网关请启用 standalone.api-gateway 组件并按官方多节点部署文档操作。
7.4 修改用户凭据后 wsk 无法访问
原因:wsk 仍使用旧 --auth。
解决:wsk property set --auth <新凭据> 后重试。