WSL2+Docker部署OpenWhisk

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

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

文章目录

  • 在 WSL2 + Docker 环境中安装部署 OpenWhisk
    • 环境准备
    • 安装 Helm
    • 获取 OpenWhisk chart 部署文件
    • 创建 mycluster.yaml 文件
    • 部署 OpenWhisk
    • 验证部署状态
      • 常见错误与解决
        • 错误排查
        • Docker 镜像拉取时间过长导致 Pod 初始化失败
        • 容器内无法访问 GitHub 导致 Pod 初始化失败
    • 参考

环境准备

  • Docker Desktop
  • WSL2 上的 Docker 配置
  • 启用 Kubernetes in Docker

安装 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 -n openwhisk
  • 查看某个 Pod 配置与运行信息:kubectl describe pods -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上可用的镜像仓库对应地址如下:

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

参考

  • https://openwhisk.apache.org/documentation.html#pre-requisites
  • https://github.com/apache/openwhisk-deploy-kube/blob/master/docs/k8s-docker-for-windows.md
  • https://github.com/apache/openwhisk-deploy-kube#deploying-openwhisk

你可能感兴趣的:(Serverless,docker,kubernetes,容器,serverless)