GitLab-Source-2
1,事件简单测试
root@master03:~# kubectl get route -nevent-demo NAME URL READY REASON event-display http://event-display.event-demo.example.com True gitlabsource-demo-p8wf4 http://gitlabsource-demo-p8wf4.event-demo.example.com True
webhook--测试-push-event
root@master03:~# kubectl logs -f event-display-00001-deployment-57fc7d44f5-98mpw -c user-container -nevent-demo
Extensions,
comgitlabevent: Push Hook
Data,
{
"object_kind": "push",
kubectl run client777 --image=ikubernetes/admin-box:latest -it --rm --restart=Never --command -- /bin/bash
root@client777 /# apk add git
root@client777 /# git clone http://code.gitlab.svc.cluster.local/root/myproject.git
root@client777 myproject# git config --global user.name MageEdu
root@client777 myproject# git config --global user.email mage@magedu.com
root@client777 myproject# vi README.md
root@client777 myproject# git add .
root@client777 myproject# git commit -m "V0.0.1"
[main f16bb1b] V0.0.1
1 file changed, 1 insertion(+), 1 deletion(-)
root@client777 myproject# git push origin
Username for 'http://code.gitlab.svc.cluster.local': root
Password for 'http://root@code.gitlab.svc.cluster.local': #magedu.com
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 248 bytes | 248.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://code.gitlab.svc.cluster.local/root/myproject.git
606224e..f16bb1b main -> main
生成事件
root@master03:~# kubectl logs -f event-display-00001-deployment-57fc7d44f5-98mpw -c user-container -nevent-demo
"name": "MageEdu",
"email": "mage@magedu.com"
2,pub/sub
curl Source > Channels > Subscriptions > sink
root@master03:~# kubectl get cm -nknative-eventing NAME DATA AGE config-br-default-channel 1 46h config-br-defaults 1 46h config-features 6 46h config-imc-event-dispatcher 2 46h config-kreference-mapping 1 46h config-leader-election 1 46h config-logging 3 46h config-observability 1 46h config-ping-defaults 1 46h config-tracing 1 46h default-ch-webhook 1 46h istio-ca-root-cert 1 46h kube-root-ca.crt 1 46h root@master03:~# kubectl get cm config-br-default-channel -o yaml -nknative-eventing apiVersion: v1 data: channel-template-spec: | apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel
root@master03:~# kubectl get cm config-br-defaults -o yaml -nknative-eventing apiVersion: v1 data: default-br-config: | clusterDefault: brokerClass: MTChannelBasedBroker
root@master03:~# kn channel create --help
root@master03:~# kn channel create imc01 --type messaging.knative.dev:v1:InMemoryChannel
root@master03:~# kn channel list NAME TYPE URL AGE READY REASON imc01 InMemoryChannel http://imc01-kn-channel.default.svc.cluster.local 19s True
root@master03:~# kn subscription create --help
root@master03:~# kn subscription create sub01 --channel imc01 --sink ksvc:event-display #:event-demo 名称空间 Subscription 'sub01' created in namespace 'default'.
测试
同一名称空间
root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# cat 02-kservice-event-display.yaml --- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display # namespace: event-demo spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "1" spec: containers: - image: ikubernetes/event_display ports: - containerPort: 8080 root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# cat 03-secret-token.yaml apiVersion: v1 kind: Secret metadata: name: gitlabsecret # namespace: event-demo type: Opaque stringData: accessToken: 2yeDGpCLDW4_1Sp4taA8 secretToken: JQ1ambOFdXGZPFWsOov0iQ root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# cat 04-GitLabSource-to-knative-service.yaml apiVersion: sources.knative.dev/v1alpha1 kind: GitLabSource metadata: name: gitlabsource-demo # namespace: event-demo spec: eventTypes: - push_events - issues_events - merge_requests_events - tag_push_events projectUrl: http://code.gitlab.svc.cluster.local/root/myproject sslverify: false accessToken: secretKeyRef: name: gitlabsecret key: accessToken secretToken: secretKeyRef: name: gitlabsecret key: secretToken sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
root@master03:~# kn channel list NAME TYPE URL AGE READY REASON imc01 InMemoryChannel http://imc01-kn-channel.default.svc.cluster.local 6m15s True
curl -v "http://imc01-kn-channel.default.svc.cluster.local" \ -X POST \ -H "Ce-Id: 0001" \ -H "Ce-Specversion: 1.0" \ -H "Ce-Type: com.magedu.file.image" \ -H "Ce-Source: Curl" \ -H "Content-Type: application/json" \ -d '{"msg":"An Event to ImcChnel"}'
root@master03:~# kubectl logs -f event-display-00001-deployment-5789f8f444-58sbv -c user-container ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.file.image source: Curl id: 1111 datacontenttype: application/json Data, { "msg": "An Event to ImcChnel" }
kn subscription create sub02 --channel imc01 --sink ksvc:event-display-02
一对多
root@master03:~# kubectl logs -f event-display-02-00001-deployment-6cb5c7d848-xqtbb -c user-container ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.file.image source: Curl id: 1111 datacontenttype: application/json Data, { "msg": "An Event to ImcChnel" }
删除
root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# kn subscription list NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON sub01 Channel:imc01 ksvc:event-display True sub02 Channel:imc01 ksvc:event-display-02 True root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# kn subscription delete sub01 Subscription 'sub01' deleted in namespace 'default'. root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# kn subscription delete sub02 Subscription 'sub02' deleted in namespace 'default'. root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# kn channel list NAME TYPE URL AGE READY REASON imc01 InMemoryChannel http://imc01-kn-channel.default.svc.cluster.local 44m True root@master01:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# kn channel delete imc01 Channel 'imc01' deleted in namespace 'default'.
3,GitLabSource ,Channel
root@master01:~# kubectl get channel NAME URL AGE READY REASON channel.messaging.knative.dev/imc01 http://imc01-kn-channel.default.svc.cluster.local 7m32s True NAME URL AGE READY REASON inmemorychannel.messaging.knative.dev/imc01 http://imc01-kn-channel.default.svc.cluster.local 7m32s True
root@master01:~# kubectl explain InMemoryChannel
KIND: InMemoryChannel
VERSION: messaging.knative.dev/v1 #fuzhi
root@master02:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# cat 04-GitLabSource-to-knative-service.yaml apiVersion: sources.knative.dev/v1alpha1 kind: GitLabSource metadata: name: gitlabsource-demo-02 #xiugai # namespace: event-demo spec: eventTypes: - push_events - issues_events - merge_requests_events - tag_push_events projectUrl: http://code.gitlab.svc.cluster.local/root/myproject sslverify: false accessToken: secretKeyRef: name: gitlabsecret key: accessToken secretToken: secretKeyRef: name: gitlabsecret key: secretToken sink: ref: apiVersion: messaging.knative.dev/v1 #serving.knative.dev/v1 kind: InMemoryChannel #Service name: imc01 #event-display namespace: default #event-demo
root@master02:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# kubectl get GitLabSource NAME READY REASON SINK AGE gitlabsource-demo-02 True http://imc01-kn-channel.default.svc.cluster.local 3m
http://gitlabsource-demo-02-87mzp.default. svc.cluster.local
logs 1 ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.sources.gitlab.push source: http://code.gitlab.svc.cluster.local/root/myproject id: 0036816d-c03f-40f7-9e3b-4eacba52acaa time: 2022-03-09T15:49:29.012466742Z datacontenttype: application/json Extensions, comgitlabevent: Push Hook logs 2 ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.sources.gitlab.push source: http://code.gitlab.svc.cluster.local/root/myproject id: 0036816d-c03f-40f7-9e3b-4eacba52acaa time: 2022-03-09T15:49:29.012466742Z datacontenttype: application/json Extensions, comgitlabevent: Push Hook
4, Knative的Broker/Trigger 消息传递框架
root@master01:~# kn broker create default Broker 'default' successfully created in namespace 'default'. root@master01:~# kn broker list NAME URL 名称空间/名字 AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/default/default 3s 6 OK / 6 True
root@master01:~# kubectl explain broker
KIND: Broker
VERSION: eventing.knative.dev/v1
root@master02:/tmp# cat 04-GitLabSource-to-knative-service.yaml apiVersion: sources.knative.dev/v1alpha1 kind: GitLabSource metadata: name: gitlabsource-demo-broker #xiugai # namespace: event-demo spec: eventTypes: - push_events - issues_events - merge_requests_events - tag_push_events projectUrl: http://code.gitlab.svc.cluster.local/root/myproject sslverify: false accessToken: secretKeyRef: name: gitlabsecret key: accessToken secretToken: secretKeyRef: name: gitlabsecret key: secretToken sink: ref: apiVersion: eventing.knative.dev/v1 #xiugai kind: Broker name: default
root@master02:/tmp# kubectl get GitLabSource NAME READY REASON SINK AGE gitlabsource-demo-broker True http://broker-ingress.knative-eventing.svc.cluster.local/default/default 62s
trigger部署
root@master02:/tmp# kn trigger create push --broker default --filter type=dev.knative.sources.gitlab.push --sink ksvc:event-display Trigger 'push' successfully created in namespace 'default'. root@master02:/tmp# kn trigger create issue --broker default --filter type=dev.knative.sources.gitlab.issue --sink ksvc:event-display-02 Trigger 'issue' successfully created in namespace 'default'.
root@master02:/tmp# kn trigger list NAME BROKER SINK AGE CONDITIONS READY REASON issue default ksvc:event-display-02 108s 6 OK / 6 True push default ksvc:event-display 2m27s 6 OK / 6 True
http://gitlabsource-demo-broker-b78cr.default.svc.cluster.local
root@master03:~# kubectl logs -f event-display-00001-deployment-666648b745-mmnkp -c user-container ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.sources.gitlab.push
root@master03:~# kubectl logs -f event-display-02-00001-deployment-6cb5c7d848-xrcr6 -c user-container ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.sources.gitlab.issue
5,Flow
5.1 Sequence
root@master03:~# kubectl create ns flow namespace/flow created
root@master03:~# kn service apply sq-appender-01 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-01" -nflow root@master03:~# kn service apply sq-appender-02 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-02" -nflow root@master03:~# kn service apply sq-appender-03 --image ikubernetes/appender --env MESSAGE=" - Handled by SQ-03" -nflow
root@master02:/opt/knative-in-practise/eventing/sources/05-gitlabsource-to-knative-service# cat 02-kservice-event-display.yaml --- apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: flow #event-demo spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "1" spec: containers: - image: ikubernetes/event_display ports: - containerPort: 8080
root@master01:~# kn service list -nflow NAME URL LATEST AGE CONDITIONS READY REASON event-display http://event-display.flow.example.com event-display-00001 40s 3 OK / 3 True sq-appender-01 http://sq-appender-01.flow.example.com sq-appender-01-00001 3m39s 3 OK / 3 True sq-appender-02 http://sq-appender-02.flow.example.com sq-appender-02-00001 2m43s 3 OK / 3 True sq-appender-03 http://sq-appender-03.flow.example.com sq-appender-03-00001 2m11s 3 OK / 3 True
root@master02:/opt/knative-in-practise/eventing/flow/sequence-demo# cat 04-sequence-demo.yaml apiVersion: flows.knative.dev/v1 kind: Sequence metadata: name: sq-demo namespace: flow #event-demo 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
root@master02:/opt/knative-in-practise/eventing/flow/sequence-demo# kubectl get Sequence -A NAMESPACE NAME URL AGE READY REASON flow sq-demo http://sq-demo-kn-sequence-0-kn-channel.flow.svc.cluster.local 14s True
root@client777 ~# curl -v "http://sq-demo-kn-sequence-0-kn-channel.flow.svc.cluster.local" -X POST -H "Content-Type: application/cloudevents+json" -d '{"id": "0", "specversion": "1.0", "type": "com.magedu.sayhi", "source": "Curl", "data": {"message":"Hello Knative Eventing Flow"}}'
root@master03:~# kubectl logs -f event-display-00001-deployment-f8d595c65-qrscr -nflow -c user-container ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.sayhi source: Curl id: 0 time: 2022-03-09 datacontenttype: application/json Data, { "id": 0, "message": "Hello Knative Eventing Flow - Handled by SQ-01 - Handled by SQ-02 - Handled by SQ-03" }
5.2 Parallel Flow 示例
root@master02:/opt/knative-in-practise/eventing/flow/parallel-demo# cat 05-parallel.yaml --- apiVersion: flows.knative.dev/v1 kind: Parallel metadata: name: filetype-parallel namespace: para #event-demo spec: channelTemplate: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel branches: - filter: ref: apiVersion: serving.knative.dev/v1 kind: Service name: image-filter subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: para-appender-image - filter: ref: apiVersion: serving.knative.dev/v1 kind: Service name: text-filter subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: para-appender-text reply: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
root@master01:/opt/knative-in-practise/eventing/flow/parallel-demo# kubectl get parallels -npara NAME URL AGE READY REASON filetype-parallel http://filetype-parallel-kn-parallel-kn-channel.para.svc.cluster.local 3m51s True
curl -v "http://filetype-parallel-kn-parallel-kn-channel.para.svc.cluster.local" \ -X POST \ -H "Ce-Id: 00001" \ -H "Ce-Specversion: 1.0" \ -H "Ce-Type: com.magedu.file.image" \ -H "Ce-Source: Curl" \ -H "Content-Type: application/json" \ -d '{"message": "A event to parallel"}'
curl -v "http://filetype-parallel-kn-parallel-kn-channel.para.svc.cluster.local" \ -X POST \ -H "Ce-Id: 00002" \ # -H "Ce-Specversion: 1.0" \ -H "Ce-Type: com.magedu.file.text" \ # -H "Ce-Source: Curl" \ -H "Content-Type: application/json" \ -d '{"message": "A event to parallel"}'
root@master01:~# kubectl logs -f event-display-00001-deployment-77f856bd76-6cfph -cuser-container -npara ☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.file.image source: Curl id: 00001 time: 2022 datacontenttype: application/json Data, { "id": 0, "message": "A event to parallel - filetype/Image" }
☁️ cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.file.text source: Curl id: 00002 time: datacontenttype: application/json Data, { "id": 0, "message": "A event to parallel - filetype/Text" }