10.5. 使用 SinkBinding
SinkBinding 用于将事件和 事件源连接至事件消费者或 事件 sink(如一个 Knative 服务或应用程序)。
以下两个流程都要求您创建 YAML 文件。
如果更改了示例中使用的 YAML 文件的名称,则需要更新对应的 CLI 命令。
10.5.1. 通过 Knative CLI (kn
) 使用 SinkBinding
本指南描述了使用 kn
命令创建、管理和删除 SinkBinding 实例所需的步骤。
先决条件
- 已安装 Knative Serving 和 Eventing。
-
已安装
kn
CLI。
流程
要检查 SinkBinding 是否已正确设置,请创建一个 Knative 事件显示服务或事件 sink,在日志中转储传入的信息:
$ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
创建一个 SinkBinding 把事件发送到服务:
$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink svc:event-display
创建 CronJob:
创建名为
heartbeats-cronjob.yaml
的文件,并将以下示例代码复制到其中:apiVersion: batch/v1beta1 kind: CronJob metadata: name: heartbeat-cron spec: spec: # Run every minute schedule: "* * * * *" jobTemplate: metadata: labels: app: heartbeat-cron 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
在创建了
heartbeats-cronjob.yaml
文件后,请输入:$ oc apply --filename heartbeats-cronjob.yaml
输入以下命令并检查输出,检查是否正确映射了控制器:
$ 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
验证步骤
您可以通过查看消息 dumper 功能日志,来验证 Kubernetes 事件是否已发送到 Knative 事件。
您可以输入以下命令来查看消息转储程序功能日志:
$ 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": "" }
10.5.2. 通过 YAML 的方法使用 SinkBinding
本指南描述了使用 YAML 文件创建、管理和删除 SinkBinding 实例所需的步骤。
先决条件
- 已安装 Knative Serving 和 Eventing。
流程
要检查 SinkBinding 是否已正确设置,请创建一个 Knative 事件显示服务或事件挂起,从而在日志中转储传入的信息。
将以下示例 YAML 复制到一个名为
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
创建
service.yaml
文件后,输入以下内容应用它:$ oc apply -f service.yaml
创建将事件定向到该服务的 SinkBinding。
创建名为
sinkbinding.yaml
的文件,并将以下示例代码复制到其中: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
- 在本例中,任何具有标签
app: heartbeat-cron
的作业都将被绑定到事件 sink。创建
sinkbinding.yaml
文件后,输入以下内容应用它:$ oc apply -f sinkbinding.yaml
创建 CronJob:
创建名为
heartbeats-cronjob.yaml
的文件,并将以下示例代码复制到其中:apiVersion: batch/v1beta1 kind: CronJob metadata: name: heartbeat-cron spec: spec: # Run every minute schedule: "* * * * *" jobTemplate: metadata: labels: app: heartbeat-cron 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
在创建了
heartbeats-cronjob.yaml
文件后,请输入:$ oc apply -f heartbeats-cronjob.yaml
输入以下命令并检查输出,检查是否正确映射了控制器:
$ 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
验证步骤
您可以通过查看消息 dumper 功能日志,来验证 Kubernetes 事件是否已发送到 Knative 事件。
您可以输入以下命令来查看消息转储程序功能日志:
$ 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": "" }