Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Knative Eventing 入門

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for ch0312 ch0312
June 23, 2021

Knative Eventing 入門

Avatar for ch0312

ch0312

June 23, 2021
Tweet

Other Decks in Technology

Transcript

  1. © 2021 NTT DATA Corporation 2 自己紹介 北村 卓也 (twitter:@ch03121)

    ・所属:NTTデータ ・仕事:BtoBなサービスのインフラ構築/運用 Kubernetesの勉強中 ・趣味:化石・鉱物採集 ↑岩手県で採集してきた水晶
  2. © 2021 NTT DATA Corporation 3 アジェンダ 1. Knative Eventing

    概要 2. Eventingのカスタムリソース紹介 3.BrokerとTriggerを活用したイベント配信例 4. まとめ
  3. © 2021 NTT DATA Corporation 6 Knativeとは Kubernetesにけおけるサーバーレスアプリケーションのデプロイ・管理のプロセスを簡略化するOSS。 GCPのCloudRunの基盤にも活用されている。 <ユースケース>

     サーバーレスアプリケーションを、異なるプラットフォーム(各種クラウド、オンプレミス)に同じ仕組みで動かしたい ・Knativeが動作するKubernetes上であれば、アプリケーションを改修せずに 異なるプラットフォームでデプロイ、動作可能 ・サーバーレスの欠点であるクラウドベンダへのロックインを回避できる  Kubernetes上でイベントドリブンなアプリケーションを実行したい ・イベントの検知や配信の仕組みはKnativeに任せられるので、アプリケーション側での実装が不要。 ・様々なイベントソース(AWS SQS、Apache Kafka、FTPアップロード等)が利用可能
  4. © 2021 NTT DATA Corporation 7 Knativeとは  ServingとEventingという2つのコンポーネントで構成されている。 それぞれ個別にインストール、使用することが可能。

    • Serving Kubernetes上へのコンテナデプロイを簡略化。 オートスケーリング(ゼロスケール可)、デプロイした構成のリビジョン管理などを実現。 • Eventing イベントを契機にkubernetes上で処理を実行できるようにしてくれる。 イベントソース(GithubWebhooks、Kafka等)とコンシューマ(Kubernetes、KnativeのService等)の 関連付けの抽象化を行う。 Kubernetes Novice Tokyo #9のセッション 「KnativeでKubernetesをラクにする」(@mochizuki875) をご覧ください!
  5. © 2021 NTT DATA Corporation 8 Eventingとは イベントの検知、Kubernetes上のアプリケーションへの配信を行うコンポーネント ・Event Producerの違いをEventingが吸収してくれるので、アプリケーション側での個別実装が不要。

    ・クラウドベンダのマネジメントサービスを使わずに、イベントドリブンな処理を実装できる(ベンダロックイン回避)。 Knative Eventing Event Producer Kubernetes上の アプリケーション (Service) イベント例) ・メッセージキュー(OSS、クラウド…)へのパブリッシュ ・KubernetesAPIserver ・FTPアップロード ・Githubへのプッシュ イベント検知/取得 イベント配信 CloudEvents仕様
  6. © 2021 NTT DATA Corporation 9 (補足) CloudEvents  イベントデータを記述するための共通仕様。

    Cloud Native Computing Foundation(CNCF)が推進。 2019年にversio1.0に到達。  クラウド内でのイベント記述仕様はクラウドベンダ毎に異なる。 マルチクラウド構成の場合、クラウド間でのイベントのやり取りも想定される。 →イベントの記述仕様を標準化して、クラウド間連携の運用性を高める。  CloudEvents仕様を採用しているサービス、OSS ・Google Cloud Eventarc ・Azure Event Grid ・Alibaba Cloud EventBridge ・Vmware Event Broker Appliance ・Knative ・OpenFaaS etc… ※ https://cloudevents.io/
  7. © 2021 NTT DATA Corporation 10 (補足) CloudEvents  CloudEvents仕様に必須の属性は以下。

    これらをHTTPリクエストのヘッダに入れる必要がある。 ・ce-specversion:CloudEventsのバージョン。 ・ce-type:イベントタイプ。ルーティングやモニタリング、 ポリシー適用などに使われる属性。 ・ce-source:イベントの発生元。 ・ce-id:プロデューサーの範囲内で一意であるID。 POST /event HTTP/1.0 Host: example.com Content-Type: application/json ce-specversion: 1.0 ce-type: repo.newItem ce-source: http://bigco.com/repo ce-id: 610b6dd4-c85d-417b-b58f-3771e532 { "action": "newItem", "itemID": "93" } ↓CloudEventsに準拠したHTTPリクエストの例 ※https://github.com/cloudevents/spec
  8. © 2021 NTT DATA Corporation 12 Eventing カスタムリソース Event Producer

    Event consumer Source Trigger(1) Service (APP-2) Service (APP-1) Broker Trigger(2) Subscription(1) Subscription(2) Channel フィルタ 検知/取得 配信 配信 配信 Eventingをインストールすると、カスタムリソース定義が作成される。 それらカスタムリソースを使用することで、イベントドリブンな処理を実現できる。 フィルタ
  9. © 2021 NTT DATA Corporation 13 Source ・イベントを検知し、Sink(配信先)に配信するリソース。配信する際は、CloudEvents仕様に変換を行う。 ・Producer(イベント発生元)に対応する様々なリソースが存在し、 Event

    Producerに応じて選択、作成する。 例) APIServerSource:K8sのリソース操作を検知してイベント発行 KafkaSource:ApacheKafkaのメッセージを検知してイベント発行 PingSource:定期的にイベントを生成する AwsSqsSource:AWS SQSのメッセージを検知してイベント発行 ・右の例は、「my-cluster-kafka-bootstrap.kafka:9092」 というApache Kafkaの「my-topic」にメッセージが登録されたら、 「event-display」Serviceに配信するKafkaSource。 apiVersion: sources.knative.dev/v1beta1 kind: KafkaSource metadata: name: kafka-source spec: consumerGroup: knative-group bootstrapServers: - my-cluster-kafka-bootstrap.kafka:9092 topics: - my-topic sink: ref: apiVersion: v1 kind: Service name: event-display
  10. © 2021 NTT DATA Corporation 14 例:Sourceのみ使用する場合 Event consumer Service

    (APP-2) Event Producer Service (APP-1) Source 検知/取得 Sourceが指定できる配信先(sink)は1つだけ。また、配信失敗時はイベントが消失する。 イベントの発生を検知して イベント内容をCloudEvents仕様の HTTPリクエストに変換して、配信する 配信 POST /event HTTP/1.0 Host: example.com Content-Type: application/json ce-specversion: 1.0 ce-type: repo.newItem ce-source: http://bigco.com/repo ce-id: 610b6dd4-c85d-417b-b58f-3771e532 { "action": "newItem", "itemID": "93" }
  11. © 2021 NTT DATA Corporation 15 Channel ・イベントの保存と、配信を行う。以下から選択して実装する。 ・In-Memory Channel

    →シンプルでインストールも楽だが、永続性はないので、開発用 ・Apache Kafka Channel ・NATS Channel ・Google Cloud Pub/Sub Channel ※作成例 # cat channel.yaml apiVersion: messaging.knative.dev/v1beta1 kind: InMemoryChannel metadata: name: channel # kubectl apply -f channel.yaml inmemorychannel.messaging.knative.dev/channel created # kubectl get channel NAME URL AGE READY REASON inmemorychannel.messaging.knative.dev/channel http://channel-kn-channel.default.svc.cluster.local 2m4s True プロダクション環境で使う場合は、これらを検討
  12. © 2021 NTT DATA Corporation 16 Subscription ・Channelと配信先(subscriber)の紐づけを定義する。 配信のリトライ設定も可能。 ・右の例は、「eventinghello-ch」というchannelにあるイベントを

    「eventinghello」というKnativeServiceに送るSubscription。 ・subscriberはchannelにすることもできるので、 以下のような複雑な制御も可能。 apiVersion: messaging.knative.dev/v1beta1 kind: Subscription metadata: name: eventinghelloa-sub spec: channel: apiVersion: messaging.knative.dev/v1beta1 kind: Channel name: eventinghello-ch subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: eventinghello ※https://medium.com/google-cloud/knative-eventing-delivery-methods-79d4ebe30a68
  13. © 2021 NTT DATA Corporation 17 例:Channel、Subscriptionを導入した場合 多数の配信先(subscriber)がイベントを受け取ることができる。 また、配信失敗時にイベントは消失せず、再配信が試行される。 Event

    Producer Event consumer Source Service (APP-2) Service (APP-1) Subscription(1) Subscription(2) Channel 検知/取得 配信 配信 配信 イベントをChannelに配信 イベントを保存した上で、 subscriptionに定義された subscriberへ配信
  14. © 2021 NTT DATA Corporation 18 Broker ・イベントを保存した上で Triggerによって定義されたフィルタリングを行い、 配信するリソース。

    ・基本的な実装であるMT-Channel-based Brokerは 内部的にChannelを利用するので、 Channelと同様、実装をin-memory、Kafka等から選択して 「config-br-defaults」Configmapに設定しておく必要がある。 apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default namespace: default annotations: eventing.knative.dev/broker.class: MTChannelBasedBroker spec: config: apiVersion: v1 kind: ConfigMap name: config-br-default-channel namespace: knative-eventing delivery: deadLetterSink: ref: kind: Service namespace: example-namespace name: example-service apiVersion: v1 uri: example-uri retry: 5 backoffPolicy: exponential backoffDelay: "2007-03-01T13:00:00Z/P1Y2M10DT2H30M"
  15. © 2021 NTT DATA Corporation 19 Trigger ・Brokerでのフィルタリングと配信先を定義するリソース。 HTTPヘッダ(CloudEvents属性/拡張属性)での完全一致フィルタリングをサポートしている。 ・右の例は、「default」brokerにある、

    typeが「dev.knative.foo.bar」かつmyextensionが 「my-extension-value」のイベントのみ、 「my-service」Serviceに配信する場合。 ・filterはAND条件なので、OR条件を使いたい場合は、 Triggerが複数必要。 ・subscriberは複数定義できないので、同じフィルタ条件で 複数のsubscriberに配信したい場合は、Triggerが複数必要。 apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: my-service-trigger spec: broker: default filter: attributes: type: dev.knative.foo.bar myextension: my-extension-value subscriber: ref: apiVersion: v1 kind: Service name: my-service
  16. © 2021 NTT DATA Corporation 20 Broker、TriggerとChannel、Subscriptionの関係 ・Brokerを作成すると、使用するChannelが自動作成される。 # kubectl

    get broker NAME URL AGE READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/default/default 6s True # kubectl get channel NAME URL AGE READY REASON inmemorychannel.messaging.knative.dev/default-kne-trigger http://default-kne-trigger-kn-channel.default.svc.cluster.local 6m55s True # kubectl get trigger NAME BROKER SUBSCRIBER_URI AGE READY REASON trigger1 default http://service1.default.svc.cluster.local 8s True # kubectl get subscription NAME AGE READY REASON default-trigger1-50178dee-e2ed-4ed7-b77e-21752093d629 14s True ・Triggerを作成すると、必要なSubscriptionが自動作成される。
  17. © 2021 NTT DATA Corporation 21 例:Broker、Triggerを導入した場合 イベントを、その属性に応じてフィルタリングし、適切なsubscriberへ配信できる。 イベントはChannelに保存されているため、配信失敗時にイベントは消失せず、再配信が試行される。 Event

    Producer Event consumer Source Trigger(1) Service (APP-2) Service (APP-1) Broker Trigger(2) Subscription(1) Subscription(2) Channel フィルタ 検知/取得 配信 配信 配信 フィルタ イベントをBrokerに配信 Channelにイベントを保存した上で、 Triggerに定義された条件に従って subscriberへ配信
  18. © 2021 NTT DATA Corporation 22 Broker、Trigger導入のメリット ・複雑なイベント配信を行う場合、Broker、Triggerを使うことでリソースの作成、管理が簡単になる。 ※https://github.com/meteatamel/knative-tutorial/blob/master/docs/complexdeliverywithreply.md ※https://github.com/meteatamel/knative-tutorial/blob/master/docs/brokertrigger.md

    ▪Brokerを使わない場合 Sourceからのイベント配信用と、Service2からService3への 連携用の2つのchannelが必要になる。 また、Subscriptionもユーザ側で作成することになる。 →管理が大変 ▪Brokerを使う場合 Triggerの設定によって、1つのBrokerで様々な配信を行える。 Subscriptionも自動で作成してくれる。 →Triggerを管理するだけでOK
  19. © 2021 NTT DATA Corporation 23 カスタムリソース まとめ Event Producer

    Event consumer Source Trigger(1) Service (APP-2) Service (APP-1) Broker Trigger(2) Subscription(1) Subscription(2) Channel フィルタ 検知/取得 配信 配信 配信 以下のカスタムリソースを使用することで、イベントドリブンな処理を実現できる。 フィルタ
  20. © 2021 NTT DATA Corporation 24 カスタムリソース まとめ Event Producer

    Event consumer Source Trigger(1) Service (APP-2) Service (APP-1) Broker Trigger(2) Subscription(1) Subscription(2) Channel フィルタ 検知/取得 配信 配信 配信 以下のカスタムリソースを使用することで、イベントドリブンな処理を実現できる。 フィルタ イベントを検知して、 CloudEvents形式の HTTPリクエスト に変換する CloudEvents形式のリクエストを アプリケーションに配信する ・1つのイベントを複数の宛先に送信する ・リクエスト内容に応じた宛先に配信する
  21. © 2021 NTT DATA Corporation 26 BrokerとTriggerを活用したイベント配信例 Brokerにce-typeの異なるイベントを送信し、Triggerの設定に従って配信先が振り分けられることを確認する。 ・「ce-type:aloha」のイベント→「eventingaloha」Serviceに配信 ・「ce-type:bonjour」のイベント→「eventingbonjour」Serviceに配信

    ※Sourceの代わりにcurlを使って、手動でイベントをBrokerに配信している。 curlコマンド Trigger (aloha) Service (eventingaloha) Broker Trigger (bonjour) Subscription Subscription Channel フィルタ 配信 配信 配信 フィルタ ①Broker宛てに、CloudEvents仕様で HTTPリクエストを送信 Service (eventingbonjour) ②ce-typeの値に応じて、 適切なServiceにイベントを配信 ※https://redhat-developer-demos.github.io/knative-tutorial/knative-tutorial/index.html ③受け取ったイベントを確認 ※受け取ったイベントを出力するだけのAP
  22. © 2021 NTT DATA Corporation 27 BrokerとTriggerを活用したイベント配信例 配信先となるPodを作成し、ClusterIPで公開する。 # kubectl

    get service eventingaloha NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE eventingaloha ClusterIP 10.104.233.136 <none> 80/TCP 5m17s # kubectl get service eventingbonjour NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE eventingbonjour ClusterIP 10.99.168.47 <none> 80/TCP 5m21 # kubectl get pod NAME READY STATUS RESTARTS AGE eventingaloha-v1-deployment-794c9dcdcd-sh5c2 1/1 Running 0 6m1s eventingbonjour-v1-deployment-7ccf8f4f74-jsqfq 1/1 Running 0 6m1s
  23. © 2021 NTT DATA Corporation 28 BrokerとTriggerを活用したイベント配信例 Brokerを作成する。 ※sugar-controllerというKnativeの拡張機能により、「eventing.knative.dev/injection=enabled」という labelを付けたnamespaceにBrokerが自動作成される。

    # kubectl label namespace default eventing.knative.dev/injection=enabled namespace/default labeled # kubectl get broker NAME URL AGE READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/default/default 4s True Brokerのエンドポイント。 ここにPOSTすればイベントをBrokerに登録できる。
  24. © 2021 NTT DATA Corporation 29 BrokerとTriggerを活用したイベント配信例 「ce-type:aloha」のイベントを「eventingaloha」Serviceに配信するTriggerを作成 # cat

    trigger-aloha.yaml apiVersion: eventing.knative.dev/v1beta1 kind: Trigger metadata: name: aloha spec: filter: attributes: type: aloha subscriber: ref: apiVersion: v1 kind: Service name: eventingaloha # kubectl apply -f trigger-aloha.yaml trigger.eventing.knative.dev/aloha created # kubectl get trigger aloha NAME BROKER SUBSCRIBER_URI AGE READY REASON aloha default http://eventingaloha.default.svc.cluster.local/ 14s True
  25. © 2021 NTT DATA Corporation 30 BrokerとTriggerを活用したイベント配信例 「ce-type:bonjour」のイベントを「eventingbonjour」Serviceに配信するTriggerを作成 # cat

    trigger-bonjour.yaml apiVersion: eventing.knative.dev/v1beta1 kind: Trigger metadata: name: bonjour spec: filter: attributes: type: bonjour subscriber: ref: apiVersion: v1 kind: Service name: eventingbonjour # kubectl apply -f trigger-bonjour.yaml trigger.eventing.knative.dev/bonjour created # kubectl get trigger bonjour NAME BROKER SUBSCRIBER_URI AGE READY REASON bonjour default http://eventingbonjour.default.svc.cluster.local/ 6s True
  26. © 2021 NTT DATA Corporation 31 BrokerとTriggerを活用したイベント配信例 BrokerとTriggerを作成したので、ChannelとSubscriptionが自動的に作成されている。 # kubectl

    get channel NAME URL AGE READY REASON inmemorychannel.messaging.knative.dev/default-kne-trigger http://default-kne-trigger-kn-channel.default.svc.cluster.local 3m51s True # kubectl get subscription NAME AGE READY REASON default-aloha-ab84b7e5-a363-43fb-90c8-e2e5c5fcd926 4m32s True default-bonjour-9c99f6e7-b97e-4909-a519-7c9c00b2f24f 101s True
  27. © 2021 NTT DATA Corporation 32 BrokerとTriggerを活用したイベント配信例 Brokerへイベントを登録するためのPodを起動してログインする。 # cat

    curler.yaml apiVersion: v1 kind: Pod metadata: labels: run: curler name: curler spec: containers: - name: curler image: fedora:29 tty: true # kubectl apply -f curler.yaml pod/curler created # kubectl exec -it curler -- /bin/bash
  28. © 2021 NTT DATA Corporation 33 BrokerとTriggerを活用したイベント配信例 type:alohaのイベントをBrokerに対しHTTP POSTすると、 eventingalohaのみにイベントが届く。

    [root@curler /]# curl -v "http://broker-ingress.knative-eventing.svc.cluster.local/default/default" ¥ -X POST ¥ -H "Ce-Id: say-hello" ¥ -H "Ce-Specversion: 1.0" ¥ -H "Ce-Type: aloha" ¥ -H "Ce-Source: mycurl" ¥ -H "Content-Type: application/json" ¥ -d '{"key":"from a curl"}' # kubectl logs eventingaloha-v1-deployment-794c9dcdcd-sh5c2 -f 2021-06-06 11:09:17,838 INFO [eventing-hello] (executor-thread-1) ce-id=say-hello 2021-06-06 11:09:17,840 INFO [eventing-hello] (executor-thread-1) ce-source=mycurl 2021-06-06 11:09:17,840 INFO [eventing-hello] (executor-thread-1) ce-specversion=1.0 2021-06-06 11:09:17,841 INFO [eventing-hello] (executor-thread-1) ce-time=null 2021-06-06 11:09:17,841 INFO [eventing-hello] (executor-thread-1) ce-type=aloha 2021-06-06 11:09:17,842 INFO [eventing-hello] (executor-thread-1) content-type=application/json 2021-06-06 11:09:17,843 INFO [eventing-hello] (executor-thread-1) content-length=21 2021-06-06 11:09:17,843 INFO [eventing-hello] (executor-thread-1) POST:{"key":"from a curl"} Eventingaloha Podのログを確認すると、POSTしたイベントが届いていることが確認できる。
  29. © 2021 NTT DATA Corporation 34 BrokerとTriggerを活用したイベント配信例 type:bonjourのイベントをBrokerに対しHTTP POSTすると、 eventingbonjourのみにイベントが届く。

    [root@curler /]# curl -v "http://broker-ingress.knative-eventing.svc.cluster.local/default/default" ¥ -X POST ¥ -H "Ce-Id: say-hello" ¥ -H "Ce-Specversion: 1.0" ¥ -H "Ce-Type: bonjour" ¥ -H "Ce-Source: mycurl" ¥ -H "Content-Type: application/json" ¥ -d '{"key":"from a curl"}' # kubectl logs eventingbonjour-v1-deployment-7ccf8f4f74-jsqfq –f 2021-06-06 11:12:46,406 INFO [eventing-hello] (executor-thread-1) ce-id=say-hello 2021-06-06 11:12:46,406 INFO [eventing-hello] (executor-thread-1) ce-source=mycurl 2021-06-06 11:12:46,407 INFO [eventing-hello] (executor-thread-1) ce-specversion=1.0 2021-06-06 11:12:46,408 INFO [eventing-hello] (executor-thread-1) ce-time=null 2021-06-06 11:12:46,408 INFO [eventing-hello] (executor-thread-1) ce-type=bonjour 2021-06-06 11:12:46,409 INFO [eventing-hello] (executor-thread-1) content-type=application/json 2021-06-06 11:12:46,409 INFO [eventing-hello] (executor-thread-1) content-length=21 2021-06-06 11:12:46,409 INFO [eventing-hello] (executor-thread-1) POST:{"key":"from a curl"} Eventing bonjour Podのログを確認すると、POSTしたイベントが届いていることが確認できる。
  30. © 2021 NTT DATA Corporation 35 BrokerとTriggerを活用したイベント配信例 ChannelやBrokerの実体はknative-eventing namespaceにあるPodなので、 これらのPodログを確認すると、配信の状況や配信先が分かる。

    ※Channelについてはimc-dispatcher、 Brokerはmt-broker-ingress、mt-broker-filterを見る。 # kubectl get pod -n knative-eventing NAME READY STATUS RESTARTS AGE eventing-controller-bc75b6c59-f876r 1/1 Running 0 19d eventing-webhook-ff58dfd96-lxvjf 1/1 Running 0 19d imc-controller-5676bcf5b7-lhhrv 1/1 Running 0 19d imc-dispatcher-88b5494f6-748t2 1/1 Running 0 19d mt-broker-controller-bbb65f58f-g2k5x 1/1 Running 0 19d mt-broker-filter-5c79bbf754-xz26t 1/1 Running 0 19d mt-broker-ingress-dc4b5d9d9-22nrl 1/1 Running 0 19d pingsource-mt-adapter-75754554d-9hdxc 1/1 Running 0 19d sugar-controller-7cc844bff6-5ltd6 1/1 Running 0 19d
  31. © 2021 NTT DATA Corporation 37 まとめ ・Eventingはイベントの検知、CloudEventsへの変換、配信を行う。 アプリケーションはCloudEvents仕様のHTTPリクエストを受けるだけでよい。 ・Kubernetes上であれば、同じ仕組みでイベントドリブンな処理を実装できる。

    これにより、サーバーレスアプリケーションのポータビリティが向上する。 ・Knativeの最新バージョンはv0.23で、まだ正式リリース(v1)には到達していない。 プロダクション環境へ導入するのであれば商用Knative製品(※)がよいと思う。 ※Google Cloud Run for Anthos、Red Hat Openshift Serverlessなど
  32. © 2021 NTT DATA Corporation 38 まとめ ※触ってみるなら以下がおすすめ - Googleの方が公開しているチュートリアル(https://github.com/meteatamel/knative-tutorial)

    →最新バージョン(v0.23)まで対応している - Redhatのチュートリアル(https://redhat-developer-demos.github.io/knative-tutorial/knative-tutorial/index.html) →少しバージョンが古い(v0.19)が、Apache Kafkaとの連携もカバー
  33. © 2021 NTT DATA Corporation 43 (参考) Eventing カスタムリソース Eventingをインストールすると、以下のCRD(カスタムリソース定義)が作成される。

    # kubectl api-resources --api-group=sources.knative.dev NAME SHORTNAMES APIGROUP NAMESPACED KIND apiserversources sources.knative.dev true ApiServerSource containersources sources.knative.dev true ContainerSource pingsources sources.knative.dev true PingSource sinkbindings sources.knative.dev true SinkBinding # kubectl api-resources --api-group=messaging.knative.dev NAME SHORTNAMES APIGROUP NAMESPACED KIND channels ch messaging.knative.dev true Channel inmemorychannels imc messaging.knative.dev true InMemoryChannel subscriptions sub messaging.knative.dev true Subscription # kubectl api-resources --api-group=eventing.knative.dev NAME SHORTNAMES APIGROUP NAMESPACED KIND brokers eventing.knative.dev true Broker eventtypes eventing.knative.dev true EventType triggers eventing.knative.dev true Trigger