前言
Knative Eventing 0.7 版本已經于 6 月 26 号正式釋出。本次釋出主要圍繞重構 Channel 特性展開。本篇文章重點解讀了這些特性,并且以此展望一下 Knative Eventing 後續版本的發展。
新特性
重構 Channel
作為 Eventing v0.7 版本最大的特性, 重構了 Channel 的設計:為每個 Channel 單獨建立了CRD資源。
在 Eventing v0.6 版本中, Channel 是通過 provisioner 模式實作的。以 kafka Channel 為例:
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。這樣的實作方式存在以下問題:
- 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 示例如下:
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),這個特性比較有意思,它可以将上一步處理的事件結果作為下一步的輸入。類似圖例:

在 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中所有的資源對象打上
标簽, Value值可以設定為release 版本或者eventing.knative.dev/release
devel
更新與相容
對于此次的變更,如更新到 Eventing 0.6版本需要關注一下幾點:
- 對于 kafka-channel-dispatcher StatefulSet 在新版本中不在安裝,
- 在0.7版本中
ClusterChannelProvisioner 已被移除掉。可以使用InMemoryChannel CRD替換原in-memory-channel
ClusterChannelProvisionerin-memory-channel
- 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 的重命名改造等。