Knative - Eventing系统组件、工作机制及入门实践【七】

Knative Eventing:
    三个组件:
        Serving: BaaS 
            编排无状态、基于HTTP或gRPC协议的服务器(daemon)应用
            这类应用本身也可以由Kubernetes直接编排运行(Deployment, HPA, Service, Ingress)
        Eventing: 事件驱动架构的基础设施
            无状态、基于HTTP或gRPC协议的服务器(daemon)应用,采用了EDA架构
                编排:仍由Serving负责
                Eventing仅负责提供消息消息设施
        Build:CI/CD Pipeline,Tekton

    事件驱动架构:
        事件 
        消息传递

    实现消息传递:
        Sources:消息的生产者,通常应该是一个分布式应用中的某个程序(服务),该程序通常由Knative Serving或直接由Kubernete Deployment编排运行; 
        Sinks: 消息的接收者 
            可寻址,或可调用
               (1) Channel
               (2) Broker 
               (3) 是一个分布式应用中的某个程序(服务),该程序通常由Knative Serving或直接由Kubernete Deployment编排运行 

        提示:消息的最终目的端,通常必然是一个分布式应用中的某个程序(服务),所以消息如何传递给了Channel或Broker,则通常还要再传递下云,直到传递给

    消息传递模式:
        一对一: source --> ksvc或svc 
        一对多(不过滤):source --> Channel <-- Subscriptions --> Subscriber (ksvc或svc)
        一对多(过滤):source --> Broker <-- Triggers --> ksvc或svc
    
    存在复杂处理流程的可能:
        可将处理过程定义为Flow组件:
            Sequence:
                A --> B --> C --> D --> E
            Parallel:
                      |--> B |
                A --> |--> C |--> E
                      |--> D |

Knative Eventing的相关组件

#Knative Eventing具有四个最基本的组件:Sources、Brokers、Triggers 和 Sinks
    ◼ 事件会从Source发送至Sink
    ◼ Sink是能够接收传入的事件可寻址(Addressable)或可调用(Callable)资源
        ◆Knative Service、Channel和Broker都可用作Sink
#Knative Eventing的关键术语
    ◼ Event Source
        ◆Knative Eventing中的事件源主要就是指事件的生产者
        ◆事件将被发往Sink或Subscriber
    ◼ Channel和Subscription
        ◆事件管道模型,负责在Channel及其各Subscription之间格式化和路由事件
    ◼ Broker和Trigger
        ◆事件网格(mesh)模型,Producer把事件发往Broker,再由Broker统一经Trigger发往各Consumer
        ◆各Consumer利用Trigger向Broker订阅其感兴趣的事件
    ◼ Event Registry
        ◆Knative Eventing使用EventType来帮助Consumer从Broker上发现其能够消费的事件类型
        ◆Event Registry即为存储着EventType的集合,这些EventType含有Consumer创建Trigger的所有必要信息

Event 处理示意图

Event Source:事件源,即生产者抽象,负责从真正的事件源导入事件至Eventing拓扑中
Event Type:事件类型,它们定义于Event Registry中
Flow:事件处理流,可简单地手工定义流,也可使用专用的API进行定义
Event Sinks:能接收Event的可寻址(Addressable)或可调用(Callable)资源,例如KService等

Knative的事件传递模式1

#Knative Eventing中的Sink(接收事件)的用例主要有Knative Service、Channels和Brokers三种
#Knative Eventing支持的事件传递模式
    ◼ Sources to Sink
        ◆单一Sink模式,事件接收过程中不存在排队和过滤等操作
        ◆Event Source的职责仅是传递消息,且无需等待Sink响应
        ◆fire and forget
    ◼ Channels and Subscriptions
        ◆Event Source将事件发往Channel
        ◆Channel可以有一到多个Subscription(即Sink)
        ◆Channel中的每个事件都被格式化Cloud Event并发送至各Subscription
        ◆不支持消息过滤机制

Knative的事件传递模式2

#Knative Eventing支持的事件传递模式
    ◼ Brokers and Triggers
        ◆功能类似于Channel和Subscription模式,但支持消息过滤机制
        ◆事件过滤机制允许Subscription使用基于事件属性的条件表达式(Trigger)筛选感兴趣的事件
        ◆Trigger负责订阅Broker,并对Broker上的消息进行过滤
        ◆Trigger将消息传递给感兴趣的Subscription之前,还需要负责完成消息的格式化
        ◆这是在生产中推荐使用的消息投递模式

