全面解读 Knative Eventing 0.8 版本新特性

前言

Knative Eventing v0.8 版本已经于 8 月 6 号正式发布。本次发布主要围绕完善 Eventing 中相关功能展开。本篇文章通过解读这些功能特性,希望能让你快速对 0.8 新版本有所了解。

新特性

新增 Choice CRD 资源

Choice 是用来做什么呢? 其实它与 sequence 类似,是用来定义 function 执行流程的。通过 Choice, 可以根据条件来选择function 进行事件处理。Choice 的定义如下:

apiVersion: messaging.knative.dev/v1alpha1
kind: Choice
metadata:
  name: check-assignment
spec:
  channelTemplate:
    apiVersion: messaging.knative.dev/v1alpha1
    kind: InMemoryChannel
  cases:  
  - filter:
      ref:
         apiVersion: serving.knative.dev/v1alpha1
         kind: Service
         name: data-assigned
    subscriber:
      ref:
        apiVersion: serving.knative.dev/v1alpha1
        kind: Service
        name: send-notice
  • channelTemplate: 设置所使用的Channel
  • cases: 表示选择条件
  • filter: 过滤条件,这里通过Service进行事件filter处理
  • subscriber:事件经过filter之后,最终发送的服务。

支持设置默认 Channel

默认 Channel 配置允许在不指定底层实现的情况下创建Channel。创建默认的Channel。注意这里的 Channel 是设置在messaging.knative.dev/v1alpha1分组下,原有在eventing.knative.dev分组下使用 Provisioner 模型的 Channel 会在 0.9 版本废弃。

apiVersion: messaging.knative.dev/v1alpha1
kind: Channel
metadata:
  name: default-channel
  namespace: default

通过configmap控制默认Channel设置。

apiVersion: v1
kind: ConfigMap
metadata:
  name: default-ch-webhook
  namespace: knative-eventing
data:
  default-ch-config: |
    clusterDefault:
      apiVersion: messaging.knative.dev/v1alpha1
      kind: InMemoryChannel
    namespaceDefaults:
      some-namespace:
        apiVersion: messaging.knative.dev/v1alpha1
        kind: KafkaChannel
        spec:
          numPartitions: 2
          replicationFactor: 1

这里指定了两个默认的Channel:

  • clusterDefault:集群级别的默认Channel(InMemoryChannel)。
  • namespaceDefaults:namespace级别的默认Channel(KafkaChannel)

另外 Brokers 和 Sequences 在没有指定Channel的情况下,都支持使用默认的 Channne l设置。

CloudEvents

CloudEvents 升级到0.3版本支持

监控增强

  • 在webhook中支持统计功能
  • Grafana and Prometheus中支持对 Eventing 指标采集
  • 在Broker Ingress中增加了metric 度量。

资源指定名称设置

在原有的Broker和Trigger中,使用GenerateName创建 Channel 和 Subscription。由于是自动产生的name,如果listers 数据不是最新的,可能导致 Channel 或 Subscription资源被多次创建。
另外 ApiServerSource 、 ContainerSource 和使用 provisioner 的 原有的Channel 也支持使用指定的name。

其它特性

  • CronJobSource 和 ApiServerSource 支持了事件注册 event types。
  • 在Trigger filter中增加了对 Cloud Event Attribute 过滤支持

其它主要变更

  • 升级 github.com/knative/pkg 到 knative.dev/pkg。这个变动可能会影响到代码开发使用 Knative 依赖包的设置,需要注意一下。
  • 将Broker's Ingress Handler 和 metrics移动到pkg目录下
  • 参考Serving中的策略,为Eventing中所有的资源对象打上eventing.knative.dev/release 标签, Value值可以设置为release 版本或者devel
  • Kafka channel 转移到了https://github.com/knative/eventing-contrib
  • Triggers 中 sourceAndType 属性接下来要被遗弃,新的字段为 attributes , 该新字段既支持标准的CloudEvents 属性, 也支持扩展的熟悉.

总结

本次 Knative Eventing 0.8 版本主要聚焦在功能完善方面,也从侧面反映 Knative Eventing 功能日渐成熟,相信在后续的版本迭代中主要集中在功能完善和优化。同时也欢迎对 Knative 有兴趣的一起交流。

欢迎加入 Knative 交流群

全面解读 Knative Eventing 0.8 版本新特性

上一篇:Knative Eventing 之 Parallel 介绍


下一篇:透过 In-memory Channel 看 Knative Eventing 中 Broker/Trigger 工作机制