事件登錄檔¶
Knative Eventing 定義了 EventType
物件,讓消費者更容易探索他們可以從 Broker 或 Channel 取用的事件類型。
事件登錄檔維護每個 Broker 或 Channel 可以取用的事件類型目錄。登錄檔中儲存的事件類型包含消費者建立 Trigger 的所有必要資訊,而無需求助於其他頻外機制。
本主題提供有關如何填入事件登錄檔、如何使用登錄檔探索事件,以及如何利用該資訊訂閱感興趣的事件的資訊。
注意
在使用事件登錄檔之前,建議您基本了解 Broker、Trigger、事件來源和 CloudEvents 規格(尤其是 內容屬性部分)。
關於 EventType 物件¶
EventType 物件代表可以從 Broker 或 Channel 取用的事件類型,例如 Apache Kafka 訊息或 GitHub pull request。EventType 物件用於填入事件登錄檔,並將事件類型資訊保留在叢集資料儲存區中。
以下是省略不相關欄位的 EventType YAML 範例
apiVersion: eventing.knative.dev/v1beta2
kind: EventType
metadata:
name: dev.knative.source.github.push-34cnb
namespace: default
labels:
eventing.knative.dev/sourceName: github-sample
spec:
type: dev.knative.source.github.push
source: https://github.com/knative/eventing
schema:
description:
reference:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
status:
conditions:
- status: "True"
type: ReferenceExists
- status: "True"
type: Ready
如需 EventType 物件的完整規格,請參閱 EventType API 參考。
metadata.name
欄位為建議性質,即非權威性。它通常使用 generateName
產生,以避免命名衝突。建立 Trigger 時不需要 metadata.name
。
對於消費者而言,最重要的欄位是 spec
和 status
。這是因為這些欄位提供您建立 Trigger 所需的資訊,即事件的來源和類型,以及是否出現接收事件的 Reference。
下表包含有關 EventType 物件的 spec
和 status
欄位的詳細資訊
欄位 | 描述 | 必要或選用 |
---|---|---|
spec.type |
參照 CloudEvent 類型,因為它會進入 事件網格。事件消費者可以建立篩選此屬性的 Trigger。此欄位為權威性。 | 必要 |
spec.source |
參照 CloudEvent 來源,因為它會進入 事件網格。事件消費者可以建立篩選此屬性的 Trigger。 | 必要 |
spec.schema |
包含 EventType 結構描述的有效 URI,例如 JSON 結構描述或 protobuf 結構描述。 | 選用 |
spec.description |
描述 EventType 內容的字串。 | 選用 |
spec.reference |
參照可以提供 EventType 的 KResource。 | 必要 |
status |
告知消費者或叢集運算子,EventType 是否已準備好可供取用。就緒度取決於 KReference 是否存在。 | 選用 |
使用事件填入登錄檔¶
您可以手動或自動使用 EventType 物件填入登錄檔。自動註冊可能比較簡單,但它僅支援部分事件來源。
手動註冊¶
對於手動註冊,叢集設定器會像套用任何其他 Kubernetes 資源一樣套用 EventTypes YAML 檔案。
若要手動套用 EventTypes YAML 檔案
-
建立 EventType YAML 檔案。如需必要欄位的相關資訊,請參閱 關於 EventType 物件。
-
執行命令來套用 YAML
kubectl apply -f <event-type.yaml>
自動註冊¶
因為手動註冊可能很繁瑣且容易出錯,Knative 也支援自動註冊 EventTypes。當事件來源執行個體化時,會自動建立 EventTypes。
支援自動註冊¶
Knative 支援下列事件來源的 EventTypes 自動註冊
- CronJobSource
- ApiServerSource
- GithubSource
- GcpPubSubSource
- KafkaSource
- AwsSqsSource
Knative 支援為符合來源 Duck 類型的來源自動建立 EventTypes。
自動註冊的程序¶
-
若要自動註冊 EventTypes,請執行以下命令來套用您的事件來源 YAML 檔案
kubectl apply -f <event-source.yaml>
在您的事件來源執行個體化之後,EventTypes 會新增至登錄檔。
範例:使用 KafkaSource 自動註冊¶
假設有以下 KafkaSource 範例來填入登錄檔
apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:
name: kafka-sample
namespace: default
spec:
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
topics:
- knative-demo
- news
sink:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
上述範例中的 topics
欄位用於產生 EventType source
欄位。
使用上述 YAML 執行 kubectl apply
之後,KafkaSource kafka-source-sample
會執行個體化,並且因為有兩個主題,所以會將兩個 EventTypes 新增至登錄檔。
使用登錄檔探索事件¶
使用登錄檔,您可以探索 Broker 事件網格可以取用的不同類型事件。
注意
透過 EventType 自動建立功能,您可以在登錄檔中看到更多事件類型。在此處了解如何啟用此功能。
檢視您可以訂閱的所有事件類型¶
-
若要查看登錄檔中可用於訂閱的事件類型清單,請執行下列命令
kubectl get eventtypes -n <namespace>
在測試叢集中使用
default
命名空間的範例輸出NAME TYPE SOURCE SCHEMA BROKER DESCRIPTION READY REASON dev.knative.source.github.push-34cnb dev.knative.source.github.push https://github.com/knative/eventing default True dev.knative.source.github.push-44svn dev.knative.source.github.push https://github.com/knative/serving default True dev.knative.source.github.pullrequest-86jhv dev.knative.source.github.pull_request https://github.com/knative/eventing default True dev.knative.source.github.pullrequest-97shf dev.knative.source.github.pull_request https://github.com/knative/serving default True dev.knative.kafka.event-cjvcr dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#news default True dev.knative.kafka.event-tdt48 dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo default True google.pubsub.topic.publish-hrxhh google.pubsub.topic.publish //pubsub.googleapis.com/knative/topics/testing dev False BrokerIsNotReady
此範例輸出顯示
default
命名空間登錄檔中的七個不同 EventType 物件。它假設發出事件的事件來源將 Broker 參照為其接收器。
檢視 EventType 物件的 YAML¶
-
若要查看 EventType 物件的 YAML,請執行下列命令
其中kubectl get eventtype <name> -o yaml
<name>
是 EventType 物件的名稱,可以在登錄檔輸出的NAME
欄中找到。例如,dev.knative.source.github.push-34cnb
。
如需 EventType YAML 範例,請參閱本頁稍早的 關於 EventType 物件。
關於訂閱事件¶
在您知道可以從 Broker 的 事件網格取用哪些事件之後,您可以建立 Trigger 來訂閱特定事件。
以下是一些範例 Trigger,它們使用 type
或 source
的完全比對來訂閱事件,根據先前提及的登錄檔輸出
-
訂閱來自任何來源的 GitHub 推送
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: push-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.source.github.push subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: push-service
注意
如範例登錄檔輸出所述,對於該特定事件類型,只有兩個來源,即
knative/eventing
和knative/serving
GitHub 儲存庫。如果稍後為 GitHub 推送註冊新的來源,此 Trigger 可以取用它們。 -
訂閱來自
knative/eventing
GitHub 儲存庫的 GitHub pull requestapiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: gh-knative-eventing-pull-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.source.github.pull_request source: https://github.com/knative/eventing subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: gh-knative-eventing-pull-service
-
訂閱傳送至 knative-demo 主題的 Kafka 訊息
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: kafka-knative-demo-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.kafka.event source: /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: kafka-knative-demo-service
-
訂閱從 GCP 的 knative 專案傳送至 testing 主題的 PubSub 訊息
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: gcp-pubsub-knative-testing-trigger namespace: default spec: broker: dev filter: attributes: source: //pubsub.googleapis.com/knative/topics/testing subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: gcp-pubsub-knative-testing-service
注意
先前提及的範例登錄檔輸出將此 Broker 的就緒度列為
false
。在此 Broker 準備就緒之前,此 Trigger 的訂閱者無法取用事件。
後續步驟¶
Knative 程式碼範例是一個很有用的資源,可以幫助您更瞭解一些事件來源。請記住,如果您希望在登錄檔中自動註冊 EventTypes,您必須將來源指向 Broker。