作者 | 阿里云智慧事业群高阶开发工程师 元毅
基于事件驱动是Serveless的核心功能之一,通过事件驱动服务,满足了使用者按需付费(Pay-as-you-go)的需求。在之前的文章中我们介绍过 Knative Eventing 由事件源、事件处理模型和事件消费 3 个主要部分构成,那么事件如何通过这 3 个元件产生、处理以及消费呢? 本文通过 Kubernetes Event Source 示例介绍一下 Knative Eventing 中如何获取事件,并且将事件传递给 Serving 进行消费。其中事件处理基于 Broker/Trigger 模型。
先了解一下Broker/Trigger 事件处理模型。从 v0.5 开始,Knative Eventing 定义 Broker 和 Trigger 物件,从而能方便的对事件进行过滤。
Broker/Tiggger 模型流程处理如图所示:
先看一下 Kubernetes Event Source 示例处理流程,如图所示:
接下来介绍一下各个阶段如何进行操作处理。
建立 Service Account
为 ApiServerSource 建立 Service Account, 用于授权 ApiServerSource 获取 Kubernetes Events 。
serviceaccount.yaml 如下:
执行如下操作:
Knative Eventing 中 通过 Event Source 对接第三方系统产生统一的事件型别。当前支援 ApiServerSource,GitHub 等多种资料来源。这里我们建立一个 ApiServerSource 事件源用于接收 Kubernetes Events 事件并进行转发。k8s-events.yaml 如下:
这里通过 sink 引数指定事件接收方,支援 Broker 和 k8s service。
执行命令:
首先构建你的事件处理服务,可以参考 knative-sample/event-display开源专案。
这里的 Service 服务仅把接收到的事件打印出来,处理逻辑如下:
通过上面的程式码,可以轻松构建你自己的映象。映象构建完成之后,接下来可以建立一个简单的 Knative Service, 用于消费 ApiServerSource 产生的事件。
service.yaml 示例如下:
执行命令:
在所选名称空间下,建立 default Broker。假如选择 default 名称空间, 执行操作如下。
这里 Eventing Controller 会根据设定knative-eventing-injection=enabled 标签的 namepace, 自动建立 Broker。并且使用在webhook中预设配置的 ClusterChannelProvisioner(in-memory)。
Trigger 可以理解为 Broker 和Service 之间的过滤器,可以设定一些事件的过滤规则。这里为预设的 Broker 建立一个最简单的 Trigger,并且使用 Service 进行订阅。trigger.yaml 示例如下:
执行命令:
注意:如果没有使用预设的 Broker, 在 Trigger 中可以通过 spec.broker 指定 Broker 名称。
执行如下命令,生成 k8s events。
可以通过下述方式检视 Knative Service 是否接收到事件。
日志输出类似下面,说明已经成功接收事件。
相信通过上面的例子你已经了解了 Knative Eventing 如何产生事件、处理事件以及消费事件。对 Eventing 中的事件处理模型也有了初步的了解。当然你可以自己定义一个事件消费服务,来处理事件。
你是否已对 Knative Eventing 产生了兴趣,是否有点意犹未尽的样子? 别急,接下来我们会继续深入分析 Knative Eventing。包括:
让我们后续一起探索 Knative Eventing,欢迎持续关注。
-------------------------------
本文作者:jessie筱姜
原文连结 :https://yq.aliyun.com/articles/705438?utm_content=g_1000063032
本文为云栖社群原创内容,未经允许不得转载。