当前位置: 首页 > 工具软件 > OpenWhisk > 使用案例 >

WSL2+Docker部署OpenWhisk

太叔经赋
2023-12-01

在 WSL2 + Docker 环境中安装部署 OpenWhisk

对于本地、轻量级开发的场景,OpenWhisk 文档中推荐在 Docker 内嵌的 Kubernetes 中运行 OpenWhisk。

环境准备

安装 Helm

Helm 是 Kubernetes 的包管理器,帮助发现、分享和使用为 Kubernetes 构建的应用。可以通过 Helm 项目或包管理器的方式安装。

如 Windows 中的 Scoop:scoop install helm

获取 OpenWhisk chart 部署文件

Helm 通过 chart 文件描述 Kubernetes 的部署信息,OpenWhisk 的最新部署文件可以在 openwhisk-deploy-kube 仓库 中获取到。

git clone https://github.com/apache/openwhisk-deploy-kube.git

由于 Helm 仓库未同步更新,仓库 README 中 “Deploy With Helm” 一节介绍的部署方式,已经无法成功部署。需要克隆 GitHub 仓库,得到最新部署信息。

创建 mycluster.yaml 文件

根据 openwhisk-deploy-kube 仓库中的配置模板,进行如下配置

...
whisk:
  ingress:
    type: NodePort
    apiHostName: host.docker.internal
    apiHostPort: 31001
    apiHostProto: "https"
    useInternally: false
...
  • 由于 WSL2 上的 Docker 在虚拟机中创建容器,需要将 apiHostName 修改为 host.docker.internal,表示宿主机网络。
  • 添加 apiHostProto"https"

部署 OpenWhisk

使用 helm 实现 OpenWhisk 部署。部署时,指定应用名为 owdev,创建命名空间为 openwhisk

helm install owdev ./helm/openwhisk -n openwhisk --create-namespace -f mycluster.yaml

验证部署状态

部署状态可以通过 helmkubectl 进行验证:

helm status owdev -n openwhisk
kubectl get pods -n openwhisk --watch

kubectl 得到的所有 pod 状态为 RunningCompleted 即为部署成功。

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

得到的输出大致如下,可以看到 PaseSucceeded:

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 运行信息,可以帮助定位错误

  • 查看所有 Pod 状态:kubectl get pods -n openwhisk
  • 查看某个 Pod 日志输出:kubectl logs <pod name> -n openwhisk
  • 查看某个 Pod 配置与运行信息:kubectl describe pods <pod name> -n openwhisk

Docker 镜像拉取时间过长导致 Pod 初始化失败

当镜像拉取超过一定时间时 (runtime-request-timeout, 参考 Kubenetes 文档),Kubernetes 将取消镜像拉取。部分镜像过大可能会造成镜像无法成功拉取。

可以使用 docker pull 预先拉取镜像,解决该问题。Open Whisk 所用的所有镜像及标签,可以在 helm/openwhisk/values.yaml 中的 imageNameimageTag 找到

容器内无法访问 GitHub 导致 Pod 初始化失败

init-couchdbinstall-packagestests-package-checker 初始化脚本中需要访问 GitHub,由于网络问题,容器内可能无法访问。

可以在容器中配置代理或使用仓库镜像地址解决。

访问 GitHub 的脚本如下:

  • ./helm/openwhisk/configMapFiles/initCouchDB/initdb.sh
  • ./helm/openwhisk/configMapFiles/installPackages/myTask.sh
  • ./helm/openwhisk/configMapFiles/tests/systemTest/myTask.sh

gitee上可用的镜像仓库对应地址如下:

githubgitee
apache/openwhiskhttps://gitee.com/Blue_Carp/openwhisk
apache/openwhisk-cataloghttps://gitee.com/lekum2/openwhisk-catalog
apache/openwhisk-package-alarmshttps://gitee.com/lekum2/openwhisk-package-alarms.git
apache/openwhisk-package-kafkahttps://gitee.com/lekum2/openwhisk-package-kafka.git

参考

 类似资料: