Knative - Flow - Sequence 【十二】

Knative Event Driven Flow

    Flow: 
        事件从生产者传递给消息费之间的路径上,需要由一到多个Processor(KSVC/SVC)进行预处理;

        预处理时需要经由路径拓扑,可以经由Knative Eventing Flow进行定义,主要由两个CRD负责完成:
            Sequence:串联一到多个Processor,主要由一到多个Step和一个channelTemplate组成;
            Parallel:条件式并联一到多个Processor,主要由一到多个Branch和一个channelTemplate组成;

            Sequence和Parallel均是Callable或Addressable类型的资源


        消息传递路径:
            sources --> Sequence --> Channel <-- Subscription --> Sink 

            sources --> Parallel --> Channel <-- Subscription --> Sink
#Importer
    ◼ 连接至期望使用的第3方消息系统
    ◼ 基于HTTP协议POST CloudEvents到Channel、Broker、Sequence/Parallel或Service/KService
#Channel
    ◼ 支持多路订阅
    ◼ 为订阅者“持久化”消息数据
#Service
    ◼ 接收CloudEvents
    ◼ (可选)回复处理后的数据

#Sequence
    ◼ Kubernetes CRD资源类型
    ◼ 串联多个Processor
    ◼ 由多个有序的Step组件成,每个Step定义一个Subscriber
    ◼ Step间的Channel,由ChannelTemplate定义

#Parallel:根据不同的过滤条件对事件进行选择处理
    ◼ Kubernetes CRD资源类型
    ◼ 由多个条件式的并行Branch组成,每个Branch由一对Filter及Subscriber组成
        ◆每个Filter即为一个Processor
    ◼ Channel由由ChannelTemplate定义

Sequence Flow 示例

#示例环境说明
    ◼ Curl命令负责生成event
    ◼ Event由Sequence中的各Step顺次处理
        ◆各Step都运行一个appender应用
        ◆分别向收到的数据尾部附加自定义的专有数据项
    ◼ 最终结果发往ksvc/event-display
#准备实践环境
    ◼ Sequence里,三个Step中的Knative Service
        ◆~$ kn service apply sq-appender-01 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-01" -n event-demo
        ◆~$ kn service apply sq-appender-02 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-02" -n event-demo
        ◆~$ kn service apply sq-appender-03 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-03" -n event-demo
    ◼ 负责最后接收事件的KService/event-display
        ◆~$ kn service apply event-display --image=ikubernetes/event_display --port 8080 --scale-min 1 -n event-demo
#1.拉取镜像
[root@xianchaonode1 ~]# crictl pull ikubernetes/appender

#2.这里创建在default名称空间下 使用命令行创建Sequence
[root@xianchaomaster1 ~]# kn service apply sq-appender-01 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-01"
[root@xianchaomaster1 ~]# kn service apply sq-appender-02 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-02"
[root@xianchaomaster1 ~]# kn service apply sq-appender-03 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-03"
#或者使用Yaml创建 Sequence
[root@xianchaomaster1 sequence-demo]# cat 03-steps-appenders.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: sq-appender-01
  namespace: event-demo
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by SQ-01"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: sq-appender-02
  namespace: event-demo
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by SQ-02"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: sq-appender-03
  namespace: event-demo
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by SQ-03"
---

#3.查看kservice 选择 event-display-001
[root@xianchaomaster1 sequence-demo]# kn service list
NAME                URL                                        LATEST                    AGE     CONDITIONS   READY   REASON
demoapp             http://demoapp.default.xks.com             demoapp-00001             2d1h    3 OK / 3     True
event-display-001   http://event-display-001.default.xks.com   event-display-001-00001   3h30m   3 OK / 3     True
event-display-002   http://event-display-002.default.xks.com   event-display-002-00001   3h30m   3 OK / 3     True
sq-appender-01      http://sq-appender-01.default.xks.com      sq-appender-01-00001      6m28s   3 OK / 3     True
sq-appender-02      http://sq-appender-02.default.xks.com      sq-appender-02-00001      6m20s   3 OK / 3     True
sq-appender-03      http://sq-appender-03.default.xks.com      sq-appender-03-00001      6m13s   3 OK / 3     True

