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 ownChannel
or use the provided sample, which creates a channel calledtestchannel
. If you use your ownChannel
with a different name, then you will need to alter other commands later.
kubectl -n default apply -f channel.yaml
- Create a Service Account that the
Receive Adapter
runs as. TheReceive Adapater
watches 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 -f 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 -f k8s-events.yaml
In 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
KubernetesEventSource
is pointing at aChannel
other thantestchannel
, modifysubscription.yaml
by replacingtestchannel
with thatChannel
's name. - Deploy
subscription.yaml
.
kubectl apply -f subscription.yaml
Create events by launching a pod in the default namespace. Create a busybox container
kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
Once the shell comes up, just exit it and kill the pod.
kubectl delete pod busybox
We will verify that the kubernetes events were sent into the Knative eventing system by looking at our message dumper function logsIf 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-container
You 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