部署安装Eventing

    部署Knative Eventing: 
        部署核心组件:
            crd 
            controller 
        部署Channel层
        部署Broker层 

    Sources的作用:
        负责将传统的生成非CloudEvents格式的程序,所生成的事件转换为CloudEvents格式

1.Install Knative Eventing

【1.7.1版本】
https://github.com/knative/eventing/releases/download/knative-v1.7.1/eventing-core.yaml
https://github.com/knative/eventing/releases/download/knative-v1.7.1/eventing-crds.yaml

[root@xianchaomaster1 bookinfo]# kubectl apply -f /root/KnativeSrc/eventing-crds.yaml
customresourcedefinition.apiextensions.k8s.io/apiserversources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/brokers.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/containersources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/eventtypes.eventing.knative.dev created
customresourcedefinition.apiextensions.k8s.io/parallels.flows.knative.dev created
customresourcedefinition.apiextensions.k8s.io/pingsources.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/sequences.flows.knative.dev created
customresourcedefinition.apiextensions.k8s.io/sinkbindings.sources.knative.dev created
customresourcedefinition.apiextensions.k8s.io/subscriptions.messaging.knative.dev created
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev created

[root@xianchaomaster1 bookinfo]# kubectl api-resources --api-group=messaging.knative.dev
NAME            SHORTNAMES   APIVERSION                 NAMESPACED   KIND
channels        ch           messaging.knative.dev/v1   true         Channel
subscriptions   sub          messaging.knative.dev/v1   true         Subscription
[root@xianchaomaster1 bookinfo]# kubectl api-resources --api-group=eventing.knative.dev
NAME         SHORTNAMES   APIVERSION                     NAMESPACED   KIND
brokers                   eventing.knative.dev/v1        true         Broker
eventtypes                eventing.knative.dev/v1beta1   true         EventType
triggers                  eventing.knative.dev/v1        true         Trigger
[root@xianchaomaster1 bookinfo]# kubectl api-resources --api-group=flows.knative.dev
NAME        SHORTNAMES   APIVERSION             NAMESPACED   KIND
parallels                flows.knative.dev/v1   true         Parallel
sequences                flows.knative.dev/v1   true         Sequence

#部署eventing-core.yaml
gcr.io/knative-releases/knative.dev/eventing/cmd/controller@sha256:49110e5609ee3ae7a64015e467619312553e3a6f7defdf295f1c8c2d9b718834
gcr.io/knative-releases/knative.dev/eventing/cmd/mtping@sha256:ee90e11a11c14f9210255da1a834690321a3b525143d9bafec6f1381c9de53c1
gcr.io/knative-releases/knative.dev/eventing/cmd/webhook@sha256:7bbc84ea817f692cf0b2e36e890387a8e9feb0a3e04f632e57fafeada485a833
改为
gcr.io/knative-releases 改为 gcr.lank8s.cn/knative-releases
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/controller@sha256:49110e5609ee3ae7a64015e467619312553e3a6f7defdf295f1c8c2d9b718834
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/mtping@sha256:ee90e11a11c14f9210255da1a834690321a3b525143d9bafec6f1381c9de53c1
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/webhook@sha256:7bbc84ea817f692cf0b2e36e890387a8e9feb0a3e04f632e57fafeada485a833

#拉取镜像
crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/controller@sha256:49110e5609ee3ae7a64015e467619312553e3a6f7defdf295f1c8c2d9b718834
crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/mtping@sha256:ee90e11a11c14f9210255da1a834690321a3b525143d9bafec6f1381c9de53c1
crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/webhook@sha256:7bbc84ea817f692cf0b2e36e890387a8e9feb0a3e04f632e57fafeada485a833

