Knative 事件驱动实践:通过 EventBridge 触发事件

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
对象存储 OSS,20GB 3个月
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。那么如何给 Knative 提供生产级别的事件驱动能力?这里我们可以通过事件总线 EventBridge 来实现.事件总线EventB

Knative是一款基于Kubernetes的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件驱动这三者来实现的这一Serverless标准。

那么如何给 Knative 提供生产级别的事件驱动能力?这里我们可以通过事件总线 EventBridge 来实现.

事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。

本文以上传文件到对象存储 oss 事件为例, 介绍如何通过 EventBridge 事件触发 Knative 服务。

技术架构

当前 EventBridge 支持多种数据源接入,通过配置事件总线、事件规则、事件目标,经过事件过滤、转换,直接触发 Knative 服务。通过 EventBridge 事件驱动实现了资源的按需使用。技术架构如图:

前提条件

操作步骤

步骤一:创建 Knative 服务

首先需要创建Knative Service,以下使用的是event-display示例,该示例会直接打印接收到的事件内容

  1. 创建service.yaml。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: event-display
  namespace: default
spec:
  template:
    spec:
      containers:
      - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/event-display:20230207194118_3874dbd
  1. 执行以下命令,创建Knative Service。
kubectl apply -f service.yaml
  1. 验证服务
$ kubectl get ksvc
NAME            URL                                        LATESTCREATED         LATESTREADY           READY   REASON
event-display   http://event-display.default.example.com   event-display-00009   event-display-00009   True

步骤二:创建连接配置

  1. 登录 事件总线EventBridge控制台 ,在左侧导航栏,选择 集成中心 > API端点
  2. 在顶部菜单栏,选择地域,然后单击 连接配置 页签。
  3. 连接配置 页签,单击 创建 ,然后在 创建连接配置 面板,设置以下参数,完成后单击 确定
  • 连接名称 :设置连接名称。
  • 连接描述 :设置连接描述。
  • 鉴权配置 :选择无需配置。
  • 网络选择 :默认选择 公网

步骤三:创建API端点

  1. 连接配置 创建完成后,单击 API端点 页签,然后单击 创建
  2. 创建API端点 面板,设置以下参数,然后单击 确定
  1. 基础信息 区域,将 创建方式 设置为 自定义创建 ,然后设置API目标的名称和描述。
  2. API配置 区域,将 URL 设置为 Knative 网关访问地址(如果是使用ALB网关设置ALB dns域名,如果是使用Kourier则设置slb ip地址),本示例中使用  http://alb-1ag1spsdeze7m1eysm.cn-hangzhou.alb.aliyuncs.com  来访问Knative 服务,将 HTTP Method 设置为 POST
  3. 连接配置 区域,点击 选择已有 ,然后选择上文创建Connection中的Connection。

步骤四:创建事件规则

  1. 在左侧导航栏,单击 事件总线 ,由于我们使用oss事件源,这里直接选择 defaut 总线。
  2. 在 defaut 总线面板,设置以下参数,然后单击 创建
  1. 在事件 规则 页签,设置 规则名称 描述 ,单击 下一步
  2. 配置事件模式,选择阿里云官方事件源
  • 事件源:acs.oss 
    • 事件类型: oss:ObjectCreated:PutObject
  1. 配置事件目标,设置以下参数。
  • 服务类型 :选择 API触发
    • 创建方式 :选择 使用已有
    • HTTP参数 :设置事件推送给Knative 服务时传递的参数及参数内容。

验证结果

通过 oss 上传文件,即可触发事件,这里我们上传一个 demo.data 文件

ossutil cp demo.data oss://knative

登录事件总线EventBridge控制台,可以在事件追踪中,查看事件轨迹,可以看到事件已经投递成功

我们在 kubectl 查看 Knative 服务,可以看到自动触发创建了一个新的Pod

$ kubectl get  po
NAME                                              READY   STATUS    RESTARTS         AGE
event-display-00009-deployment-56cc79666d-z2vhv   2/2     Running   0                7s

