SlideShare une entreprise Scribd logo
1  sur  43
© 2021 NTT DATA Corporation
Knative Eventing 入門
2021年6月22日
NTTデータ
北村 卓也
© 2021 NTT DATA Corporation 2
自己紹介
北村 卓也 (twitter:@ch03121)
・所属:NTTデータ
・仕事:BtoBなサービスのインフラ構築/運用
Kubernetesの勉強中
・趣味:化石・鉱物採集
↑岩手県で採集してきた水晶
© 2021 NTT DATA Corporation 3
アジェンダ
1. Knative Eventing 概要
2. Eventingのカスタムリソース紹介
3.BrokerとTriggerを活用したイベント配信例
4. まとめ
© 2021 NTT DATA Corporation 4
注意
・掲載内容は個人の見解であり、所属する企業や組織の立場、戦略、意見を
代表するものではありません。
・記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。
© 2021 NTT DATA Corporation 5
Knative Eventing 概要
© 2021 NTT DATA Corporation 6
Knativeとは
Kubernetesにけおけるサーバーレスアプリケーションのデプロイ・管理のプロセスを簡略化するOSS。
GCPのCloudRunの基盤にも活用されている。
<ユースケース>
 サーバーレスアプリケーションを、異なるプラットフォーム(各種クラウド、オンプレミス)に同じ仕組みで動かしたい
・Knativeが動作するKubernetes上であれば、アプリケーションを改修せずに
異なるプラットフォームでデプロイ、動作可能
・サーバーレスの欠点であるクラウドベンダへのロックインを回避できる
 Kubernetes上でイベントドリブンなアプリケーションを実行したい
・イベントの検知や配信の仕組みはKnativeに任せられるので、アプリケーション側での実装が不要。
・様々なイベントソース(AWS SQS、Apache Kafka、FTPアップロード等)が利用可能
© 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)
をご覧ください!
© 2021 NTT DATA Corporation 8
Eventingとは
イベントの検知、Kubernetes上のアプリケーションへの配信を行うコンポーネント
・Event Producerの違いをEventingが吸収してくれるので、アプリケーション側での個別実装が不要。
・クラウドベンダのマネジメントサービスを使わずに、イベントドリブンな処理を実装できる(ベンダロックイン回避)。
Knative
Eventing
Event Producer
Kubernetes上の
アプリケーション
(Service)
イベント例)
・メッセージキュー(OSS、クラウド…)へのパブリッシュ
・KubernetesAPIserver
・FTPアップロード
・Githubへのプッシュ
イベント検知/取得 イベント配信
CloudEvents仕様
© 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/
© 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
© 2021 NTT DATA Corporation 11
Eventingのカスタムリソース
© 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をインストールすると、カスタムリソース定義が作成される。
それらカスタムリソースを使用することで、イベントドリブンな処理を実現できる。
フィルタ
© 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
© 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"
}
© 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
プロダクション環境で使う場合は、これらを検討
© 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
© 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へ配信
© 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"
© 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
© 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が自動作成される。
© 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へ配信
© 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
© 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
フィルタ
検知/取得 配信
配信
配信
以下のカスタムリソースを使用することで、イベントドリブンな処理を実現できる。
フィルタ
© 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つのイベントを複数の宛先に送信する
・リクエスト内容に応じた宛先に配信する
© 2021 NTT DATA Corporation 25
BrokerとTriggerを
活用したイベント配信例
© 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
© 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
© 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に登録できる。
© 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
© 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
© 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
© 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
© 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したイベントが届いていることが確認できる。
© 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したイベントが届いていることが確認できる。
© 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
© 2021 NTT DATA Corporation 36
まとめ
© 2021 NTT DATA Corporation 37
まとめ
・Eventingはイベントの検知、CloudEventsへの変換、配信を行う。
アプリケーションはCloudEvents仕様のHTTPリクエストを受けるだけでよい。
・Kubernetes上であれば、同じ仕組みでイベントドリブンな処理を実装できる。
これにより、サーバーレスアプリケーションのポータビリティが向上する。
・Knativeの最新バージョンはv0.23で、まだ正式リリース(v1)には到達していない。
プロダクション環境へ導入するのであれば商用Knative製品(※)がよいと思う。
※Google Cloud Run for Anthos、Red Hat Openshift Serverlessなど
© 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との連携もカバー
© 2021 NTT DATA Corporation
© 2021 NTT DATA Corporation 40
(参考) CloudEvent traces
トレース機能を有効化することで、Evetingコンポーネントの通信を可視化できる(Zipkin 、Jaegerに対応)。
以下はzipkinの表示例。
※https://knative.dev/docs/eventing/accessing-traces/
© 2021 NTT DATA Corporation 41
(参考) CNCFによるサーバレスに関する調査結果
※https://www.cncf.io/wp-content/uploads/2020/11/CNCF_Survey_Report_2020.pdf
© 2021 NTT DATA Corporation 42
(参考) Source
Knativeコミュニティで開発されているSourceが多数ある。自作することも可能。
※ https://knative.dev/docs/eventing/sources/#knative-sources
© 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

