《OpenShift 4.x HOL教程汇总》

在Serverless的使用场景中很多是基于事件触发的,即当Kative通过Eventing机制接收到某类事件后调用后台的Kative Service,本文介绍几种不同的触发方式调用Serverless。
在完成《OpenShift 4 之Knative(2):第一个Serverless应用》后,可根据本文实现“通过事件调用Serverless服务”。

文章目录

  • 通过事件直接触发Serverless Service
    • 创建Event Source
    • 验证Serverless服务被触发
  • 通过订阅事件触发Serverless Service
    • 创建Channel对象
    • 验证Serverless服务被触发

通过事件直接触发Serverless Service

创建Event Source

首先我们创建一个基于“CronJobSource“对象的定时任务,该对象将定时任务的sink设为上一步实现的“dumpy-serverless”服务。

# event-source.yaml
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource
metadata:name: event-dumpy-cronjob-source
spec:schedule: "* * * * *"sink:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: dumpy-serverless
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/event-source.yaml
$ oc get sources
NAME                                                                    AGE
cronjobsource.sources.eventing.knative.dev/event-dumpy-cronjob-source   24m

验证Serverless服务被触发

  1. 持续观察运行的Pod情况,此时应该有2个Running的Pod,一个Pod是运行定时任务event-dumpy-cronjob-source,另一个Pod是运行被调用的dumpy-serverless。
$ oc get pod | grep Running -w
cronjobsource-event-dumpy--390658a6-245e-11ea-9fb4-52fdfc072wr5   1/1     Running     0          29m
dumpy-serverless-xrjzq-2-deployment-99cfd764-g8wxz                2/2     Running     0          28m
  1. 然后通过查看dumpy-serverless的日志,确认该服务被每1分钟调用一次。