[root@xianchaomaster1 bookinfo]# kubectl apply -f /root/KnativeSrc/eventing-core.yaml
namespace/knative-eventing created
serviceaccount/eventing-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-resolver created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-source-observer created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-sources-controller created
clusterrolebinding.rbac.authorization.k8s.io/eventing-controller-manipulator created
serviceaccount/pingsource-mt-adapter created
clusterrolebinding.rbac.authorization.k8s.io/knative-eventing-pingsource-mt-adapter created
serviceaccount/eventing-webhook created
clusterrolebinding.rbac.authorization.k8s.io/eventing-webhook created
rolebinding.rbac.authorization.k8s.io/eventing-webhook created
clusterrolebinding.rbac.authorization.k8s.io/eventing-webhook-resolver created
clusterrolebinding.rbac.authorization.k8s.io/eventing-webhook-podspecable-binding created
configmap/config-br-default-channel created
configmap/config-br-defaults created
configmap/default-ch-webhook created
configmap/config-ping-defaults created
configmap/config-features created
configmap/config-kreference-mapping created
configmap/config-leader-election created
configmap/config-logging created
configmap/config-observability created
configmap/config-sugar created
configmap/config-tracing created
deployment.apps/eventing-controller created
deployment.apps/pingsource-mt-adapter created
Warning: autoscaling/v2beta2 HorizontalPodAutoscaler is deprecated in v1.23+, unavailable in v1.26+; use autoscaling/v2 HorizontalPodAutoscaler
horizontalpodautoscaler.autoscaling/eventing-webhook created
poddisruptionbudget.policy/eventing-webhook created
deployment.apps/eventing-webhook created
service/eventing-webhook created
customresourcedefinition.apiextensions.k8s.io/apiserversources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/brokers.eventing.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/channels.messaging.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/containersources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/eventtypes.eventing.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/parallels.flows.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/pingsources.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/sequences.flows.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/sinkbindings.sources.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/subscriptions.messaging.knative.dev unchanged
customresourcedefinition.apiextensions.k8s.io/triggers.eventing.knative.dev unchanged
clusterrole.rbac.authorization.k8s.io/addressable-resolver created
clusterrole.rbac.authorization.k8s.io/service-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/serving-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/channel-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/broker-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/flows-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/eventing-broker-filter created
clusterrole.rbac.authorization.k8s.io/eventing-broker-ingress created
clusterrole.rbac.authorization.k8s.io/eventing-config-reader created
clusterrole.rbac.authorization.k8s.io/channelable-manipulator created
clusterrole.rbac.authorization.k8s.io/meta-channelable-manipulator created
clusterrole.rbac.authorization.k8s.io/knative-eventing-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-messaging-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-flows-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-sources-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-bindings-namespaced-admin created
clusterrole.rbac.authorization.k8s.io/knative-eventing-namespaced-edit created
clusterrole.rbac.authorization.k8s.io/knative-eventing-namespaced-view created
clusterrole.rbac.authorization.k8s.io/knative-eventing-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-pingsource-mt-adapter created
clusterrole.rbac.authorization.k8s.io/podspecable-binding created
clusterrole.rbac.authorization.k8s.io/builtin-podspecable-binding created
clusterrole.rbac.authorization.k8s.io/source-observer created
clusterrole.rbac.authorization.k8s.io/eventing-sources-source-observer created
clusterrole.rbac.authorization.k8s.io/knative-eventing-sources-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-webhook created
role.rbac.authorization.k8s.io/knative-eventing-webhook created
validatingwebhookconfiguration.admissionregistration.k8s.io/config.webhook.eventing.knative.dev created
mutatingwebhookconfiguration.admissionregistration.k8s.io/webhook.eventing.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.webhook.eventing.knative.dev created
secret/eventing-webhook-certs created
mutatingwebhookconfiguration.admissionregistration.k8s.io/sinkbindings.webhook.sources.knative.dev created

[root@xianchaomaster1 bookinfo]# kubectl get ns
NAME               STATUS   AGE
default            Active   11d
istio-system       Active   28h
knative-eventing   Active   78s
knative-serving    Active   29h
kube-node-lease    Active   11d
kube-public        Active   11d
kube-system        Active   11d
[root@xianchaomaster1 bookinfo]# kubectl get pods -n knative-eventing
NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-7b6fc5969c-rnxqn   1/1     Running   0          92s
eventing-webhook-786dbf4c49-nckrk      1/1     Running   0          92s

2.Optional: Install a default Channel (messaging) layer

2.1 In-Memory (standalone)

https://github.com/knative/eventing/releases/download/knative-v1.7.1/in-memory-channel.yaml

gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_controller@sha256:1e9602791e76dc7556446ea1645b8721c853f747a59c7ef3d3f028510e0d5072
gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher@sha256:029c65cad7c7b1b63427c0df25dbbf8a02815c829949821d972354e9e983525b
改为
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/in_memory/channel_controller@sha256:1e9602791e76dc7556446ea1645b8721c853f747a59c7ef3d3f028510e0d5072
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher@sha256:029c65cad7c7b1b63427c0df25dbbf8a02815c829949821d972354e9e983525b

crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/in_memory/channel_controller@sha256:1e9602791e76dc7556446ea1645b8721c853f747a59c7ef3d3f028510e0d5072
crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher@sha256:029c65cad7c7b1b63427c0df25dbbf8a02815c829949821d972354e9e983525b

[root@xianchaomaster1 bookinfo]# kubectl apply -f /root/KnativeSrc/in-memory-channel.yaml
serviceaccount/imc-controller created
clusterrolebinding.rbac.authorization.k8s.io/imc-controller created
rolebinding.rbac.authorization.k8s.io/imc-controller created
clusterrolebinding.rbac.authorization.k8s.io/imc-controller-resolver created
serviceaccount/imc-dispatcher created
clusterrolebinding.rbac.authorization.k8s.io/imc-dispatcher created
configmap/config-imc-event-dispatcher created
configmap/config-observability unchanged
configmap/config-tracing unchanged
deployment.apps/imc-controller created
service/inmemorychannel-webhook created
service/imc-dispatcher created
deployment.apps/imc-dispatcher created
customresourcedefinition.apiextensions.k8s.io/inmemorychannels.messaging.knative.dev created
clusterrole.rbac.authorization.k8s.io/imc-addressable-resolver created
clusterrole.rbac.authorization.k8s.io/imc-channelable-manipulator created
clusterrole.rbac.authorization.k8s.io/imc-controller created
clusterrole.rbac.authorization.k8s.io/imc-dispatcher created
role.rbac.authorization.k8s.io/knative-inmemorychannel-webhook created
mutatingwebhookconfiguration.admissionregistration.k8s.io/inmemorychannel.eventing.knative.dev created
validatingwebhookconfiguration.admissionregistration.k8s.io/validation.inmemorychannel.eventing.knative.dev created
secret/inmemorychannel-webhook-certs created

[root@xianchaomaster1 bookinfo]# kubectl get pods -n knative-eventing
NAME                                   READY   STATUS    RESTARTS   AGE
eventing-controller-7b6fc5969c-rnxqn   1/1     Running   0          10m
eventing-webhook-786dbf4c49-nckrk      1/1     Running   0          10m
imc-controller-68d854949d-w9x4k        1/1     Running   0          35s
imc-dispatcher-7c8f6559b9-ngwzq        1/1     Running   0          35s

3.Optional: Install a Broker layer

3.1 MT-Channel-based

https://github.com/knative/eventing/releases/download/knative-v1.7.1/mt-channel-broker.yaml

gcr.io/knative-releases/knative.dev/eventing/cmd/broker/filter@sha256:2d118fa07545b7b510b06416dcfb8396f5a815303ce70e91f5b1ab1f335751ed
gcr.io/knative-releases/knative.dev/eventing/cmd/mtchannel_broker@sha256:84db786596618bb49bd864f6689e0447c7d4d795a7bd69e61f868b1b7747aa20
gcr.io/knative-releases/knative.dev/eventing/cmd/broker/ingress@sha256:5cfacba62237cef36072b2f594d0314cf216628fcb5fcf54043aaa748ec5f40d
改为
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/broker/filter@sha256:2d118fa07545b7b510b06416dcfb8396f5a815303ce70e91f5b1ab1f335751ed
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/mtchannel_broker@sha256:84db786596618bb49bd864f6689e0447c7d4d795a7bd69e61f868b1b7747aa20
gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/broker/ingress@sha256:5cfacba62237cef36072b2f594d0314cf216628fcb5fcf54043aaa748ec5f40d

crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/broker/filter@sha256:2d118fa07545b7b510b06416dcfb8396f5a815303ce70e91f5b1ab1f335751ed
crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/mtchannel_broker@sha256:84db786596618bb49bd864f6689e0447c7d4d795a7bd69e61f868b1b7747aa20
crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing/cmd/broker/ingress@sha256:5cfacba62237cef36072b2f594d0314cf216628fcb5fcf54043aaa748ec5f40d

