This guide describes the steps required to create, manage, and delete an ApiServerSource using YAML files.
-
You will need to have a Knative Serving and Eventing installation.
-
You will need to have created the
default
broker in the same namespace as the one defined in the ApiServerSource YAML file.
-
Create a service account, role, and role binding for the ApiServerSource.
You can do this by creating a file named
authentication.yaml
and copying the following sample code into it:apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default (1) --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default (1) rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default (1) roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default (1)
-
Change this namespace to the namespace that you have selected for installing ApiServerSource.
NoteIf you want to re-use an existing service account with the appropriate permissions, you must modify the
authentication.yaml
for that service account.After you have created the
authentication.yaml
file, apply it by entering the following command:$ oc apply --filename authentication.yaml
-
-
Create an ApiServerSource event source.
You can do this by creating a file named
k8s-events.yaml
and copying the following sample code into it:apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: name: testevents spec: serviceAccountName: events-sa mode: Resource resources: - apiVersion: v1 kind: Event sink: ref: apiVersion: eventing.knative.dev/v1beta1 kind: Broker name: default
After you have created the
k8s-events.yaml
file, apply it by entering the following command:$ oc apply --filename k8s-events.yaml
-
To check that the ApiServerSource is set up correctly, create a Knative service that dumps incoming messages to its log.
Copy the following sample YAML into a file named
service.yaml
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:v0.13.2
After you have created the
service.yaml
file, apply it by entering the following command:$ oc apply --filename service.yaml
-
Create a trigger from the
default
broker to filter events to the service created in the previous step.You can create the trigger by creating a file named
trigger.yaml
and copying the following sample code into it:apiVersion: eventing.knative.dev/v1alpha1 kind: Trigger metadata: name: event-display-trigger namespace: default spec: subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
After you have created the
trigger.yaml
file, apply it by entering the following command:$ oc apply --filename trigger.yaml
-
Create events by launching a pod in the default namespace. You can do this by entering the following command:
$ oc create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
-
Check that the controller is mapped correctly by entering the following command and inspecting the output:
$ oc get apiserversource.sources.knative.dev testevents -o yaml
The output should be similar to:
apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: annotations: creationTimestamp: "2020-04-07T17:24:54Z" generation: 1 name: testevents namespace: default resourceVersion: "62868" selfLink: /apis/sources.knative.dev/v1alpha1/namespaces/default/apiserversources/testevents2 uid: 1603d863-bb06-4d1c-b371-f580b4db99fa spec: mode: Resource resources: - apiVersion: v1 controller: false controllerSelector: apiVersion: "" kind: "" name: "" uid: "" kind: Event labelSelector: {} serviceAccountName: events-sa sink: ref: apiVersion: eventing.knative.dev/v1beta1 kind: Broker name: default
You can verify that the Kubernetes events were sent into the Knative eventing system by looking at the message dumper function logs.
You can view the message dumper function logs by entering the following commands:
$ oc get pods $ oc logs $(oc get pod -o name | grep event-display) -c user-container
The logs should contain lines similar to the following:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... }
You can delete the ApiServerSource, trigger, service, service account, cluster role, and cluster binding created in this guide by entering the following oc
commands:
$ oc delete --filename trigger.yaml $ oc delete --filename service.yaml $ oc delete --filename k8s-events.yaml $ oc delete --filename authentication.yaml