Knativeとは
KnativeはKubernetes上でサーバーレスなアプリケーションを構築するためのプラットフォームです
Knativeの構築
サクッと試すなら、こちらの記事を参考にしてください
Knative Eventingについて
Knativeで単純にアプリケーションをデプロイ・実行するだけであればServingのみで実現できます
Eventingを使用することで、何らかのイベントをトリガーにアプリケーションを呼び出す、いわゆるイベント駆動でアプリケーションを実行することができるようになります
Eventingを構築する主なコンポーネントは以下です
- Sources:イベントをBrokerに発行する(Pub/Subでいうパブリッシャー)
- Brokers:イベントのハブとなるコンポーネント
- Triggers:Brokerに入ってくるイベントのフィルタリング
- Sinks:イベントを受信する(Pub/Subでいうサブスクライバー)
KonKでKnativeを構築すると、お試しで使えるBrokerが入っているので、これを使って試していきます
$ kn broker list
NAME URL AGE CONDITIONS READY REASON
example-broker http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker 33m 5 OK / 5 True
Sourceの作成
ここを参考にイベントを送信するSourceを作ります
CloudEvents PlayerというサンプルアプリケーションにBrokerのURLを指定して作成
kn service create cloudevents-player \
--image ruromero/cloudevents-player:latest \
--env BROKER_URL=http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker
$ kn service list
NAME URL LATEST AGE CONDITIONS READY REASON
cloudevents-player http://cloudevents-player.default.127.0.0.1.nip.io cloudevents-player-00001 45s 3 OK / 3 True
http://cloudevents-player.default.127.0.0.1.nip.io
にアクセスしてイベントを送信することができます
ただ、Brokerにイベントが流れているだけで特に何も起きません
Triggerの作成
Sinkに先程作成したCloudEvents Playerを指定してTriggerを作ります
KnativeのServiceがSource・Sinkの両方に指定できることがわかります
$ kn trigger create cloudevents-trigger --sink cloudevents-player --broker example-broker
$ kn trigger list
NAME BROKER SINK AGE CONDITIONS READY REASON
cloudevents-trigger example-broker ksvc:cloudevents-player 3s 5 OK / 5 True
これでイベントを流すと先程と違い、イベントの受信を確認できます
イベントの流れ
- Source(cloudevents-player)
- Broker(example-broker)
- Trigger(cloudevents-trigger)
- Sink(cloudevents-player)
また、Triggerを作成する際にfilterを指定することで、特定のイベントのみ受信することもできます
$ kn trigger create cloudevents-player-filter --sink cloudevents-player --broker example-broker --filter type=some-type
最後に
Eventingについてより詳細なドキュメントはこちら
https://knative.dev/docs/eventing/