別のシーケンスに接続されたシーケンス¶
次の論理構成を作成します。PingSourceを作成し、イベントをSequence
に供給し、そのSequence
の出力を2番目のSequence
に送信し、最終的に結果の出力を表示します。
これらの例で使用されている関数は、https://github.com/knative/eventing/blob/main/cmd/appender/main.goにあります。
前提条件¶
この例では、InMemoryChannel
とKnative Serving(関数用)が設定されていることを前提としています。例ではdefault
名前空間を使用していますが、別の名前空間にデプロイする場合は、例を修正して反映する必要があります。
異なるタイプのChannel
を使用する場合は、適切なChannelリソースを作成するために、Sequence.Spec.ChannelTemplate
を変更する必要があります。
設定¶
Knativeサービスの作成¶
次のコマンドでdefault
を、リソースを作成する名前空間に変更してください。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: first
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 0"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: second
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 1"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: third
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 2"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: fourth
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 3"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: fifth
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 4"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: sixth
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 5"
---
kubectl -n default create -f ./steps.yaml
最初のシーケンスの作成¶
sequence1.yaml
ファイルには、シーケンスを作成するための仕様が含まれています。異なるタイプのChannelを使用する場合は、spec.channelTemplateを目的のChannelを指すように変更する必要があります。
apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
name: first-sequence
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1
kind: InMemoryChannel
steps:
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: first
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: second
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: third
reply:
ref:
kind: Sequence
apiVersion: flows.knative.dev/v1
name: second-sequence
次のコマンドでdefault
を、リソースを作成する名前空間に変更してください。
kubectl -n default create -f ./sequence1.yaml
2番目のシーケンスの作成¶
sequence2.yaml
ファイルには、シーケンスを作成するための仕様が含まれています。異なるタイプのChannelを使用する場合は、spec.channelTemplateを目的のChannelを指すように変更する必要があります。
apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
name: second-sequence
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1
kind: InMemoryChannel
steps:
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: fourth
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: fifth
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: sixth
reply:
ref:
kind: Service
apiVersion: serving.knative.dev/v1
name: event-display
kubectl -n default create -f ./sequence2.yaml
シーケンスによって作成されたイベントを表示するサービスの作成¶
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display
次のコマンドでdefault
を、リソースを作成する名前空間に変更してください。
kubectl -n default create -f ./event-display.yaml
最初のシーケンスをターゲットとするPingSourceの作成¶
これにより、データペイロードとして{"message": "Hello world!"}
を含むCloudEventを2分ごとに送信するPingSourceが作成されます。
apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
name: ping-source
spec:
schedule: "*/2 * * * *"
contentType: "application/json"
data: '{"message": "Hello world!"}'
sink:
ref:
apiVersion: flows.knative.dev/v1
kind: Sequence
name: first-sequence
kubectl -n default create -f ./ping-source.yaml
結果の検査¶
event-displayポッドのログを検査することで、最終的な出力を確認できます。
kubectl -n default get pods
次に、event-displayポッドのログを確認します。
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container --tail=-1
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: dev.knative.sources.ping
source: /apis/v1/namespaces/default/pingsources/ping-source
id: 29d531df-78d8-4d11-9ffd-ba24045241a9
time: 2020-03-02T21:18:00.0011708Z
datacontenttype: application/json
Extensions,
knativehistory: first-sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; first-sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; first-sequence-kn-sequence-2-kn-channel.default.svc.cluster.local; second-sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; second-sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; second-sequence-kn-sequence-2-kn-channel.default.svc.cluster.local
traceparent: 00-e5abc9de525a89ead80560b8f328de5c-fc12b64a6296f541-00
Data,
{
"id": 0,
"message": "Hello world! - Handled by 0 - Handled by 1 - Handled by 2 - Handled by 3 - Handled by 4 - Handled by 5"
}
そして、初期のPingSourceメッセージ("Hello World!")
が、シーケンスの各ステップによって追加されていることがわかります。