Container Source Example
- Setup Knative Serving.
- Setup .
Prepare the heartbeats image
Knative has a sample of heartbeats event source. You could clone the source codes by
And then build a heartbeats image and publish to your image repo with
Note: ko publish
requires:
KO_DOCKER_REPO
to be set. (e.g.gcr.io/[gcloud-project]
ordocker.io/<username>
)- you to be authenticated with your
KO_DOCKER_REPO
- to be installed
In order to verify ContainerSource
is working, we will create a Event Display Service that dumps incoming messages to its log.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
Use following command to create the service from service.yaml
:
kubectl get ksvc
NAME URL LATESTCREATED LATESTREADY READY REASON
event-display http://event-display.default.1.2.3.4.xip.io event-display-gqjbw event-display-gqjbw True
Create a ContainerSource using the heartbeats image
In order to run the heartbeats container as an event source, you have to create a concrete ContainerSource with specific arguments and environment settings. Be sure to replace heartbeats_image_uri
with a valid uri for your heartbeats image in your image repo in file. Note that arguments and environment variables are set and will be passed to the container.
apiVersion: sources.knative.dev/v1
metadata:
name: test-heartbeats
spec:
template:
spec:
containers:
- image: <heartbeats_image_uri>
name: heartbeats
args:
- --period=1
env:
- name: POD_NAME
value: "mypod"
- name: POD_NAMESPACE
value: "event-test"
sink:
ref:
apiVersion: serving.knative.dev/v1
name: event-display
Use the following command to create the event source from heartbeats-source.yaml
:
We will verify that the message was sent to the Knative eventing system by looking at event-display service logs.
kubectl logs -l serving.knative.dev/service=event-display -c user-container --since=10m
You should see log lines showing the request headers and body of the event message sent by the heartbeats source to the display function:
☁️ cloudevents.Event
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": 2,
"label": ""
}
In order to create a new event source using ContainerSource, you will create a container image at first, and then create a ContainerSource with the image uri and specify the values of parameters.
Develop, build and publish a container image
- The container image must have a
main
method to start with. - The
main
method will accept parameters from arguments and environment variables. - Two environments variables will be injected by the
ContainerSource
controller,K_SINK
andK_CE_OVERRIDES
, resolved fromspec.sink
andspec.ceOverrides
respectively. - The event messages shall be sent to the sink URI specified in . The message can be any format. format is recommended.
heartbeats event source is a sample for your reference.
When the container image is ready, a YAML file will be used to create a concrete ContainerSource
. Use as a sample for reference. Learn more about the ContainerSource specification.
Was this page helpful?
Glad to hear it! Please .
Sorry to hear that. Please tell us how we can improve.