knative-eventing-ContainerSource
文档 https://knative.dev/docs/install/yaml-install/eventing/install-eventing-with-yaml/#prerequisites
部署eventing
root@master02:/opt/knative-in-practise/knative-deploy-v1.2/eventing# kubectl apply -f eventing-crds.yaml
root@master02:/opt/knative-in-practise/knative-deploy-v1.2/eventing# kubectl apply -f eventing-core.yaml
root@master03:~# kubectl get po -nknative-eventing knative-eventing eventing-controller-85b648d8f8-tww8l 1/1 Running 0 8m13s knative-eventing eventing-webhook-7849bcf55c-tbvzt 1/1 Running 0 7m33s
kn service create event-display --image ikubernetes/event_display --port 8080 --scale-min 1 #创建event-disolay
default event-display-00001-deployment-5754688b84-6hm4n 3/3 Running 0 51m
root@client /# 测试
curl -v "http://event-display.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 kafkaChnel"}'
< HTTP/1.1 200 OK
Install a default Channel (messaging) layer
Install a Broker layer
结合
In-Memory (standalone) in-memory-channel.yaml
MT-Channel-based mt-channel-broker.yaml
root@master02:/opt/knative-in-practise/knative-deploy-v1.2/eventing# cat in-memory-channel.yaml |grep gcr image: gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_controller:latest value: gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher:latest image: gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher:latest root@master02:/opt/knative-in-practise/knative-deploy-v1.2/eventing# cat mt-channel-broker.yaml |grep gcr image: gcr.io/knative-releases/knative.dev/eventing/cmd/broker/filter:latest image: gcr.io/knative-releases/knative.dev/eventing/cmd/broker/ingress:latest image: gcr.io/knative-releases/knative.dev/eventing/cmd/mtchannel_broker:latest
knative-eventing imc-controller 1/1 1 1 2m35s knative-eventing imc-dispatcher 1/1 1 1 2m35s knative-eventing mt-broker-controller 1/1 1 1 2m22s knative-eventing mt-broker-filter 1/1 1 1 2m22s knative-eventing mt-broker-ingress 1/1 1 1 2m22s
root@master01:~# docker images |grep gcr|grep in_memory gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_controller latest 3ead485a4bda 4 weeks ago 53.1MB gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher latest 037a839b523c 4 weeks ago 53.2MB root@master01:~# docker images |grep gcr|grep broker gcr.io/knative-releases/knative.dev/eventing/cmd/broker/ingress latest 342566a0f448 4 weeks ago 51.1MB gcr.io/knative-releases/knative.dev/eventing/cmd/broker/filter latest 1ed97edaf933 4 weeks ago 51MB gcr.io/knative-releases/knative.dev/eventing/cmd/mtchannel_broker latest e83894240df2 4 weeks ago 52.5MB
root@master01:~# 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@master01:~# kubectl explain pingsources.spec
root@master01:~# kubectl logs -f event-display-00001-deployment-5754688b84-6hm4n -c user-container #查看事件 ?? cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.file.image source: Curl id: 0001 datacontenttype: application/json Data, { "msg": "An Event to kafkaChnel" } ?? cloudevents.Event Context Attributes, specversion: 1.0 type: com.magedu.file.image source: Curl id: 0001 datacontenttype: application/json Data, { "msg": "An Event to kafkaChnel" } ...
root@master02:~# kn source ping create pingsource01 --schedule "* * * * *" --data '{"message": "Event from Ping}' --sink ksvc:event-display Ping source 'pingsource01' created in namespace 'default'. root@master02:~# kn source ping list NAME SCHEDULE SINK AGE CONDITIONS READY REASON pingsource01 * * * * * ksvc:event-display 21s 3 OK / 3 True
root@master02:~# kubectl get pingsources pingsource01 -o yaml #每分钟一次 apiVersion: sources.knative.dev/v1 kind: PingSource metadata: annotations: sources.knative.dev/creator: admin sources.knative.dev/lastModifier: admin creationTimestamp: "2022-02-28T13:04:52Z" generation: 1 name: pingsource01 namespace: default resourceVersion: "127687" uid: c5042748-c500-418f-992e-ce73206fea58 spec: data: '{"message": "Event from Ping}' schedule: '* * * * *' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display namespace: default status: ceAttributes: - source: /apis/v1/namespaces/default/pingsources/pingsource01 type: dev.knative.sources.ping conditions: - lastTransitionTime: "2022-02-28T13:04:54Z" status: "True" type: Deployed - lastTransitionTime: "2022-02-28T13:04:54Z" status: "True" type: Ready - lastTransitionTime: "2022-02-28T13:04:53Z" status: "True" type: SinkProvided observedGeneration: 1 sinkUri: http://event-display.default.svc.cluster.local
root@master02:~# kn source ping describe pingsource01 Name: pingsource01 Namespace: default Annotations: sources.knative.dev/creator=admin, sources.knative.dev/lastModifier=admin Age: 6m Schedule: * * * * * Data: {"message": "Event from Ping} Sink: Name: event-display Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 6m ++ Deployed 6m ++ SinkProvided 6m
root@master02:~# kn source ping delete pingsource01 Ping source 'pingsource01' deleted in namespace 'default'
部署03事件源到default名称空间下
root@master02:/opt/knative-in-practise/eventing/sources/03-containersource-to-knative-service# kubectl apply -f . root@master02:/opt/knative-in-practise/eventing/sources/03-containersource-to-knative-service# cat 01-namespace.yaml kind: Namespace apiVersion: v1 metadata: name: event-demo --- root@master02:/opt/knative-in-practise/eventing/sources/03-containersource-to-knative-service# cat 03-containersource-to-event-display.yaml apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: containersource-heartbeat #namespace: event-demo #部署到当前名称空间下,每秒一个时间 spec: template: spec: containers: - image: ikubernetes/containersource-heartbeats:latest name: heartbeats env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display root@master02:/opt/knative-in-practise/eventing/sources/03-containersource-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: spec: containers: - image: ikubernetes/event_display ports: - containerPort: 8080
event-demo containersource-heartbeat-deployment 1/1 1 1 8m35s #查看 event-demo event-display-00001-deployment 1/1 1 1 79s
root@master01:~# kn source container list -A NAMESPACE NAME IMAGE SINK AGE CONDITIONS READY REASON event-demo containersource-heartbeat ikubernetes/containersource-heartbeats:latest ksvc:event-display 25m 3 OK / 3 True root@master01:~# kn source container describe containersource-heartbeat -nevent-demo Name: containersource-heartbeat Namespace: event-demo Annotations: sources.knative.dev/creator=admin, sources.knative.dev/lastModifier=admin Age: 25m Container: Image: ikubernetes/containersource-heartbeats:latest Env: POD_NAME: [ref] POD_NAMESPACE: [ref] Sink: Name: event-display Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 17m ++ ReceiveAdapterReady 17m ++ SinkBindingReady 17m
root@master02:/opt/knative-in-practise/eventing/sources/03-containersource-to-knative-service# kubectl get po NAME READY STATUS RESTARTS AGE containersource-heartbeat-deployment-77589687bb-dwtkk 2/2 Running 0 4m42s 创建后 event-display-00001-deployment-5754688b84-6hm4n 3/3 Running 3 23h 查看每5秒一次
root@master01:~# kubectl logs -f event-display-00001-deployment-5754688b84-6hm4n -c user-container
?? cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.eventing.samples.heartbeat source: https://knative.dev/eventing-contrib/cmd/heartbeats/#default/containersource-heartbeat-deployment-77589687bb-dwtkk id: d4d8f396-d3cf-486e-a52c-4c667493834d time: 2022-02-28T14:21:11.836136403Z datacontenttype: application/json Extensions, beats: true heart: yes the: 42 Data, { "id": 20, "label": "" } ?? cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.eventing.samples.heartbeat source: https://knative.dev/eventing-contrib/cmd/heartbeats/#default/containersource-heartbeat-deployment-77589687bb-dwtkk id: fb35202f-aed5-4475-99d8-0095eebae138 time: 2022-02-28T14:21:16.837356497Z datacontenttype: application/json Extensions, beats: true heart: yes the: 42 Data, { "id": 21, "label": "" }
root@master01:~# root@master01:~# kn source container list vent-display 21m 3 OK / 3 Trueroot@master01:~#: command not found root@master01:~# NAME IMAGE SINK AGE CONDITIONS READY REASON NAME: command not found root@master01:~# containersource-heartbeat ikubernetes/containersource-heartbeats:latest ksvc:event-display 21m 3 OK / 3 True^C root@master01:~# kn source container list NAME IMAGE SINK AGE CONDITIONS READY REASON containersource-heartbeat ikubernetes/containersource-heartbeats:latest ksvc:event-display 21m 3 OK / 3 True root@master01:~# kn source container delete containersource-heartbeat ContainerSourcd 'containersource-heartbeat' deleted in namespace 'default'.
apiserversource
root@master02:/opt/knative-in-practise/eventing/sources/04-apiserversource-to-knative-service# cat 01-namespace.yaml kind: Namespace apiVersion: v1 metadata: name: event-demo --- root@master02:/opt/knative-in-practise/eventing/sources/04-apiserversource-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@master02:/opt/knative-in-practise/eventing/sources/04-apiserversource-to-knative-service# cat 03-serviceaccount-and-rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: pod-watcher namespace: event-demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-reader namespace: event-demo rules: - apiGroups: - "" resources: - pods verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pod-reader namespace: event-demo roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: pod-reader subjects: - kind: ServiceAccount name: pod-watcher namespace: event-demo root@master02:/opt/knative-in-practise/eventing/sources/04-apiserversource-to-knative-service# cat 04-ApiServerSource-to-knative-service.yaml apiVersion: sources.knative.dev/v1 kind: ApiServerSource metadata: name: pods-event namespace: event-demo spec: serviceAccountName: pod-watcher mode: Reference resources: - apiVersion: v1 kind: Pod #selector: # matchLabels: # app: demoapp sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
root@master02:/opt/knative-in-practise/eventing/sources/04-apiserversource-to-knative-service# kubectl apply -f .
root@master02:/opt/knative-in-practise/eventing/sources/04-apiserversource-to-knative-service# kubectl get po -nevent-demo NAME READY STATUS RESTARTS AGEevent-display-00001-deployment-dccb48cd6-zclkq 2/2 Running 0 13s
apiserversource-pods-event-03c9ab61-82ca-4836-b283-0bd4179b84xc 1/1 Running 0 52s
root@master01:~# kubectl logs -f event-display-00001-deployment-dccb48cd6-zclkq -c user-container -nevent-demo ?? cloudevents.Event Context Attributes, specversion: 1.0 type: dev.knative.apiserver.ref.update source: https://10.100.0.1:443 subject: /apis/v1/namespaces/event-demo/pods/apiserversource-pods-event-03c9ab61-82ca-4836-b283-0bd4179x2tcn id: 7a1700c7-6188-480e-bf03-548193940a26 time: 2022-02-28T15:00:05.155810224Z datacontenttype: application/json Extensions, kind: Pod name: apiserversource-pods-event-03c9ab61-82ca-4836-b283-0bd4179x2tcn namespace: event-demo Data, { "kind": "Pod", "namespace": "event-demo", "name": "apiserversource-pods-event-03c9ab61-82ca-4836-b283-0bd4179x2tcn", "apiVersion": "v1" }
kubectl create deploy demoapp --image=ikubernetes/demoapp -nevent-demo
?? cloudevents.Event 生成事件 Context Attributes, specversion: 1.0 type: dev.knative.apiserver.ref.delete source: https://10.100.0.1:443 subject: /apis/v1/namespaces/event-demo/pods/demoapp-745cfdd5c8-vhvrt id: aa2b206a-9a65-45f1-a2bb-56a7c0286db1 time: 2022-02-28T15:09:41.642917393Z datacontenttype: application/json Extensions, kind: Pod name: demoapp-745cfdd5c8-vhvrt namespace: event-demo Data, { "kind": "Pod", "namespace": "event-demo", "name": "demoapp-745cfdd5c8-vhvrt", "apiVersion": "v1" }