创建 PingSource 对象¶
本主题介绍如何创建 PingSource 对象。
PingSource 是一种事件源,它按指定的 cron 调度生成具有固定有效载荷的事件。
以下示例展示了如何将 PingSource 配置为事件源,该事件源每分钟向名为 event-display 的 Knative 服务发送事件,该服务用作接收器。如果您有现有的接收器,可以用您自己的值替换示例。
准备工作¶
创建 PingSource
- 您必须安装 Knative Eventing。安装 Knative Eventing 后,PingSource 事件源类型默认启用。
- 您可以使用
kubectl或kn命令来创建诸如接收器和 PingSource 之类的组件。 - 在此过程的验证步骤中,您可以使用
kubectl或kail进行日志记录。
创建 PingSource 对象¶
-
可选:通过运行命令为您的 PingSource 创建一个命名空间
kubectl create namespace <namespace>其中
<namespace>是您希望 PingSource 使用的命名空间。例如,pingsource-example。注意
为您的 PingSource 和相关组件创建一个命名空间可以更容易地查看此工作流的更改和事件,因为它们与
default命名空间中可能存在的其他组件是隔离的。
它还使删除源变得更容易,因为您可以删除命名空间以删除所有资源。 -
创建接收器。如果您没有自己的接收器,可以使用以下示例服务,该服务将传入消息转储到日志中
-
将下面的 YAML 复制到文件中
apiVersion: apps/v1 kind: Deployment metadata: name: event-display namespace: <namespace> spec: replicas: 1 selector: matchLabels: &labels app: event-display template: metadata: labels: *labels spec: containers: - name: event-display image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display --- kind: Service apiVersion: v1 metadata: name: event-display namespace: <namespace> spec: selector: app: event-display ports: - protocol: TCP port: 80 targetPort: 8080其中
<namespace>是您在上面步骤 1 中创建的命名空间的名称。 -
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
-
-
创建 PingSource 对象。
注意
您要发送的数据必须以文本形式表示在 PingSource YAML 文件中。发送二进制数据的事件不能直接在 YAML 中序列化。但是,您可以通过在 PingSource 规范中使用
dataBase64代替data来发送 base64 编码的二进制数据。使用以下选项之一
-
要创建发送可以表示为纯文本(例如文本、JSON 或 XML)的数据的 PingSource,请运行以下命令
其中kn source ping create <pingsource-name> \ --namespace <namespace> \ --schedule "<cron-schedule>" \ --data '<data>' \ --sink <sink-name><pingsource-name>是您要创建的 PingSource 的名称,例如test-ping-source。<namespace>是您在上面步骤 1 中创建的命名空间的名称。<cron-schedule>是 PingSource 发送事件的计划的 cron 表达式,例如,*/1 * * * *每分钟发送一个事件。支持 标准 和 Quartz Scheduler cron 格式,后者支持秒字段。<data>是您要发送的数据。此数据必须以文本形式表示,而不是二进制。例如,一个 JSON 对象,如{"message": "Hello world!"}。<sink-name>是您的接收器名称,例如http://event-display.pingsource-example.svc.cluster.local。
有关可用选项的列表,请参阅 Knative 客户端文档。
-
要创建发送二进制数据的 PingSource,请运行以下命令
其中kn source ping create <pingsource-name> \ --namespace <namespace> \ --schedule "<cron-schedule>" \ --data '<base64-data>' \ --encoding 'base64' \ --sink <sink-name><pingsource-name>是您要创建的 PingSource 的名称,例如test-ping-source。<namespace>是您在上面步骤 1 中创建的命名空间的名称。<cron-schedule>是 PingSource 发送事件的计划的 cron 表达式,例如,*/1 * * * *每分钟发送一个事件。支持 标准 和 Quartz Scheduler cron 格式,后者支持秒字段。<base64-data>是您要发送的 base64 编码的二进制数据,例如ZGF0YQ==。<sink-name>是您的接收器名称,例如http://event-display.pingsource-example.svc.cluster.local。
有关可用选项的列表,请参阅 Knative 客户端文档。
-
要创建发送可以表示为纯文本(例如文本、JSON 或 XML)的数据的 PingSource
-
使用以下模板创建 YAML 文件
其中apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: <pingsource-name> namespace: <namespace> spec: schedule: "<cron-schedule>" contentType: "<content-type>" data: '<data>' sink: ref: apiVersion: v1 kind: <sink-kind> name: <sink-name><pingsource-name>是您要创建的 PingSource 的名称,例如test-ping-source。<namespace>是您在上面步骤 1 中创建的命名空间的名称。<cron-schedule>是 PingSource 发送事件的计划的 cron 表达式,例如,*/1 * * * *每分钟发送一个事件。支持 标准 和 Quartz Scheduler cron 格式,后者支持秒字段。<content-type>是您要发送的数据的媒体类型,例如application/json。<data>是您要发送的数据。此数据必须以文本形式表示,而不是二进制。例如,一个 JSON 对象,如{"message": "Hello world!"}。<sink-kind>是您要用作接收器的任何支持的 Addressable 对象,例如Service或Deployment。<sink-name>是您的接收器名称,例如event-display。
有关您可以为 PingSource 对象配置的字段的更多信息,请参阅 PingSource 参考。
-
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
-
-
要创建发送二进制数据的 PingSource
-
使用以下模板创建 YAML 文件
其中apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: <pingsource-name> namespace: <namespace> spec: schedule: "<cron-schedule>" contentType: "<content-type>" dataBase64: "<base64-data>" sink: ref: apiVersion: v1 kind: <sink-kind> name: <sink-name><pingsource-name>是您要创建的 PingSource 的名称,例如test-ping-source-binary。<namespace>是您在上面步骤 1 中创建的命名空间的名称。<cron-schedule>是 PingSource 发送事件的计划的 cron 表达式,例如,*/1 * * * *每分钟发送一个事件。支持 标准 和 Quartz Scheduler cron 格式,后者支持秒字段。<content-type>是您要发送的数据的媒体类型,例如application/json。<base64-data>是您要发送的 base64 编码的二进制数据,例如ZGF0YQ==。<sink-kind>是您要用作接收器的任何受支持的可寻址对象,例如 Kubernetes Service。<sink-name>是您的接收器名称,例如event-display。
有关您可以为 PingSource 对象配置的字段的更多信息,请参阅 PingSource 参考。
-
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
-
-
验证 PingSource 对象¶
-
通过运行命令查看
event-display事件使用者的日志kubectl -n pingsource-example logs -l app=event-display --tail=100kail -l serving.knative.dev/service=event-display -c user-container --since=10m -
验证输出是否返回 PingSource 发送到接收器的事件的属性。在下面的示例中,命令返回了 PingSource 发送到
event-display服务的事件的Attributes和Data属性☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.sources.ping source: /apis/v1/namespaces/pingsource-example/pingsources/test-ping-source id: 49f04fe2-7708-453d-ae0a-5fbaca9586a8 time: 2021-03-25T19:41:00.444508332Z datacontenttype: application/json Data, { "message": "Hello world!" }
删除 PingSource 对象¶
您可以删除 PingSource 和所有相关资源,也可以单独删除资源
-
要删除 PingSource 对象和所有相关资源,请通过运行以下命令删除命名空间
其中kubectl delete namespace <namespace><namespace>是包含 PingSource 对象的命名空间。 -
要仅删除 PingSource 实例,请运行以下命令
其中kn source ping delete <pingsource-name><pingsource-name>是您要删除的 PingSource 的名称,例如test-ping-source。其中kubectl delete pingsources.sources.knative.dev <pingsource-name><pingsource-name>是您要删除的 PingSource 的名称,例如test-ping-source。 -
要仅删除接收器,请运行以下命令
其中kn service delete <sink-name><sink-name>是您的接收器名称,例如event-display。其中kubectl delete service.serving.knative.dev <sink-name><sink-name>是您的接收器名称,例如event-display。