前言

Knative Eventing 0.6 版本已经于5月15号正式发布。相比于0.5版本,此次发布包含了一些重要特性及更新。针对这些新特性以及更新,我们如何快速、精准的定位主要技术点。本篇文章针对这些进行技术剖析,希望能让大家更好的理解此次发布的重点内容,并且以此展望一下 Knative Eventing 后续版本的发展。
另外由于目前 Eventing 依赖 Eventing-Sources, 关于 Eventing-Sources 0.6 主要更新也会相应的提到。

新特性

Registry

作为事件消费者,之前是无法事先知道哪些事件可以被消费,如果能通过某种方式获得哪些 Broker 提供哪些事件,那么事件消费者就能很方便通过这些 Broker 消费事件。Registry 就是在这样的背景下被提出的,通过 Registry 机制,消费者能针对特定的 Broker 的事件通过 Trigger 进行事件订阅消费。Registry 只是一个逻辑观念,并非一个具体的资源。
其实现围绕以下几个关键点:

  • 以 Namespace 为隔离边界,每个 Registry 对应一个 Namespace。
  • 定义 EventType CRD 资源。每个 Registry 中包括多个 EventType 资源。通过 EventType 来判断事件是否可以被消费。
  • EventType 中需要包含 Trigger 订阅时的必要信息。

示例如下:
$ kubectl get eventtypes -n default

NAME                                         TYPE                                    SOURCE                                              SCHEMA                                     BROKER     DESCRIPTION           READY    REASON
org.bitbucket.repofork                       org.bitbucket.repo:fork                 https://bitbucket.org/my-other-user/my-other-repo                                              dev        BitBucket fork        False    BrokerIsNotReady
com.github.pullrequest                       com.github.pull_request                 https://github.com/user/repo                        https://github.com/schemas/pull_request    default    GitHub pull request   True
dev.knative.source.github.push-34cnb         dev.knative.source.github.push          https://github.com/my-other-user/my-other-repo                                                 default                          True
dev.knative.source.github.pullrequest-86jhv  dev.knative.source.github.pull_request  https://github.com/my-other-user/my-other-repo                                                 default                          True

围绕 Registry 事件注册机制,CronJobSource 和 ApiServerSource 事件源会创建对应的 EventType 并注册到 Registry 中。这里需要注意一点目前这个特性只针对 Broker/Trigger 事件处理模型。

这里简单介绍一下 Eventing-Sources 组件,它用于给 Eventing 提供事件源支持,在0.5版本中提供的事件源包括:KubernetesEventSource、GitHubSource、GcpPubSubSource、AwsSqsSource、ContainerSource、CronJobSource、KafkaSource 以及 CamelSource 。
而在最新的 Eventing-Sources 0.6 版本中,CronJobSource 和 ContainerSource 已经迁移到了 Eventing 中, KubernetesEventSource 数据源也会被 Eventing 中的 ApiServerSource 所替代。

去掉 Istio 依赖

在 Eventing 0.5版本中使用了 Istio 来解决事件路由的问题:

  1. 在创建 Channel 时,通过配置 Istio Virtual Service 将事件路由到对应 provisioner。
  2. 在创建 Trigger 时,通过配置 Istio Virtual service 将事件路由到 Broker-Filter。

