$ oc label namespace <namespace> bindings.knative.dev/include=true
Sink binding is used to connect event producers, or event sources, to an event consumer, or event sink, for example, a Knative service or application.
Before developers can use sink binding, cluster administrators must label the namespace that will be configured in the
|
This guide describes the steps required to create, manage, and delete a sink binding instance using the kn
CLI.
You have Knative Serving and Eventing installed.
You have the the kn
CLI installed.
The following procedure requires you to create YAML files. If you change the names of the YAML files from those used in the examples, you must ensure that you also update the corresponding CLI commands. |
Before developers can use sink binding, cluster administrators must label the namespace that will be configured in the
|
To check that sink binding is set up correctly, create a Knative event display service, or event sink, that dumps incoming messages to its log:
$ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Create a SinkBinding
object that directs events to the service:
$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display
Create a CronJob.
Create a file named heartbeats-cronjob.yaml
and copy the following sample code into it:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: heartbeat-cron
spec:
spec:
# Run every minute
schedule: "* * * * *"
jobTemplate:
metadata:
labels:
app: heartbeat-cron
bindings.knative.dev/include: "true"
spec:
template:
spec:
restartPolicy: Never
containers:
- name: single-heartbeat
image: quay.io/openshift-knative/knative-eventing-sources-heartbeats:latest
args:
- --period=1
env:
- name: ONE_SHOT
value: "true"
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
To use sink binding, you must manually add a For example, to add this label to a
|
After you have created the heartbeats-cronjob.yaml
file, apply it:
$ oc apply --filename heartbeats-cronjob.yaml
Check that the controller is mapped correctly by entering the following command and inspecting the output:
$ kn source binding describe bind-heartbeat
Name: bind-heartbeat
Namespace: demo-2
Annotations: sources.knative.dev/creator=minikube-user, sources.knative.dev/lastModifier=minikub ...
Age: 2m
Subject:
Resource: job (batch/v1)
Selector:
app: heartbeat-cron
Sink:
Name: event-display
Resource: service (serving.knative.dev/v1)
Conditions:
OK TYPE AGE REASON
++ Ready 2m
You can verify that the Kubernetes events were sent to the Knative event sink by looking at the message dumper function logs.
View the message dumper function logs:
$ oc get pods
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: dev.knative.eventing.samples.heartbeat
source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod
id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596
time: 2019-10-18T15:23:20.809775386Z
contenttype: application/json
Extensions,
beats: true
heart: yes
the: 42
Data,
{
"id": 1,
"label": ""
}
This guide describes the steps required to create, manage, and delete a sink binding instance using YAML files.
You have Knative Serving and Eventing installed.
The following procedure requires you to create YAML files. If you change the names of the YAML files from those used in the examples, you must ensure that you also update the corresponding CLI commands. |
Before developers can use sink binding, cluster administrators must label the namespace that will be configured in the
|
To check that sink binding is set up correctly, create a Knative event display service, or event sink, 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
spec:
template:
spec:
containers:
- image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest
After you have created the service.yaml
file, apply it:
$ oc apply -f service.yaml
Create a SinkBinding
object that directs events to the service.
Create a file named sinkbinding.yaml
and copy the following sample code into it:
apiVersion: sources.knative.dev/v1alpha1
kind: SinkBinding
metadata:
name: bind-heartbeat
spec:
subject:
apiVersion: batch/v1
kind: Job (1)
selector:
matchLabels:
app: heartbeat-cron
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: service
name: event-display
1 | In this example, any Job with the label app: heartbeat-cron will be bound to the event sink. |
After you have created the sinkbinding.yaml
file, apply it:
$ oc apply -f sinkbinding.yaml
Create a CronJob
object.
Create a file named heartbeats-cronjob.yaml
and copy the following sample code into it:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: heartbeat-cron
spec:
spec:
# Run every minute
schedule: "* * * * *"
jobTemplate:
metadata:
labels:
app: heartbeat-cron
bindings.knative.dev/include: "true"
spec:
template:
spec:
restartPolicy: Never
containers:
- name: single-heartbeat
image: quay.io/openshift-knative/knative-eventing-sources-heartbeats:latest
args:
- --period=1
env:
- name: ONE_SHOT
value: "true"
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
To use sink binding, you must manually add a For example, to add this label to a cron job instance, add the following lines to the
|
After you have created the heartbeats-cronjob.yaml
file, apply it:
$ oc apply -f heartbeats-cronjob.yaml
Check that the controller is mapped correctly by entering the following command and inspecting the output:
$ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml
spec:
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: service
name: event-display
namespace: default
subject:
apiVersion: batch/v1
kind: Job
namespace: default
selector:
matchLabels:
app: heartbeat-cron
You can verify that the Kubernetes events were sent to the Knative event sink by looking at the message dumper function logs.
View the message dumper function logs:
$ oc get pods
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: dev.knative.eventing.samples.heartbeat
source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod
id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596
time: 2019-10-18T15:23:20.809775386Z
contenttype: application/json
Extensions,
beats: true
heart: yes
the: 42
Data,
{
"id": 1,
"label": ""
}