$ oc logs -f dumpy-serverless-xrjzq-2-deployment-99cfd764-g8wxz -c user-container
{"body":""}
2019/12/22 01:58:00 Openshift Http Request Dumper received a message: POST / HTTP/1.1
Host: dumpy-serverless.kn-demo.svc.cluster.local
Accept-Encoding: gzip
Ce-Id: 22c8e7d2-ba8f-4e1a-8028-dd292d417b3d
Ce-Source: /apis/v1/namespaces/kn-demo/cronjobsources/event-dumpy-cronjob-source
Ce-Specversion: 0.3
Ce-Time: 2019-12-22T01:58:00.003275636Z
Ce-Type: dev.knative.cronjob.event
Content-Length: 11
Forwarded: for=10.128.1.41;proto=http, for=10.128.1.6
K-Proxy-Request: activator
User-Agent: Go-http-client/1.1
X-B3-Parentspanid: 56637b9df6d4dd2b
X-B3-Sampled: 0
X-B3-Spanid: c46f0865a4e03070
X-B3-Traceid: a362fd95fac310f94b7be06279e24e4f
X-Envoy-Decorator-Operation: dumpy-serverless-xrjzq-2.kn-demo.svc.cluster.local:80/*
X-Envoy-Expected-Rq-Timeout-Ms: 600000
X-Envoy-Internal: true
X-Forwarded-For: 10.128.1.41, 10.128.1.6, 10.128.1.9
X-Forwarded-Proto: http
X-Request-Id: 9feec76b-57b8-414e-a327-588533e34df9
。。。。
  1. 然后我们删除掉Event Source:
$ oc delete cronjobsource.sources.eventing.knative.dev/event-dumpy-cronjob-source
  1. 然后监控Pod的运行情况,开始还有运行Serverless的Pod,稍等一会就没有了,说明Knative把运行该服务的Pod降为“0”了。
$ oc get pod | grep Running

通过订阅事件触发Serverless Service

创建Channel对象

  1. 创建一个InMemoryChannel类型的Channel对象(可以将该对象理解为消息对系列)。
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/in-memory-channel.yaml
$ oc get inmemorychannel
NAME             READY   REASON   HOSTNAME                                              AGE
ch-event-dumpy   True             ch-event-dumpy-kn-channel.kn-demo.svc.cluster.local   38s

该InMemoryChannel对象定义如下:

apiVersion: messaging.knative.dev/v1alpha1
kind: InMemoryChannel
metadata:name: ch-event-dumpy
  1. 定义一个CronJobSource对象,作为事件源,将它产生的事件放到上一步的InMemoryChannel中。
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource
metadata:name: event-dumpy-cronjob-source
spec:schedule: "* * * * *"sink:apiVersion: messaging.knative.dev/v1alpha1kind: InMemoryChannelname: ch-event-dumpy

执行命令创建CronJobSource对象:

$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/event-source-to-channel.yaml
$ oc get cronjobsource
NAME                         AGE
event-dumpy-cronjob-source   13s
  1. 定义一个Subscription对象,从InMemoryChannel中获取事件,并将其传给名为dumpy-serverless的Serverless Service。
apiVersion: messaging.knative.dev/v1alpha1
kind: Subscription
metadata:name: event-dumpy-subscriber
spec:channel:apiVersion: messaging.knative.dev/v1alpha1kind: InMemoryChannelname: ch-event-dumpysubscriber:ref:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: dumpy-serverless

执行命令创建Subscription对象:

$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/event-subscription.yaml
$ oc get subscription.messaging.knative.dev
NAME                     READY   REASON   AGE
event-dumpy-subscriber   True             3m26s

验证Serverless服务被触发

  1. 查看运行的Pod的。此时应该有2个Pod,一个用来定时产生事件(下面第一个),另一个是用来运行消费事件的dumpy-serverless服务(下面第二个)。
$ oc get pod | grep Running
cronjob-event-dumpy-cronjob-source-dzccx-76c95574c9-q6m2f   1/1     Running     0          8m54s
dumpy-serverless-956fn-deployment-65cb7f5d97-z6ffq          2/2     Running     0          60s
  1. 删掉定时产生任务的事件源event-dumpy-cronjob-source。
$ oc delete cronjobsource.sources.eventing.knative.dev/event-dumpy-cronjob-source
  1. 稍后确认运行dumpy-serverless的Pod数量已经降到“0”。
$ oc get po | grep Running
  1. 最后可以删除事件订阅。
$ oc delete subscription.messaging.knative.dev/event-dumpy-subscriber

OpenShift 4 之Knative(3) - 通过事件触发Serverless服务相关推荐

  1. java串口通信DataRecive_串口通信之DataReceive事件触发时机

    环境:Windows PC.本机虚拟COM2连接COM3.串口调试助手COM2发数据 图1 1> ReceivedBytesThreshold为默认值1:2> 一次发送41个字节:3> ...

  2. htmljavascript 事件触发机制

    html 事件触发机制 <!DOCTYPE html> <html> <head><meta charset="UTF-8">< ...

  3. 关于JS 事件冒泡和onclick,click,on()事件触发顺序

    今天在给JQgrid中的标签添加click事件的时候,发现一个问题. JQgrid的table中,点击任何位置,都会勾选点击行的checkbox,而我希望在点击我的标签的时候,不要勾选checkbox ...

  4. Android Activity 和 ViewGroup中事件触发和传递机制

     在Android中,Activity和View都能接收触摸和按键事件,如果响应事件只需要在继承类里复写事件函数即可. 1.在只有Activity的情况: 1)Touch事件触发流程: 首先触发d ...

  5. 函数计算自动化运维实战 3 -- 事件触发自动创建快照

    函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...

  6. 函数计算自动化运维实战2 -- 事件触发 eip 自动转移

    函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...

  7. JavaScript 模拟事件触发

    事件触发的模拟步骤 Step 1. document.createEvent(eventType) eventType 共5种类型:Events.HTMLEvents.UIEevents.MouseE ...

  8. Wpf TextChanged事件导致死循环,事件触发循环问题

    1.实例: 说明:当TextBox控件的Text内容发生变化时,TextChanged事件触发,并且会立即同步执行. 基于这个特点,设置一个全局变量标识,ChangeTxtB,如果是正在修改txtB的 ...

  9. python事件触发机制_Python3-事件驱动、IO模型和触发方式

    事件驱动模型 传统编程线性模型 开始 ----> 代码块A ---->代码块B ---->代码块C ...... 结束 每个代码块都有各自实现的功能,按照条件语句顺序判断执行,每一次 ...

最新文章

  1. opencart导入导出export/import功能插件
  2. HTML5 details 标签
  3. Streams那些事之概述与原理
  4. debug疯了_作业没疯,我先疯了 益智解谜《作业疯了》试玩
  5. 推荐的版本 lock 语句(C# 参考)
  6. VTK:图表之ColorEdges
  7. [BZOJ 4827][Hnoi2017]礼物
  8. Python+shelve读写二进制文件
  9. C++中应用于for循环的auto机制,有引用和非引用两种操作
  10. 计算机机房维护保养计划表,机房日常维护保养计划
  11. python狗屁不通文章生成器_狗屁不通文章生成器,哈哈哈
  12. tf.transpose函数解析
  13. 操作系统部分知识点(持续更新)
  14. 【转】优秀的Java程序员必须了解GC的工作原理
  15. xp系统升级到win7系统打印驱动的安装
  16. 北京邮电大学计算机网络教材,北京邮电大学《计算机网络》4.pdf
  17. 转载 提高github下载速度的方法【100%有效】可达到2MB/s
  18. JS中出现三个点(...)的作用是什么
  19. 计算机怎样禁止再添加新用户,Win10如何添加新用户?
  20. android计算器设计步骤,Android Studio的简易计算器界面设计

热门文章

  1. idea服务器如何手动加载项目,idea导入本地idea的web项目(服务器用的是tomcat)
  2. 秒传 php,网站图片上传可以实现秒传功能吗?
  3. jcifs java_通过jcifs实现java访问网络共享文件
  4. 中国 人民大学计算机考研分数线,中国人民大学2010年计算机考研复试分数线
  5. anaconda prompt 此处不应有_麻辣酷评,两厢思域哪个版本买了不吃亏?
  6. UI设计灵感|移动应用的数据表盘都是怎么设计的?
  7. 精美的案例教你如何像杂志一样排版!
  8. 设计灵感|简约复古风格海报设计这样玩
  9. 横幅新年促销海报PSD模板,拯救年底节日忙
  10. 适合海报设计的最佳字体