Contenu connexe

Tendances

Tendances (20)

PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
クラウドネイティブ時代の大規模ウォーターフォール開発(CloudNative Days Tokyo 2021 発表資料)
クラウドネイティブ時代の大規模ウォーターフォール開発(CloudNative Days Tokyo 2021 発表資料)クラウドネイティブ時代の大規模ウォーターフォール開発(CloudNative Days Tokyo 2021 発表資料)
クラウドネイティブ時代の大規模ウォーターフォール開発(CloudNative Days Tokyo 2021 発表資料)
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Argo CD Deep Dive
Argo CD Deep DiveArgo CD Deep Dive
Argo CD Deep Dive
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 

Similaire à Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)

Similaire à Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料) (20)

ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料) ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
ここがつらいよ、Hyperledger Fabricの商用適用(Blockchain GIG #4発表資料)
 
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語るSnowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
Snowflakeって実際どうなの?数多のDBを使い倒した猛者が語る
 
202007 contrail cloud-operator-contrail_v1.2
202007 contrail cloud-operator-contrail_v1.2202007 contrail cloud-operator-contrail_v1.2
202007 contrail cloud-operator-contrail_v1.2
 
Web RTCにより拓かれるコミュニケーションサービスの形 「新たなバリュー創造へ。ntt comのチャレンジ」webアプリケーション エバンジェリスト ...
Web RTCにより拓かれるコミュニケーションサービスの形 「新たなバリュー創造へ。ntt comのチャレンジ」webアプリケーション エバンジェリスト ...Web RTCにより拓かれるコミュニケーションサービスの形 「新たなバリュー創造へ。ntt comのチャレンジ」webアプリケーション エバンジェリスト ...
Web RTCにより拓かれるコミュニケーションサービスの形 「新たなバリュー創造へ。ntt comのチャレンジ」webアプリケーション エバンジェリスト ...
 
少人数チームでのkubernetesへの移行事例
少人数チームでのkubernetesへの移行事例少人数チームでのkubernetesへの移行事例
少人数チームでのkubernetesへの移行事例
 
Aws summit tokyo 2016
Aws summit tokyo 2016Aws summit tokyo 2016
Aws summit tokyo 2016
 
OCHaCafe2#5 変幻自在♪ 広がるKubernetesのエコシステム
OCHaCafe2#5 変幻自在♪ 広がるKubernetesのエコシステムOCHaCafe2#5 変幻自在♪ 広がるKubernetesのエコシステム
OCHaCafe2#5 変幻自在♪ 広がるKubernetesのエコシステム
 
Accel series 2021 Winter
Accel series 2021 WinterAccel series 2021 Winter
Accel series 2021 Winter
 
KubernetesとFlannelでWindows上にPod間VXLAN Overlayネットワークを構成
KubernetesとFlannelでWindows上にPod間VXLAN Overlayネットワークを構成KubernetesとFlannelでWindows上にPod間VXLAN Overlayネットワークを構成
KubernetesとFlannelでWindows上にPod間VXLAN Overlayネットワークを構成
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)
 
