Serverless use in many scenarios is based on an event-triggered, that is, when Kative receiving the type of event by calling mechanism Eventing background Kative Service, This article describes several different trigger calls Serverless.
Upon completion: after "OpenShift Knative 4 of (2) first Serverless application" can be achieved according to this article "event by calling Serverless service."
Article Directory
Serverless Service directly triggered by events
Creating Event Source
First we create a basis "CronJobSource" the object of regular tasks, the object will sink scheduled task is set to "dumpy-serverless" service in the previous step to achieve.
# event-source.yaml
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource
metadata:
name: event-dumpy-cronjob-source
spec:
schedule: "* * * * *"
sink:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
name: dumpy-serverless
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/event-source.yaml
$ oc get sources
NAME AGE
cronjobsource.sources.eventing.knative.dev/event-dumpy-cronjob-source 24m
Verify Serverless service is triggered
- Pod was observed in the case of continuous operation, at this time there should be a Pod Running th 2, a timing task is to run a Pod event-dumpy-cronjob-source, the other is Pod dumpy-serverless operation is invoked.
$ oc get pod | grep Running -w
cronjobsource-event-dumpy--390658a6-245e-11ea-9fb4-52fdfc072wr5 1/1 Running 0 29m
dumpy-serverless-xrjzq-2-deployment-99cfd764-g8wxz 2/2 Running 0 28m
- Then by looking dumpy-serverless log, confirm that the service is called once per minute.
$ oc logs -f dumpy-serverless-xrjzq-2-deployment-99cfd764-g8wxz -c user-container
{"body":""}
2019/12/22 01:58:00 Openshift Http Request Dumper received a message: POST / HTTP/1.1
Host: dumpy-serverless.kn-demo.svc.cluster.local
Accept-Encoding: gzip
Ce-Id: 22c8e7d2-ba8f-4e1a-8028-dd292d417b3d
Ce-Source: /apis/v1/namespaces/kn-demo/cronjobsources/event-dumpy-cronjob-source
Ce-Specversion: 0.3
Ce-Time: 2019-12-22T01:58:00.003275636Z
Ce-Type: dev.knative.cronjob.event
Content-Length: 11
Forwarded: for=10.128.1.41;proto=http, for=10.128.1.6
K-Proxy-Request: activator
User-Agent: Go-http-client/1.1
X-B3-Parentspanid: 56637b9df6d4dd2b
X-B3-Sampled: 0
X-B3-Spanid: c46f0865a4e03070
X-B3-Traceid: a362fd95fac310f94b7be06279e24e4f
X-Envoy-Decorator-Operation: dumpy-serverless-xrjzq-2.kn-demo.svc.cluster.local:80/*
X-Envoy-Expected-Rq-Timeout-Ms: 600000
X-Envoy-Internal: true
X-Forwarded-For: 10.128.1.41, 10.128.1.6, 10.128.1.9
X-Forwarded-Proto: http
X-Request-Id: 9feec76b-57b8-414e-a327-588533e34df9
。。。。
- Then we delete the Event Source:
$ oc delete cronjobsource.sources.eventing.knative.dev/event-dumpy-cronjob-source
- Then monitor the operation of Pod, began to run Serverless there's Pod, wait a minute, there is no, explain Knative the Pod run the service reduced to "0" the.
$ oc get pod | grep Running
Trigger events by subscribing Serverless Service
Creating Channel Objects
- InMemoryChannel create a type of Channel object (the object can be understood as a series of messages).
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/in-memory-channel.yaml
$ oc get inmemorychannel
NAME READY REASON HOSTNAME AGE
ch-event-dumpy True ch-event-dumpy-kn-channel.kn-demo.svc.cluster.local 38s
This object is InMemoryChannel defined as follows:
apiVersion: messaging.knative.dev/v1alpha1
kind: InMemoryChannel
metadata:
name: ch-event-dumpy
- CronJobSource definition of a target, as the event source, the event will put it generated in the previous step InMemoryChannel.
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource
metadata:
name: event-dumpy-cronjob-source
spec:
schedule: "* * * * *"
sink:
apiVersion: messaging.knative.dev/v1alpha1
kind: InMemoryChannel
name: ch-event-dumpy
CronJobSource execute command to create an object:
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/event-source-to-channel.yaml
$ oc get cronjobsource
NAME AGE
event-dumpy-cronjob-source 13s
- Define a Subscription objects get events from InMemoryChannel in and pass it Serverless Service named dumpy-serverless of.
apiVersion: messaging.knative.dev/v1alpha1
kind: Subscription
metadata:
name: event-dumpy-subscriber
spec:
channel:
apiVersion: messaging.knative.dev/v1alpha1
kind: InMemoryChannel
name: ch-event-dumpy
subscriber:
ref:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
name: dumpy-serverless
Subscription execute command to create an object:
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/knative-on-ocp4/master/eventing/event-subscription.yaml
$ oc get subscription.messaging.knative.dev
NAME READY REASON AGE
event-dumpy-subscriber True 3m26s
Verify Serverless service is triggered
- Pod of view operation. Pod case there must be two, for a timed event is generated (first below), and the other is used to run the dumpy-serverless event consumer service (a second below).
$ oc get pod | grep Running
cronjob-event-dumpy-cronjob-source-dzccx-76c95574c9-q6m2f 1/1 Running 0 8m54s
dumpy-serverless-956fn-deployment-65cb7f5d97-z6ffq 2/2 Running 0 60s
- Deleted timing generator task event source event-dumpy-cronjob-source.
$ oc delete cronjobsource.sources.eventing.knative.dev/event-dumpy-cronjob-source
- Pod later confirmed that the number of runs dumpy-serverless has fallen to "0."
$ oc get po | grep Running
- Finally, you can delete the event subscription.
$ oc delete subscription.messaging.knative.dev/event-dumpy-subscriber