已经打印事件内容

$ kubectl logs event-display-00009-deployment-56cc79666d-z2vhv user-container
{"data":{"eventVersion":"1.0","responseElements":{"requestId":"63E21F5FEE852133319101AD"},"eventSource":"acs:oss","eventTime":"2023-02-07T09:52:31.000Z","requestParameters":{"sourceIPAddress":"106.11.167.116"},"eventName":"ObjectCreated:PutObject","userIdentity":{"principalId":"1118324452360952"},"region":"cn-hangzhou","oss":{"bucket":{"name":"knative","arn":"acs:oss:cn-hangzhou:1581204543170042:knative","virtualBucket":"","ownerIdentity":"1581204543170042"},"ossSchemaVersion":"1.0","object":{"size":225496,"objectMeta":{"mimeType":"application/octet-stream"},"deltaSize":0,"eTag":"B350C082843DAC7E9E634193437EBA30","key":"demo.data"}}}}

小结

我们可以看到 EventBridge 事件驱动可以与 Knative 无缝对接,让 Knative 可以轻松做到基于事件触发自动弹性。接下来也期望与EventBridge做进一步集成,降低使用配置门槛。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
4月前
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
46 2
中间件事件总线事件定义
|
3月前
|
消息中间件 监控 Cloud Native
阿里云云原生生态强调事件驱动架构(EDA),借助EventBridge和EventMesh实现微服务间的高效协作。
【7月更文挑战第3天】阿里云云原生生态强调事件驱动架构(EDA),借助EventBridge和EventMesh实现微服务间的高效协作。EDA提升系统弹性和可维护性,促进业务敏捷性。实施路径包括事件模型设计、集成阿里云服务、开发事件处理器和监控优化。通过阿里云服务,开发者能轻松构建响应式、可扩展的云原生应用,加速创新并驱动数字化转型。
85 0
|
5月前
|
JavaScript
在Vue中,如何使用事件总线来传递数据和触发事件?
在Vue中,如何使用事件总线来传递数据和触发事件?
80 0
页面第二次进入或者多次进入,事件总线触发事件多次,eventBus触发多次
页面第二次进入或者多次进入,事件总线触发事件多次,eventBus触发多次
|
11月前
|
JSON 数据格式
EventBridge事件领域
EventBridge事件领域
58 0
|
消息中间件 Serverless API
Apache RocketMQ EventBridge,构建下一代事件驱动引擎
本文主要介绍了事件以及特性,优秀的事件驱动引擎,需要具备的能力以及Apache RocketMQ EventBridge是如何做的。
|
消息中间件 弹性计算 运维
阿里云事件生态再升级:使用 EventBridge 驱动全量云产品
阿里云 EventBridge 作为云上事件枢纽,早已集成了云上产品的各类事件,用户开通 EventBridge 后使用内置的云服务专用总线就可以监听这些事件,无需创建任何额外资源。
269 0
阿里云事件生态再升级:使用  EventBridge 驱动全量云产品
|
消息中间件 存储 城市大脑
云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析
RocketMQ 给人最大的印象一直是一个消息引擎。那什么是事件驱动引擎?为什么我们这次要推出事件驱动引擎这个产品?他有哪些应用场景,以及对应的技术方案是什么?本文我们就一起来看下。
935 0
云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析
|
消息中间件 弹性计算 运维
重新定义分析 - EventBridge实时事件分析平台发布
为了解决事件领域中针对流式事件做分析的难题,EventBridge 近日发布了针对事件/消息领域的全新分析工具--EventBridge 实时事件分析平台。下面简要对 EventBridge 实时事件分析平台的内容进行介绍。
220 0
重新定义分析 - EventBridge实时事件分析平台发布
|
9天前
|
JavaScript 调度
Vue事件总线(EventBus)使用指南:详细解析与实战应用
Vue事件总线(EventBus)使用指南:详细解析与实战应用
22 1