对于本地、轻量级开发的场景,OpenWhisk 文档中推荐在 Docker 内嵌的 Kubernetes 中运行 OpenWhisk。
Helm 是 Kubernetes 的包管理器,帮助发现、分享和使用为 Kubernetes 构建的应用。可以通过 Helm 项目或包管理器的方式安装。
如 Windows 中的 Scoop:scoop install helm
Helm 通过 chart 文件描述 Kubernetes 的部署信息,OpenWhisk 的最新部署文件可以在 openwhisk-deploy-kube 仓库 中获取到。
git clone https://github.com/apache/openwhisk-deploy-kube.git
由于 Helm 仓库未同步更新,仓库 README 中 “Deploy With Helm” 一节介绍的部署方式,已经无法成功部署。需要克隆 GitHub 仓库,得到最新部署信息。
根据 openwhisk-deploy-kube 仓库中的配置模板,进行如下配置
...
whisk:
ingress:
type: NodePort
apiHostName: host.docker.internal
apiHostPort: 31001
apiHostProto: "https"
useInternally: false
...
apiHostName
修改为 host.docker.internal
,表示宿主机网络。apiHostProto
为 "https"
使用 helm 实现 OpenWhisk 部署。部署时,指定应用名为 owdev
,创建命名空间为 openwhisk
。
helm install owdev ./helm/openwhisk -n openwhisk --create-namespace -f mycluster.yaml
部署状态可以通过 helm
及 kubectl
进行验证:
helm status owdev -n openwhisk
kubectl get pods -n openwhisk --watch
当 kubectl
得到的所有 pod 状态为 Running
或 Completed
即为部署成功。
NAME READY STATUS RESTARTS AGE
owdev-alarmprovider-7656554bcd-zn9jz 1/1 Running 0 61m
owdev-apigateway-5f6cf4bbf7-xvg8c 1/1 Running 0 61m
owdev-controller-0 1/1 Running 0 61m
owdev-couchdb-7548595bbd-6t22t 1/1 Running 0 61m
owdev-gen-certs-nqbz4 0/1 Completed 0 61m
owdev-init-couchdb-57ppb 0/1 Completed 0 61m
owdev-install-packages-fcsr8 0/1 Completed 0 61m
owdev-invoker-0 1/1 Running 0 61m
owdev-kafka-0 1/1 Running 1 (61m ago) 61m
owdev-kafkaprovider-745765c999-m8vmv 1/1 Running 0 61m
owdev-nginx-66b977586d-gqb56 1/1 Running 0 61m
owdev-redis-5dbffc4659-kg74p 1/1 Running 0 61m
owdev-wskadmin 1/1 Running 0 61m
owdev-zookeeper-0 1/1 Running 0 61m
此外,还可以运行 OpenWhisk Helm chart 中定义的基本测试集,进行验证:
helm test owdev -n openwhisk
得到的输出大致如下,可以看到 Pase
为 Succeeded
:
NAME: owdev
LAST DEPLOYED: Tue Dec 6 22:22:05 2022
NAMESPACE: openwhisk
STATUS: deployed
REVISION: 1
TEST SUITE: owdev-tests-package-checker
Last Started: Tue Dec 6 22:29:01 2022
Last Completed: Tue Dec 6 22:29:05 2022
Phase: Succeeded
TEST SUITE: owdev-tests-smoketest
Last Started: Tue Dec 6 22:29:05 2022
Last Completed: Tue Dec 6 22:29:13 2022
Phase: Succeeded
NOTES:
Apache OpenWhisk
Copyright 2016-2021 The Apache Software Foundation
...
使用 kubectl 查看 Pod 运行信息,可以帮助定位错误
kubectl get pods -n openwhisk
kubectl logs -n openwhisk
kubectl describe pods -n openwhisk
当镜像拉取超过一定时间时 (runtime-request-timeout
, 参考 Kubenetes 文档),Kubernetes 将取消镜像拉取。部分镜像过大可能会造成镜像无法成功拉取。
可以使用 docker pull
预先拉取镜像,解决该问题。Open Whisk 所用的所有镜像及标签,可以在 helm/openwhisk/values.yaml
中的 imageName
和 imageTag
找到
init-couchdb
、install-packages
和 tests-package-checker
初始化脚本中需要访问 GitHub,由于网络问题,容器内可能无法访问。
可以在容器中配置代理或使用仓库镜像地址解决。
访问 GitHub 的脚本如下:
./helm/openwhisk/configMapFiles/initCouchDB/initdb.sh
./helm/openwhisk/configMapFiles/installPackages/myTask.sh
./helm/openwhisk/configMapFiles/tests/systemTest/myTask.sh
gitee上可用的镜像仓库对应地址如下:
github | gitee |
---|---|
apache/openwhisk | https://gitee.com/Blue_Carp/openwhisk |
apache/openwhisk-catalog | https://gitee.com/lekum2/openwhisk-catalog |
apache/openwhisk-package-alarms | https://gitee.com/lekum2/openwhisk-package-alarms.git |
apache/openwhisk-package-kafka | https://gitee.com/lekum2/openwhisk-package-kafka.git |