#4.编写Sequence ,在default名称空间下 输出到 event-display-001
[root@xianchaomaster1 sequence-demo]# cat 04-sequence-demo.yaml
apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
  name: sq-demo
  namespace: default
spec:
  channelTemplate:
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
  steps:
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: sq-appender-01
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: sq-appender-02
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: sq-appender-03
  reply:
    ref:
      kind: Service
      apiVersion: serving.knative.dev/v1
      name: event-display-001

[root@xianchaomaster1 sequence-demo]# kubectl apply -f 04-sequence-demo.yaml
sequence.flows.knative.dev/sq-demo configured

[root@xianchaomaster1 sequence-demo]# kubectl get sequence
NAME      URL                                                                 AGE    READY   REASON
sq-demo   http://sq-demo-kn-sequence-0-kn-channel.default.svc.cluster.local   102s   True

#5.测试流程是否 接收到日志
kubectl run client-$RANDOM --image=ikubernetes/admin-box:v1.2 --restart=Never -it --command -- /bin/sh
curl -v "http://sq-demo-kn-sequence-0-kn-channel.default.svc.cluster.local" -X POST -H "Content-Type: application/cloudevents+json" \
-d '{"id": "say-bye", "specversion": "1.0", "type": "com.magedu.saybye", "source": "sendoff", "data": {"message":"Hello Knative Sequence Flow"}}'

#查看event-display-001-00001-deployment-68cdddddcb-hj8pg 日志是否接收到
[root@xianchaomaster1 sequence-demo]# kubectl get pods
NAME                                                  READY   STATUS    RESTARTS   AGE
event-display-001-00001-deployment-68cdddddcb-hj8pg   2/2     Running   0          3h36m
event-display-002-00001-deployment-8769bf8bd-nfl9q    2/2     Running   0          3h36m
sq-appender-01-00001-deployment-545b8cb9d-6fs7v       2/2     Running   0          33s
sq-appender-02-00001-deployment-7647865588-p6g2f      2/2     Running   0          32s
sq-appender-03-00001-deployment-7b65766d8c-5cqv4      2/2     Running   0          31s

[root@xianchaomaster1 sequence-demo]# kubectl logs -f event-display-001-00001-deployment-68cdddddcb-hj8pg
☁️  cloudevents.Event
Context Attributes,
  specversion: 1.0
  type: com.magedu.saybye
  source: sendoff
  id: say-bye
  time: 2023-07-07T06:22:39.041980497Z
  datacontenttype: application/json
Data,
  {
    "id": 0,
    "message": "Hello Knative Sequence Flow - Handled by SQ-01 - Handled by SQ-02 - Handled by SQ-03"
  }

#测试第二次
kubectl run client-$RANDOM --image=ikubernetes/admin-box:v1.2 --restart=Never -it --command -- /bin/sh
curl -v "http://sq-demo-kn-sequence-0-kn-channel.default.svc.cluster.local" -X POST \
-H "Ce-Id: say-hello-flow" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: com.magedu.flow.sayhievent" \
-H "Ce-Time: 2022-10-02T15:18:56.7181741Z" \
-H "Ce-Source: sendoff" \
-H "Content-Type: application/json" \
-d '{"message":"Hello Knative Sequence Flow-2"}'

[root@xianchaomaster1 sequence-demo]# kubectl logs -f event-display-001-00001-deployment-68cdddddcb-hj8pg
☁️  cloudevents.Event
Context Attributes,
  specversion: 1.0
  type: com.magedu.flow.sayhievent
  source: sendoff
  id: say-hello-flow
  time: 2022-10-02T15:18:56.7181741Z
  datacontenttype: application/json
Data,
  {
    "id": 0,
    "message": "Hello Knative Sequence Flow-2 - Handled by SQ-01 - Handled by SQ-02 - Handled by SQ-03"
  }

 

posted @ 2023-07-07 14:31  しみずよしだ  阅读(41)  评论(0)    收藏  举报