[root@xianchaomaster1 bookinfo]# kubectl apply -f /root/KnativeSrc/mt-channel-broker.yaml
clusterrole.rbac.authorization.k8s.io/knative-eventing-mt-channel-broker-controller created
clusterrole.rbac.authorization.k8s.io/knative-eventing-mt-broker-filter created
serviceaccount/mt-broker-filter created
clusterrole.rbac.authorization.k8s.io/knative-eventing-mt-broker-ingress created
serviceaccount/mt-broker-ingress created
clusterrolebinding.rbac.authorization.k8s.io/eventing-mt-channel-broker-controller created
clusterrolebinding.rbac.authorization.k8s.io/knative-eventing-mt-broker-filter created
clusterrolebinding.rbac.authorization.k8s.io/knative-eventing-mt-broker-ingress created
deployment.apps/mt-broker-filter created
service/broker-filter created
deployment.apps/mt-broker-ingress created
service/broker-ingress created
deployment.apps/mt-broker-controller created
Warning: autoscaling/v2beta2 HorizontalPodAutoscaler is deprecated in v1.23+, unavailable in v1.26+; use autoscaling/v2 HorizontalPodAutoscaler
horizontalpodautoscaler.autoscaling/broker-ingress-hpa created
horizontalpodautoscaler.autoscaling/broker-filter-hpa created

[root@xianchaomaster1 bookinfo]# kubectl get pods -n knative-eventing
NAME                                    READY   STATUS    RESTARTS   AGE
eventing-controller-7b6fc5969c-rnxqn    1/1     Running   0          21m
eventing-webhook-786dbf4c49-nckrk       1/1     Running   0          21m
imc-controller-68d854949d-w9x4k         1/1     Running   0          11m
imc-dispatcher-7c8f6559b9-ngwzq         1/1     Running   0          11m
mt-broker-controller-86dd98fd58-zqsh7   1/1     Running   0          26s
mt-broker-filter-587668dcc6-9sx8c       1/1     Running   0          26s
mt-broker-ingress-84bddff64f-xw8xj      1/1     Running   0          26s

[root@xianchaomaster1 bookinfo]# kubectl get cm -n knative-eventing
NAME                          DATA   AGE
config-br-default-channel     1      22m
config-br-defaults            1      22m
config-features               6      22m
config-imc-event-dispatcher   2      12m
config-kreference-mapping     1      22m
config-leader-election        1      22m
config-logging                3      22m
config-observability          1      22m
config-ping-defaults          1      22m
config-sugar                  1      22m
config-tracing                1      22m
default-ch-webhook            1      22m
istio-ca-root-cert            1      22m
kube-root-ca.crt              1      22m
[root@xianchaomaster1 bookinfo]# kubectl get cm config-br-defaults -o yaml -n knative-eventing
apiVersion: v1
data:
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: config-br-default-channel
      namespace: knative-eventing
      delivery:
        retry: 10
        backoffPolicy: exponential
        backoffDelay: PT0.2S
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"default-br-config":"clusterDefault:\n  brokerClass: MTChannelBasedBroker\n  apiVersion: v1\n  kind: ConfigMap\n  name: config-br-default-channel\n  namespace: knative-eventing\n  delivery:\n    retry: 10\n    backoffPolicy: exponential\n    backoffDelay: PT0.2S\n"},"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"knative-eventing","app.kubernetes.io/version":"1.7.1","eventing.knative.dev/release":"v1.7.1"},"name":"config-br-defaults","namespace":"knative-eventing"}}
  creationTimestamp: "2023-07-06T08:50:35Z"
  labels:
    app.kubernetes.io/name: knative-eventing
    app.kubernetes.io/version: 1.7.1
    eventing.knative.dev/release: v1.7.1
  name: config-br-defaults
  namespace: knative-eventing
  resourceVersion: "466564"
  uid: 5df83f4e-55a5-4209-875a-afd391376b7f

