在 Kubernetes 集群上的托管 Knative 中运行 OpenWhisk 操作
source link: https://www.tuicool.com/articles/uamUFzZ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
OpenWhisk 社区开始对 OpenWhisk 运行时环境(特别是 Node.js)进行原型设计,以便可以在 Knative 上部署和运行 OpenWhisk 操作。您可以在我的 博客文章(英文) 中了解有关使用 Docker for Desktop 和 Minikube 运行 OpenWhisk 操作的更多信息。
此外, Doug Davis 于 2019 年初宣布了 IBM Cloud Kubernetes Service 上的托管 Knative。他解释了 如何在 Kubernetes 集群中启用托管 Knative 附加组件 。
本教程展示了如何尝试使用 IBM Cloud Kubernetes Service,以了解它与其他环境的不同之处。
免费试用 IBM Cloud
利用 IBM Cloud Lite 快速轻松地构建您的下一个应用程序。您的免费帐户从不过期,而且您会获得 256 MB 的 Cloud Foundry 运行时内存和包含 Kubernetes 集群的 2 GB 存储空间。了解所有细节并确定如何开始。如果您不熟悉 IBM Cloud,请查阅 cognitiveclass.ai 上的 IBM Cloud Essentials 课程 。
学习目标
了解如何在 Kubernetes 集群上的托管 Knative 中运行 OpenWhisk 操作利用免费的 IBM Cloud Kubernetes Service 尝试示例。
预估时间
在安装和配置必备软件之后,本教程大约需要 10 到 15 分钟。
前提条件
- 在单区域/多区域中使用 IBM Cloud Kubernetes Service V1.12.7 创建标准的 Kubernetes 集群,其中包含 4 个核心、16 GB RAM 和 3 个工作节点。(在创建标准群集时,您可以随意享用午餐!)
- 配置 IBM Cloud CLI
。使用以下命令为您的集群下载 kubeconfig 文件:
ibmcloud ks cluster-config <cluster-name>
- 配置
kubectl
以访问 IBM Cloud Kubernetes Service 中的集群。
您可以使用以下命令进行验证:
kubectl cluster-info
-
启用 Knative 附加组件:
ibmcloud ks cluster-addon-enable knative <cluster-name>
(现在是喝咖啡的好时机!)
- 验证
istio-system
、knative-build
、knative-serving
、knative-eventing
和knative-monitoring
下的所有 Pod 都处于Running
状态。
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE istio-system cluster-local-gateway-6d8585d55d-jmmwn 1/1 Running 0 79s ... knative-build build-controller-865d99747c-lj9sh 1/1 Running 0 109s ... knative-eventing eventing-controller-64bf9bbf79-ccq5p 2/2 Running 0 79s ... knative-monitoring elasticsearch-logging-0 1/1 Running 0 108s ... knative-serving activator-58fb6bdff4-5tsjh 0/2 PodInitializing 0 78s ... knative-sources controller-manager-0 1/1 Running 0 106s
步骤
完成以下六个步骤,便能在 Knative 上构建和提供 OpenWhisk 操作:
第 1 步:在 Knative 上为您的容器注册表注册 Secret
Knative 需要访问容器注册表,才能推送本地构建的容器镜像。此处的示例使用 Docker Hub,但您可以通过在 annotation
下更改注册表名称来使用您选择的任何注册表。
将 DOCKERHUB_USERNAME_BASE64_ENCODED
和 DOCKERHUB_PASSWORD_BASE64_ENCODED
替换为您的 Docker Hub 用户名和密码之后,将此文件保存为 docker-secret.yaml
。
apiVersion: v1 kind: Secret metadata: name: dockerhub-user-pass annotations: build.knative.dev/docker-0: https://index.docker.io/v1/ type: kubernetes.io/basic-auth data: # use `echo -n "username" | base64 -b 0` to generate this value username: ${DOCKERHUB_USERNAME_BASE64_ENCODED} # use `echo -n "password" | base64 -b 0` to generate this value password: ${DOCKERHUB_PASSWORD_BASE64_ENCODED}
针对 Docker Hub 应用 Secret 资源清单:
$ kubectl apply -f docker-secret.yaml secret/dockerhub-user-pass created
验证秘密是否存在:
$ kubectl get secret dockerhub-user-pass NAME TYPE DATA AGE dockerhub-user-pass kubernetes.io/basic-auth 2 21s
第 2 步:为 Knative 构建创建服务帐户
创建一个服务帐户,以将构建过程与您在步骤 1 中创建的注册表 Secret 相关联,以便 Knative 构建系统可以使用这些凭据将容器镜像推送到注册表。
apiVersion: v1 kind: ServiceAccount metadata: name: openwhisk-runtime-builder secrets: - name: dockerhub-user-pass
$ kubectl apply -f service-account.yaml serviceaccount/openwhisk-runtime-builder created
验证服务帐户是否存在:
$ kubectl get serviceaccount/openwhisk-runtime-builder NAME SECRETS AGE openwhisk-runtime-builder 2 3m46s
第 3 步:安装 Node.js 运行时环境的构建模板
部署 OpenWhisk 构建模板:
$ kubectl apply -f https://raw.githubusercontent.com/apache/incubator-openwhisk-runtime-nodejs/master/core/nodejsActionBase/buildtemplate.yaml buildtemplate.build.knative.dev/openwhisk-nodejs-runtime created
验证构建模板是否存在:
$ kubectl get buildtemplate openwhisk-nodejs-runtime NAME AGE openwhisk-nodejs-runtime 2m
第 4 步:使用 Hello World 操作代码来部署 Node.js 运行时环境
通过将 DOCKER_USERNAME
替换为您的用户名,将构建文件配置为指向您的 Docker Hub 存储库:
apiVersion: build.knative.dev/v1alpha1 kind: Build metadata: name: nodejs-10-helloworld-with-params spec: serviceAccountName: openwhisk-runtime-builder source: git: url: "https://github.com/apache/incubator-openwhisk-runtime-nodejs.git" revision: "master" template: name: openwhisk-nodejs-runtime arguments: - name: TARGET_IMAGE_NAME value: "docker.io/${DOCKER_USERNAME}/nodejs-10-helloworld-with-params" - name: DOCKERFILE value: "./core/nodejs10Action/knative/Dockerfile" - name: OW_ACTION_NAME value: "nodejs-helloworld-with-params" - name: OW_ACTION_CODE value: "function main(params) { return { payload: 'Hello ' + params.name + ' from ' + params.place + '!' }; }"
使用以下操作代码来部署 Node.js 运行时环境:
$ kubectl apply -f build.yaml build.build.knative.dev/nodejs-10-helloworld-with-params created
验证构建 pod 是否存在:
$ kubectl get build.build.knative.dev/nodejs-10-helloworld-with-params NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME nodejs-10-helloworld-with-params True 8m
第 5 步:将 Node.js 运行时环境作为 Knative 服务提供
现在,您已经使用其中包含的 helloworld
函数构建了 OpenWhisk Node.js 运行时镜像,您可以将该镜像部署为 Knative 服务。
配置服务模板,使其指向从中提取 OpenWhisk 运行时环境(在步骤 4 中构建)的 Docker Hub 存储库。替换 ${DOCKER_USERNAME}
并创建 service.yaml
:
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: nodejs-helloworld-with-params namespace: default spec: runLatest: configuration: revisionTemplate: spec: container: image: docker.io/${DOCKER_USERNAME}/nodejs-10-helloworld-with-params
部署运行时环境:
$ kubectl apply -f service.yaml service.serving.knative.dev/nodejs-helloworld-with-params created
第 6 步:运行 Hello World 操作
此步骤与在 IBM Kubernetes 或 Docker 上使用 JSON
有效负载运行 Knative 服务的方式不同:
{ "activation": { "namespace": "default", "action_name": "nodejs-helloworld-with-params", "api_host": "", "api_key": "", "activation_id": "", "deadline": "4102498800000" }, "value": { "name" : "Jill", "place" : "OK" } }
kubectl get ksvc nodejs-helloworld-with-params NAME DOMAIN LATESTCREATED LATESTREADY READY REASON nodejs-helloworld-with-params nodejs-helloworld-with-params.default.<cluster-name>.<region>.containers.appdomain.cloud nodejs-helloworld-with-params-f2w4p nodejs-helloworld-with-params-f2w4p True curl nodejs-helloworld-with-params.default.<cluster-name>.<region>.containers.appdomain.cloud -H "Content-Type: application/json" -d '@params.json' {"payload":"Hello Jill from OK!"}
太棒啦!您已经在 IBM Cloud Kubernetes Service 上的 Knative 中运行了 hello world
操作。
结束语
本示例可以帮助您了解如何在 Kubernetes 集群上的托管 Knative 中运行 OpenWhisk 操作我在免费的 IBM Cloud Kubernetes 集群上安装 Knative 时遇到了内存限制。在生产环境中,您可能需要计划更多的内存。
在 IBM Cloud Kubernetes Service 上亲身体验一番吧。
参考资源
- 相关文章: 使用 Tekton Pipelines 部署 Knative 应用程序
- 线上课程:Knative 从 0 到 1
本文翻译自: Run OpenWhisk actions on managed Knative on a Kubernetes cluster (2019-05-20)
Recommend
-
67
incubator-openwhisk - Apache OpenWhisk is a serverless event-based programming service and an Apache Incubator project.
-
51
When writing an API, it’s common to produce an output that conforms to a known media type such as JSON API or HAL , etc....
-
44
These are some notes for working on the OpenWhisk PHP Runtime , but are probably applicable to the ot...
-
57
“无服务器”一词是一个极具诱惑力的流行语,因为再也没有什么比服务器更让人痛苦的了。难道说所有的安全漏洞补丁都在你的收件箱里用上百万个电子邮件中数不清的词语描述的?设想一下你如果能够摆脱服务器,你可以不去想这些补丁。难道说防...
-
76
README.md Knative Serving Knative Serving builds on Kubernetes and Istio to support deploying and serving of serverless applications and functions. Ser...
-
61
Knative is a Google-sponsored industry-wide project to establish the best building blocks for creating modern, Kubernetes-native cloud-based software
-
30
This post is a summary of talks I gave at Open Source Summit 2017, Big Mountain Data Fall 2017, and Scale By the Bay 2017. It covers how to serve Apache Spark MLlib...
-
48
Last week Red Hat introduced the open source framework Quarkus which promises fast boot times and low memory usages. This makes Quarkus interesting for Java wor...
-
4
在 Kubernetes 上运行高可用的 Kafka 集群-阳明的博客|Kubernetes|Istio|Prometheus|Python|Golang|云原生 Morning glory Apache Kafka 是目前最流行的分布式消息发布订阅系统,虽然 Kafka 非常强大,但它同样复杂,需...
-
8
如何基于Kubernetes运行Nacos高可用集群 作者:云原生运维圈 2023-12-18 09:37:37 Nacos是阿里巴巴开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK