Kubernetes Event Source example shows how to wire kubernetes cluster events for consumption by a function that has been implemented as a Knative Service.
- Setup Knative Serving.
- Setup Knative Eventing.
- Create a
Channel. You can use your ownChannelor use the provided sample, which creates a channel calledtestchannel. If you use your ownChannelwith a different name, then you will need to alter other commands later.
kubectl --namespace default apply --filename channel.yaml- Create a Service Account that the
Receive Adapterruns as. TheReceive Adapaterwatches for Kubernetes events and forwards them to the Knative Eventing Framework. If you want to re-use an existing Service Account with the appropriate permissions, you need to modify theserviceaccount.yaml.
kubectl apply --filename serviceaccount.yaml- In order to receive events, you have to create a concrete Event Source for a
specific namespace. If you are wanting to consume events from a differenet
namespace or using a different
Service Account, you need to modify the yaml accordingly.
kubectl apply --filename k8s-events.yamlIn order to check the KubernetesEventSource is fully working, we will create a
simple Knative Service that dumps incoming messages to its log and create a
Subscription from the Channel to that Knative Service.
- If the deployed
KubernetesEventSourceis pointing at aChannelother thantestchannel, modifysubscription.yamlby replacingtestchannelwith thatChannel's name. - Deploy
subscription.yaml.
kubectl apply --filename subscription.yamlCreate events by launching a pod in the default namespace. Create a busybox container
kubectl run -i --tty busybox --image=busybox --restart=Never -- shOnce the shell comes up, just exit it and kill the pod.
kubectl delete pod busyboxWe will verify that the kubernetes events were sent into the Knative eventing system by looking at our message dumper function logs. If you deployed the Subscriber, then continue using this section. If not, then you will need to look downstream yourself.
kubectl get pods
kubectl logs -l serving.knative.dev/service=message-dumper -c user-containerYou should see log lines similar to:
{"metadata":{"name":"busybox.15644359eaa4d8e7","namespace":"default","selfLink":"/api/v1/namespaces/default/events/busybox.15644359eaa4d8e7","uid":"daf8d3ca-e10d-11e8-bf3c-42010a8a017d","resourceVersion":"7840","creationTimestamp":"2018-11-05T15:17:05Z"},"involvedObject":{"kind":"Pod","namespace":"default","name":"busybox","uid":"daf645df-e10d-11e8-bf3c-42010a8a017d","apiVersion":"v1","resourceVersion":"681388"},"reason":"Scheduled","message":"Successfully assigned busybox to gke-knative-eventing-e2e-default-pool-575bcad9-vz55","source":{"component":"default-scheduler"},"firstTimestamp":"2018-11-05T15:17:05Z","lastTimestamp":"2018-11-05T15:17:05Z","count":1,"type":"Normal","eventTime":null,"reportingComponent":"","reportingInstance":""}
Ce-Source: /apis/v1/namespaces/default/pods/busybox
{"metadata":{"name":"busybox.15644359f59f72f2","namespace":"default","selfLink":"/api/v1/namespaces/default/events/busybox.15644359f59f72f2","uid":"db14ff23-e10d-11e8-bf3c-42010a8a017d","resourceVersion":"7841","creationTimestamp":"2018-11-05T15:17:06Z"},"involvedObject":{"kind":"Pod","namespace":"default","name":"busybox","uid":"daf645df-e10d-11e8-bf3c-42010a8a017d","apiVersion":"v1","resourceVersion":"681389"},"reason":"SuccessfulMountVolume","message":"MountVolume.SetUp succeeded for volume \"default-token-pzr6x\" ","source":{"component":"kubelet","host":"gke-knative-eventing-e2e-default-pool-575bcad9-vz55"},"firstTimestamp":"2018-11-05T15:17:06Z","lastTimestamp":"2018-11-05T15:17:06Z","count":1,"type":"Normal","eventTime":null,"reportingComponent":"","reportingInstance":""}
Ce-Source: /apis/v1/namespaces/default/pods/busybox