#    apiVersion: messaging.knative.dev/v1
#    kind: InMemoryChannel
[root@xianchaomaster1 bookinfo]# kubectl get cm config-br-default-channel -o yaml -n knative-eventing
apiVersion: v1
data:
  channel-template-spec: |
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"channel-template-spec":"apiVersion: messaging.knative.dev/v1\nkind: InMemoryChannel\n"},"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"knative-eventing","app.kubernetes.io/version":"1.7.1","eventing.knative.dev/release":"v1.7.1"},"name":"config-br-default-channel","namespace":"knative-eventing"}}
  creationTimestamp: "2023-07-06T08:50:35Z"
  labels:
    app.kubernetes.io/name: knative-eventing
    app.kubernetes.io/version: 1.7.1
    eventing.knative.dev/release: v1.7.1
  name: config-br-default-channel
  namespace: knative-eventing
  resourceVersion: "466563"
  uid: 06aa90b2-6b06-4794-bc17-6c7c24a63e12

4.Install optional Eventing extensions

 未安装

CLoudEvent示例

#node节点下载镜像
[root@xianchaonode1 ~]# crictl pull ikubernetes/event_display

#启动
kn service create event-display --image ikubernetes/event_display --port 8080 --scale-min 1


#为了自动化创建CDC 修改配置ConfigMap 参考《Knative - 域名映射-CDC配置【三】》
#编辑knative-serving名称空间中的"configmap/config-network",添加如下配置项:
#autocreate-cluster-domain-claims: "true"
[root@xianchaomaster1 domainmapping]# kubectl edit cm config-network -n knative-serving
    autocreate-cluster-domain-claims: "true"
configmap/config-network edited

#添加CDC
[root@xianchaomaster1 ~]# kn domain create event.xks.com --ref "ksvc:event-display"
Domain mapping 'event.xks.com' created in namespace 'default'.

[root@xianchaomaster1 ~]# kubectl get cdc
NAME            AGE
event.xks.com   12s

#外部访问
#1.先将域名解析
[root@sonarqube plugins]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.40.145 jenkinsnew
192.168.40.146 jenkinsagent
192.168.40.147 sonarqube
192.168.40.190 event.xks.com
#2.curl命令
[root@sonarqube plugins]# curl -v "http://event.xks.com/" -X POST \
-H "Ce-Id: say-hello" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: com.magedu.sayhievent" \
-H "Ce-Time: 2022-10-02T11:36:56.7181741Z" \
-H "Ce-Source: sendoff" \
-H "Content-Type: application/json" \
-d '{"msg":"Hello MageEdu Knative from External!"}'