这里其实我们可以通过为每一个 Channel 创建唯一ExternalName类型的 k8s service 解决 Channel 事件路由问题,而 Trigger 则直接通过 HTTP 路径(如:http://foo-broker-filter-1da3a.default.svc.cluster.local/my-trigger)将事件路由到 Broker-Filter,并且结合社区去掉 Istio 依赖的建议(在 Serving 中已经建议不在依赖 Istio )。
因此在 Eventing 0.6版本中去掉了对 Istio 的依赖。另外如果你安装了 Istio 的话,并不会影响 Eventing 正常工作。

事件追踪支持

在 Eventing 中如果事件处理过程中出现异常,我们不能很快的定位具体的问题。针对这样的场景,在所有的 Channel 中添加了事件追踪支持,包括:

  • Kafka Channel
  • in-memory Channel
  • NATSS Channel
  • GCP-PubSub Channel

并且通过 config-tracing ConfigMap 配置 tracing 信息。

Metrics 支持

社区在针对 Eventing/Serving 等组件中采用不同的 controller 实现(例如 Eventing 中使用 controller runtime, 而 Serving 中通过 pkg/controller 方式)进行统一改造(预计在0.7版本完成)过程中,发现 metrics 的实现方式也不一致,因此此次对所有的 controller 都添加了 metrics 统一实现,包括 Broker, Trigger, Channel, Subscription, ContainerSource, CronJobSource 以及 ApiServerSource。

新增 ApiServerSource

上面提到 KubernetesEventSource 在 Eventing-Source 0.6版本中已经去掉,新增 ApiServerSource,用于在 Eventing 中获取 Kubernetes 中资源改变的事件源信息。

完善 ContainerSource

ContainerSource 代码中新增了 Kubernetes 事件和条件判断处理,便于出现问题时进行排查。

其它变更

  • Trigger 通过path替换原有的host来访问 Subscription。创建 Trigger 对象后,当前不再需要创建 Kubernetes Service 和 Istio VirtualService 对象。如果系统中已经存在的 k8s Service 和 VirtualService 不会被主动删除,只会在删除 Trigger 的时候才会被 GC 回收
  • in-memory-channel provisioner 新添加了Deprecated类型的条件,计划在0.7版本中in-memory-channel ClusterChannelProvisioner 会被移除掉
  • 所有 Channel 会使用 ExternalName 类型的 Kubernetes Service 来替换 Istio VirtualService。
  • Eventing 中的数据平面组件不再强依赖 Istio sidecar 注入。

升级与兼容

对于此次的变更,如升级到 Eventing 0.6版本需要关注一下几点:

  • 由于 in-memory-channel ClusterChannelProvisioner 计划在0.7版本中移除掉,并且被 in-memory provisioner 取代。建议升级现有所有的 in-memory-channel 到 in-memory
  • Trigger 中的BrokerExists条件现在称为 Broker。
  • Kafka dispatcher 组件会使用 Deployment 替换原有的 StatefulSet。升级到0.6版本之后需要删除eventing-sources/kafka-channel-dispatcher StatefulSet。
  • CronJobSource 和 ContainerSource 已经作为 Eventing 安装的一部分,不需要通过其它方式再安装(Eventing-Sources 0.6中已经被移除)。
  • 由于 in-memory ClusterChannelProvisioner 目前依赖config-tracing ConfigMap, 所以需要先安装 Eventing。如果 in-memory 先安装, 那么 in-memory dispatcher 会启动不了,直到 Eventing 安装完成。
  • CronJobSource 现在使用/apis/v1/namespaces//cronjobsources/作为 CloudEvents 事件源。代替原来的/CronJob
  • 如果 Eventing 升级到0.6版本, 相应的 Eventing-Sources 也需要升级到0.6版本

总结

Knative Eventing 0.6版本增强了事件处理的易用性如新增 Registy 便于事件消费,通过新增事件跟踪机制以及 Metrics 增强了可用性,同时进一步简化 Eventing 中的依赖处理,如去掉 Istio 依赖,而将 Eventing-Sources 中的数据源处理迁移到 Eventing 中,则进一步减少了对 Eventing-Sources 组件的依赖。

展望

我们这里可以简单展望一下,社区接下来会进一步增强 Trigger 过滤策略(支持正则表达过滤等), 并且针对目前使用同一个 Channel CRD 资源很难定位 Channel 中问题,接下来会为每一个 Channel 定义独立 CRD 资源,这些特性计划都会在0.7版本中推出。另外通过这次版本更新,不难看出 Eventing-Sources 会逐渐退出历史。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

全面剖析 Knative Eventing 0.6 版本新特性相关推荐

  1. 深入解读 Knative Eventing 0.7 版本新特性

    前言 Knative Eventing 0.7 版本已经于 6 月 26 号正式发布.本次发布主要围绕重构 Channel 特性展开.本篇文章重点解读了这些特性,并且以此展望一下 Knative Ev ...

  2. Android Q(10.0)版本新特性和兼容性适配

    北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了.Android Q 为开发者们带来了许多新 ...

  3. Android L系统 剖析安卓5.0安卓L新特性

    Android L系统全新发布了!在Google I/O 2014上,Google正式发布了最新一代安卓系统Android L,安卓系统终于告别了安卓4.×,迈入了全新的版本周期.新一代安卓系统此前一 ...

  4. (15.1.14)Google正式发布Android L系统 剖析安卓5.0安卓L新特性

    Material Design.卡片.环动式设计 ART.64位计算 升级.电池续航.安全 Android L系统全新发布了!在Google I/O 2014上,Google正式发布了最新一代安卓系统 ...

  5. Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结...

    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...

  6. Spark 3.2.0 版本新特性 push-based shuffle 论文详解(一)概要和介绍

    前言 本文隶属于专栏<大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 目录 Spark 3.2.0 ...

  7. Android Q(10.0 API29)版本新特性和兼容性适配

    摘要 1.本文档基于谷歌AndroidQ官方文档和一加Q版本应用兼容性整改指导 2.本文档主要对影响比较大的部分进行简单总结,内容并不全面: 3.版本号对应关系: Android-Q = Androi ...

  8. Spark 3.2.0 版本新特性 push-based shuffle 论文详解(二)背景和动机

    前言 本文隶属于专栏<大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 目录 Spark 3.2.0 ...

  9. ABP Framework 5.0 RC.1 新特性和变更说明

    .Net 6.0 发布之后,ABP Framework 也在第一时间进行了升级,并在一个多星期后(2021-11-16)发布了 5.0 RC.1 ,新功能和重要变更基本已经确定. 5.0版本新特性 5 ...

最新文章

  1. 团队编程项目作业3-模块开发过程
  2. SQL中常用的日期计算
  3. Hadoop记录-hadoop2.x常用端口及定义方法
  4. java 序列化快捷键_IntelliJ IDEA生成 Serializable序列化UID的快捷键
  5. 算法选择_快速筛出topK的快速选择算法
  6. 静电场里非常有用的公式
  7. jieba的一些使用
  8. python如何预测双色球信息_python预测下一期双色球号码【机器学习】
  9. rdkitpython | 通过反应获得断键位点与类型
  10. 关于IBM刀片服务器
  11. 多线程QThread的两种启用用法
  12. Springboot集成urule
  13. 格局打开:NFT持有者决定IP天花板
  14. c语言贺卡代码大全,C++实现新年贺卡程序
  15. WIN10输入法改为WIN7习惯,默认输入英文,程序员专用
  16. java 中文转拼音_JAVA 将中文转化为拼音工具类
  17. 如何快速查找BUG?
  18. STM32L0系列的ADC用法
  19. Web入门(1)——制作简单的网页
  20. vue字符串列表转换数组_vue 数组对接字符串 传值时候,join(',') 一下 watch

热门文章

  1. 成为优秀的Java程序员要具备哪些技能?
  2. Java程序员需要掌握哪些技能才能通过大公司的面试
  3. 【LeetCode笔记】33. 搜索螺旋排序数组(Java、二分)
  4. pb自定义控件 事件_Android WebView与下拉刷新控件滑动冲突的解决方法
  5. decimal是什么类型_SQLMysql数据类型
  6. laravel框架中文手册_node.js 后端框架star 排名 2020年11月更新,fastify 超 egg
  7. java电脑类的接口_java 一个类实现两个接口的案例
  8. class会不会回收?用不到的class怎么回收_牛X的java程序员必备的GC基础知识, 面试肯定用的到...
  9. 5、this调用语句必须是构造函数中的第一个可执行语句_ES6中的Promise和Generator详解...
  10. 提高java效率_提高Java编程效率的一个技巧