深刻解讀 Knative Eventing 0.7 版本新特性

前言

Knative Eventing 0.7 版本已經於 6 月 26 號正式發佈。本次發佈主要圍繞重構 Channel 特性展開。本篇文章重點解讀了這些特性,而且以此展望一下 Knative Eventing 後續版本的發展。web

新特性

重構 Channel

做爲 Eventing v0.7 版本最大的特性, 重構了 Channel 的設計:爲每一個 Channel 單首創建了CRD資源。
在 Eventing v0.6 版本中, Channel 是經過 provisioner 模式實現的。以 kafka Channel 爲例:api

apiVersion: eventing.knative.dev/v1alpha1
   kind: Channel
   metadata:
     name: my-kafka-channel
   spec:
     provisioner:
       apiVersion: eventing.knative.dev/v1alpha1
       kind: ClusterChannelProvisioner
       name: kafka

這裏是經過指定名稱爲 kafka 的 ClusterChannelProvisioner。這樣的實現方式存在如下問題:ide

  • Channel 中只經過一個 provisioner 字段就設置了包含的全部屬性。
  • 每個Channel Controller都會監聽到全部的資源,再進行過濾。
  • Event Source中的實現方式更符合規範,即每一個Source 單獨的CRD和Controller,值得借鑑。

針對這些以前存在的不合理的設計, 在Eventing v0.7版本中,爲每一個Channel 單首創建了CRD資源,改造涉及以下:優化

  • InMemoryChannel CRD 替換 in-memory ClusterChannelProvisioner
  • KafkaChannel CRD 替換 kafka ClusterChannelProvisioner
  • NatssChannel CRD 替換 natss ClusterChannelProvisioner

改造後的 kafka Channel 示例以下:spa

apiVersion: messaging.knative.dev/v1alpha1
   kind: KafkaChannel
   metadata:
     name: my-kafka-channel
   spec:
     numPartitions: 1
     replicationFactor: 3

另外這些現存的 ClusterChannelProvisioner,會在將來的版本中刪除掉。設計

支持事件順序處理(Sequence)

在 0.7 版本中定義了 Sequence CRD 資源用於簡單的pipeine(F1->F2->F3),這個特性比較有意思,它能夠將上一步處理的事件結果做爲下一步的輸入。相似圖例:code

在 Channel, Subscription, Broker, 以及 Trigger 中加強註釋信息

在 Channel, Subscription, Broker, 以及 Trigger 中增長了建立和更新的用戶信息。對象

事件追蹤支持

  • Channel dispatchers 能夠查看事件 Trace 信息
  • ClusterChannelProvisioners, Sources, 以及 Broker 中支持導出Trace信息到Zipkin。

事件源加強

  • ContainerSource 事件源支持設置PodTemplateSpec
  • CronJobSource 事件源支持設置resource limits 和 requests

其它變動

  • Eventing controller 在新版本中明確禁用 istio sidecar 注入Pod
  • 爲Broker ingress 和 filter 定義全局的(如 knative-eventing 命名空間) ConfigMap。
  • 參考Serving中的策略,爲Eventing中全部的資源對象打上eventing.knative.dev/release 標籤, Value值能夠設置爲release 版本或者devel

升級與兼容

對於這次的變動,如升級到 Eventing 0.6版本須要關注一下幾點:blog

  • 對於 kafka-channel-dispatcher StatefulSet 在新版本中不在安裝,
  • 在0.7版本中in-memory-channel ClusterChannelProvisioner 已被移除掉。可使用InMemoryChannel CRD替換原 in-memory-channel ClusterChannelProvisioner
  • Broker ingress pods 新版本會使用 eventing-broker-ingress ServiceAccount。若是以前建立的 Broker 沒有使用eventing injection註釋,須要手動建立所需的 ServiceAccount 和 RoleBindings。
  • webhook Deployment 在新版本中使用了 eventing-webhook Deployment 名稱進行了替換。原有的webhook 會縮爲 0 進行處理,接下來也會被移除掉。

總結

從本次 Knative Eventing 0.7 版本發佈的特性不難看出,當前 Knative Eventing 在向前的迭代中不斷優化設計,相信在接下來的版本中也會更多的聚焦設計優化,如計劃在 v0.8 版本中完成 Source 到 Importer 的重命名改造等。事件


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索