* About to connect() to event.xks.com port 80 (#0)
*   Trying 192.168.40.190...
* Connected to event.xks.com (192.168.40.190) port 80 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: event.xks.com
> Accept: */*
> Ce-Id: say-hello
> Ce-Specversion: 1.0
> Ce-Type: com.magedu.sayhievent
> Ce-Time: 2022-10-02T11:36:56.7181741Z
> Ce-Source: sendoff
> Content-Type: application/json
> Content-Length: 46
>
* upload completely sent off: 46 out of 46 bytes
< HTTP/1.1 200 OK
< content-length: 0
< date: Thu, 06 Jul 2023 13:28:58 GMT
< x-envoy-upstream-service-time: 7
< server: istio-envoy
<
* Connection #0 to host event.xks.com left intact

#3.查看日志是否接收到
[root@xianchaomaster1 ~]# kubectl logs -f event-display-00001-deployment-84596bcb8d-h9qlq
Defaulted container "user-container" out of: user-container, queue-proxy
☁️  cloudevents.Event
Context Attributes,
  specversion: 1.0
  type: com.magedu.sayhievent
  source: sendoff
  id: say-hello
  time: 2022-10-02T11:36:56.7181741Z
  datacontenttype: application/json
Data,
  {
    "msg": "Hello MageEdu Knative from External!"
  }

#内部进行访问
#1.启动一个pod
[root@xianchaonode1 ~]# crictl pull ikubernetes/admin-box:v1.2
[root@xianchaomaster1 ~]# kubectl run client-$RANDOM --image=ikubernetes/admin-box:v1.2 --restart=Never -it --command -- /bin/sh
~$ curl -v "http://event-display.default.svc.cluster.local" -X POST \
-H "Ce-Id: say-hello" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: com.magedu.sayhievent" \
-H "Ce-Time: 2022-10-02T11:35:56.7181741Z" \
-H "Ce-Source: sendoff" \
-H "Content-Type: application/json" \
-d '{"msg":"Hello MageEdu Knative from Internal!"}'

Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 10.96.27.221:80...
* TCP_NODELAY set
* Connected to event-display.default.svc.cluster.local (10.96.27.221) port 80 (#0)
> POST / HTTP/1.1
> Host: event-display.default.svc.cluster.local
> User-Agent: curl/7.67.0
> Accept: */*
> Ce-Id: say-hello
> Ce-Specversion: 1.0
> Ce-Type: com.magedu.sayhievent
> Ce-Time: 2022-10-02T11:35:56.7181741Z
> Ce-Source: sendoff
> Content-Type: application/json
> Content-Length: 46
>
* upload completely sent off: 46 out of 46 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 0
< date: Thu, 06 Jul 2023 13:33:16 GMT
< x-envoy-upstream-service-time: 1
< server: istio-envoy
<
* Connection #0 to host event-display.default.svc.cluster.local left intact

#3.查看日志是否接收到
[root@xianchaomaster1 ~]# kubectl logs -f event-display-00001-deployment-84596bcb8d-h9qlq
☁️  cloudevents.Event
Context Attributes,
  specversion: 1.0
  type: com.magedu.sayhievent
  source: sendoff
  id: say-hello
  time: 2022-10-02T11:35:56.7181741Z
  datacontenttype: application/json
Data,
  {
    "msg": "Hello MageEdu Knative from Internal!"
  }

Eventing的逻辑组件

#Eventing API群组及相应的CRD
    ◼ sources.knative.dev # 声明式配置Event Source的API,提供了四个开箱即用的Source;
        ◆ApiServerSource:监听Kubernetes API事件
        ◆ContainerSource:在特定的容器中发出针对Sink的事件
        ◆PingSource:以周期性任务(cron)的方式生具有固定负载的事件
        ◆SinkBinding:链接任何可寻址的Kubernetes资源,以接收来自可能产生事件的任何其他Kubernetes资源的事件
    ◼ eventing.knative.dev # 声明式配置“事件网格模型”的API
        ◆Broker
        ◆EventType
        ◆Trigger
    ◼ messaging.knative.dev # 声明式配置“事件管道模型”的API
        ◆Channel
        ◆Subscription
    ◼ flows.knative.dev # 事件流模型,即事件是以并行还是串行的被多个函数处理
        ◆Parallel
        ◆Sequence



[root@xianchaomaster1 ~]# kubectl api-resources --api-group=sources.knative.dev
NAME               SHORTNAMES   APIVERSION               NAMESPACED   KIND
apiserversources                sources.knative.dev/v1   true         ApiServerSource
containersources                sources.knative.dev/v1   true         ContainerSource
pingsources                     sources.knative.dev/v1   true         PingSource
sinkbindings                    sources.knative.dev/v1   true         SinkBinding

[root@xianchaomaster1 ~]# kubectl api-resources --api-group=eventing.knative.dev
NAME         SHORTNAMES   APIVERSION                     NAMESPACED   KIND
brokers                   eventing.knative.dev/v1        true         Broker
eventtypes                eventing.knative.dev/v1beta1   true         EventType
triggers                  eventing.knative.dev/v1        true         Trigger

[root@xianchaomaster1 ~]# kubectl api-resources --api-group=messaging.knative.dev
NAME               SHORTNAMES   APIVERSION                 NAMESPACED   KIND
channels           ch           messaging.knative.dev/v1   true         Channel
inmemorychannels   imc          messaging.knative.dev/v1   true         InMemoryChannel
subscriptions      sub          messaging.knative.dev/v1   true         Subscription

[root@xianchaomaster1 ~]# kubectl api-resources --api-group=flows.knative.dev
NAME        SHORTNAMES   APIVERSION             NAMESPACED   KIND
parallels                flows.knative.dev/v1   true         Parallel
sequences                flows.knative.dev/v1   true         Sequence

事件与Knative Eventing

#Knative Eventing
    ◼ 负责为事件的生产和消费提供基础设施,可将事件从生产者路由到目标消费者,从而让开发人员能够使用
#事件驱动架构
    ◼ 各资源者是松散耦合关系,可分别独立开发和部署
    ◼ 遵循CloudEvents规范

 

posted @ 2023-07-06 16:19  しみずよしだ  阅读(221)  评论(0)    收藏  举报