创建 PingSource 对象¶
本主题描述了如何创建 PingSource 对象。
PingSource 是一个事件源,它以特定 cron 时间表,生成具有固定有效负载的事件。
以下示例展示了如何将 PingSource 配置为一个事件源,它每分钟向名为 event-display
的 Knative 服务发送事件,该服务用作接收器。如果你已拥有接收器,则可以用你自己的值替换示例。
开始之前¶
要创建 PingSource
- 你必须安装 Knative Eventing。PingSource 事件源类型在安装 Knative Eventing 时默认启用。
- 可以使用
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 spec 中使用
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>
是你想要用作接收器的任何受支持的 Addressable 对象,例如,Kubernetes 服务。<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=100
kail -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
。