02_運用コスト削減に向けた情報管理を!最新Hinemos ver.6.2の全体像
02_運用コスト削減に向けた情報管理を!最新Hinemos ver.6.2の全体像02_運用コスト削減に向けた情報管理を!最新Hinemos ver.6.2の全体像
02_運用コスト削減に向けた情報管理を!最新Hinemos ver.6.2の全体像
 
Hinemosで統合管理できる!NTTコミュニケーションズのクラウドサービス
Hinemosで統合管理できる!NTTコミュニケーションズのクラウドサービスHinemosで統合管理できる!NTTコミュニケーションズのクラウドサービス
Hinemosで統合管理できる!NTTコミュニケーションズのクラウドサービス
 
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
0から始めるコンテナの学び方(Kubernetes Novice Tokyo #14 発表資料)
 
データが覗いたOpenStack Summit Vancouver
データが覗いたOpenStack Summit Vancouverデータが覗いたOpenStack Summit Vancouver
データが覗いたOpenStack Summit Vancouver
 
【HinemosWorld2014】A1-3_01_NTT Comのグローバルクラウド戦略とHinemosとの連携について
【HinemosWorld2014】A1-3_01_NTT Comのグローバルクラウド戦略とHinemosとの連携について【HinemosWorld2014】A1-3_01_NTT Comのグローバルクラウド戦略とHinemosとの連携について
【HinemosWorld2014】A1-3_01_NTT Comのグローバルクラウド戦略とHinemosとの連携について
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallenge
 
OSSコミッタの生活とその必要性
OSSコミッタの生活とその必要性OSSコミッタの生活とその必要性
OSSコミッタの生活とその必要性
 
Oracle Cloud Infrastructure:2020年4月度サービス・アップデート
Oracle Cloud Infrastructure:2020年4月度サービス・アップデートOracle Cloud Infrastructure:2020年4月度サービス・アップデート
Oracle Cloud Infrastructure:2020年4月度サービス・アップデート
 
インフラチームの歴史とこれから
インフラチームの歴史とこれからインフラチームの歴史とこれから
インフラチームの歴史とこれから
 

Plus de NTT DATA Technology & Innovation

Plus de NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Dernier

Dernier (6)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)

  • 1. © 2021 NTT DATA Corporation Knative Eventing 入門 2021年6月22日 NTTデータ 北村 卓也
  • 2. © 2021 NTT DATA Corporation 2 自己紹介 北村 卓也 (twitter:@ch03121) ・所属:NTTデータ ・仕事:BtoBなサービスのインフラ構築/運用 Kubernetesの勉強中 ・趣味:化石・鉱物採集 ↑岩手県で採集してきた水晶
  • 3. © 2021 NTT DATA Corporation 3 アジェンダ 1. Knative Eventing 概要 2. Eventingのカスタムリソース紹介 3.BrokerとTriggerを活用したイベント配信例 4. まとめ
  • 4. © 2021 NTT DATA Corporation 4 注意 ・掲載内容は個人の見解であり、所属する企業や組織の立場、戦略、意見を 代表するものではありません。 ・記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。
  • 5. © 2021 NTT DATA Corporation 5 Knative Eventing 概要
  • 6. © 2021 NTT DATA Corporation 6 Knativeとは Kubernetesにけおけるサーバーレスアプリケーションのデプロイ・管理のプロセスを簡略化するOSS。 GCPのCloudRunの基盤にも活用されている。 <ユースケース>  サーバーレスアプリケーションを、異なるプラットフォーム(各種クラウド、オンプレミス)に同じ仕組みで動かしたい ・Knativeが動作するKubernetes上であれば、アプリケーションを改修せずに 異なるプラットフォームでデプロイ、動作可能 ・サーバーレスの欠点であるクラウドベンダへのロックインを回避できる  Kubernetes上でイベントドリブンなアプリケーションを実行したい ・イベントの検知や配信の仕組みはKnativeに任せられるので、アプリケーション側での実装が不要。 ・様々なイベントソース(AWS SQS、Apache Kafka、FTPアップロード等)が利用可能
  • 7. © 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) をご覧ください!
  • 8. © 2021 NTT DATA Corporation 8 Eventingとは イベントの検知、Kubernetes上のアプリケーションへの配信を行うコンポーネント ・Event Producerの違いをEventingが吸収してくれるので、アプリケーション側での個別実装が不要。 ・クラウドベンダのマネジメントサービスを使わずに、イベントドリブンな処理を実装できる(ベンダロックイン回避)。 Knative Eventing Event Producer Kubernetes上の アプリケーション (Service) イベント例) ・メッセージキュー(OSS、クラウド…)へのパブリッシュ ・KubernetesAPIserver ・FTPアップロード ・Githubへのプッシュ イベント検知/取得 イベント配信 CloudEvents仕様
  • 9. © 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/
  • 10. © 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
  • 11. © 2021 NTT DATA Corporation 11 Eventingのカスタムリソース
  • 12. © 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をインストールすると、カスタムリソース定義が作成される。 それらカスタムリソースを使用することで、イベントドリブンな処理を実現できる。 フィルタ
  • 13. © 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
  • 14. © 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" }
  • 15. © 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 プロダクション環境で使う場合は、これらを検討
  • 16. © 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
  • 17. © 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へ配信
  • 18. © 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"
  • 19. © 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
  • 20. © 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が自動作成される。
  • 21. © 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へ配信
  • 22. © 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
  • 23. © 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 フィルタ 検知/取得 配信 配信 配信 以下のカスタムリソースを使用することで、イベントドリブンな処理を実現できる。 フィルタ
  • 24. © 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つのイベントを複数の宛先に送信する ・リクエスト内容に応じた宛先に配信する
  • 25. © 2021 NTT DATA Corporation 25 BrokerとTriggerを 活用したイベント配信例
  • 26. © 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
  • 27. © 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
  • 28. © 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に登録できる。
  • 29. © 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
  • 30. © 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
  • 31. © 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
  • 32. © 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
  • 33. © 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したイベントが届いていることが確認できる。
  • 34. © 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したイベントが届いていることが確認できる。
  • 35. © 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
  • 36. © 2021 NTT DATA Corporation 36 まとめ
  • 37. © 2021 NTT DATA Corporation 37 まとめ ・Eventingはイベントの検知、CloudEventsへの変換、配信を行う。 アプリケーションはCloudEvents仕様のHTTPリクエストを受けるだけでよい。 ・Kubernetes上であれば、同じ仕組みでイベントドリブンな処理を実装できる。 これにより、サーバーレスアプリケーションのポータビリティが向上する。 ・Knativeの最新バージョンはv0.23で、まだ正式リリース(v1)には到達していない。 プロダクション環境へ導入するのであれば商用Knative製品(※)がよいと思う。 ※Google Cloud Run for Anthos、Red Hat Openshift Serverlessなど
  • 38. © 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との連携もカバー
  • 39. © 2021 NTT DATA Corporation
  • 40. © 2021 NTT DATA Corporation 40 (参考) CloudEvent traces トレース機能を有効化することで、Evetingコンポーネントの通信を可視化できる(Zipkin 、Jaegerに対応)。 以下はzipkinの表示例。 ※https://knative.dev/docs/eventing/accessing-traces/
  • 41. © 2021 NTT DATA Corporation 41 (参考) CNCFによるサーバレスに関する調査結果 ※https://www.cncf.io/wp-content/uploads/2020/11/CNCF_Survey_Report_2020.pdf
  • 42. © 2021 NTT DATA Corporation 42 (参考) Source Knativeコミュニティで開発されているSourceが多数ある。自作することも可能。 ※ https://knative.dev/docs/eventing/sources/#knative-sources
  • 43. © 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