11.4. 使用 PingSource
PingSource 用于定期向事件消费者发送带有恒定有效负载的 ping 事件,并可用于调度发送事件,类似于计时器。
PingSource YAML 示例
apiVersion: sources.knative.dev/v1alpha2 kind: PingSource metadata: name: test-ping-source spec: schedule: "*/2 * * * *" 1 jsonData: '{"message": "Hello world!"}' 2 sink: 3 ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
11.4.1. 通过 kn
CLI 使用 PingSource
以下小节介绍了如何使用 kn
CLI 创建、验证和移除基本 PingSource。
先决条件
- 已安装 Knative Serving 和 Eventing。
-
已安装
kn
CLI。
流程
要验证 PingSource 是否可以工作,请创建一个简单的 Knative 服务,用于在服务日志中转储传入的信息:
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 PingSource:
$ kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink svc:event-display
输入以下命令并检查输出,检查是否正确映射了控制器:
$ kn source ping describe test-ping-source
Name: test-ping-source Namespace: default Annotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer Age: 15s Schedule: */2 * * * * Data: {"message": "Hello world!"} Sink: Name: event-display Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 8s ++ Deployed 8s ++ SinkProvided 15s ++ ValidSchedule 15s ++ EventTypeProvided 15s ++ ResourcesCorrect 15s
验证步骤
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 PingSource,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
$ watch oc get pods
使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
$ 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.sources.ping source: /apis/v1/namespaces/default/pingsources/test-ping-source id: 99e4f4f6-08ff-4bff-acf1-47f61ded68c9 time: 2020-04-07T16:16:00.000601161Z datacontenttype: application/json Data, { "message": "Hello world!" }
11.4.1.1. 删除 PingSource
删除 PingSource:
$ kn delete pingsources.sources.knative.dev test-ping-source
删除
event-display
服务:$ kn delete service.serving.knative.dev event-display
11.4.2. 通过 YAML 使用 PingSource
以下小节介绍了如何使用 YAML 文件创建、验证和移除基本 PingSource。
先决条件
- 已安装 Knative Serving 和 Eventing。
以下操作过程要求您创建 YAML 文件。
如果更改了示例中使用的 YAML 文件的名称,则需要更新对应的 CLI 命令。
流程
要验证 PingSource 是否可以工作,请创建一个简单的 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
创建服务:
$ oc apply --filename service.yaml
对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 PingSource:
将 YAML 示例复制到名为
ping-source.yaml
的文件中:apiVersion: sources.knative.dev/v1alpha2 kind: PingSource metadata: name: test-ping-source spec: schedule: "*/2 * * * *" jsonData: '{"message": "Hello world!"}' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display
创建 PingSource:
$ oc apply --filename ping-source.yaml
输入以下命令检查是否正确映射了控制器:
$ oc get pingsource.sources.knative.dev test-ping-source -oyaml
apiVersion: sources.knative.dev/v1alpha2 kind: PingSource metadata: annotations: sources.knative.dev/creator: developer sources.knative.dev/lastModifier: developer creationTimestamp: "2020-04-07T16:11:14Z" generation: 1 name: test-ping-source namespace: default resourceVersion: "55257" selfLink: /apis/sources.knative.dev/v1alpha2/namespaces/default/pingsources/test-ping-source uid: 3d80d50b-f8c7-4c1b-99f7-3ec00e0a8164 spec: jsonData: '{ value: "hello" }' schedule: '*/2 * * * *' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display namespace: default
验证步骤
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 PingSource,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
$ watch oc get pods
使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
$ 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.sources.ping source: /apis/v1/namespaces/default/pingsources/test-ping-source id: 042ff529-240e-45ee-b40c-3a908129853e time: 2020-04-07T16:22:00.000791674Z datacontenttype: application/json Data, { "message": "Hello world!" }
11.4.2.1. 删除 PingSource
输入以下命令删除该服务:
$ oc delete --filename service.yaml
运行以下命令来删除 PingSource:
$ oc delete --filename ping-source.yaml