2.4. 创建 ping 源
ping 源是一个事件源,可用于定期向事件消费者发送带有恒定有效负载的 ping 事件。ping 源可以用来调度发送事件,类似于计时器。
2.4.1. 使用 Web 控制台创建 ping 源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建 ping 源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息。
-
在 Developer 视角中,导航到 +Add
YAML。 复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
-
在 Developer 视角中,导航到 +Add
在与上一步中创建的服务相同的命名空间中创建一个 ping 源,或您要将事件发送到的任何其他接收器。
-
在 Developer 视角中,导航到 +Add
Event Source。此时会显示 Event Sources 页面。 - 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
选择 Ping Source,然后点击 Create Event Source。此时会显示 Create Event Source 页面。
注意您可以使用 Form view 或 YAML view 配置 PingSource 设置,并可以在两者间切换。在不同视图间切换时数据会被保留。
-
为 Schedule 输入一个值。在本例中,值为
*/2 * * *
,它会创建一个 PingSource,每两分钟发送一条消息。 - 可选:您可以为 Data 输入一个值,它是消息的有效负载。
在 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
-
选择 Resource 来使用频道、代理或服务作为事件源的事件 sink。在本例中,上一步中创建的
event-display
服务用作目标 资源。 - 选择 URI 来指定事件路由到的 Uniform Resource Identifier (URI)。
-
选择 Resource 来使用频道、代理或服务作为事件源的事件 sink。在本例中,上一步中创建的
- 点 Create。
-
在 Developer 视角中,导航到 +Add
验证
您可以通过查看 Topology 页面来验证 ping 源是否已创建并连接到接收器。
- 在 Developer 视角中,导航到 Topology。
查看 ping 源和接收器。
在 Web 浏览器中查看 event-display 服务。您应该在 Web UI 中看到 ping 源事件。
删除 ping 源
- 导航到 Topology 视图。
- 右键单击 API 服务器源,再选择 Delete Ping Source。
2.4.2. 使用 Knative CLI 创建 ping 源 复制链接链接已复制到粘贴板!
您可以使用 kn source ping create
命令,通过 Knative (kn
) CLI 创建 ping 源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
可选: 如果要使用此流程验证步骤,请安装 OpenShift CLI (
oc
) 。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息:
kn service create event-display \ --image quay.io/openshift-knative/showcase
$ kn service create event-display \ --image quay.io/openshift-knative/showcase
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 ping 源:
kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-display
$ kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-display
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令并检查输出,检查是否正确映射了控制器:
kn source ping describe test-ping-source
$ kn source ping describe test-ping-source
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 ping 源,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
watch oc get pods
$ watch oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 ping 源
删除 ping 源:
kn delete pingsources.sources.knative.dev <ping_source_name>
$ kn delete pingsources.sources.knative.dev <ping_source_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn
) CLI 创建事件源时,您可以使用 --sink
标志指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
以下示例创建使用服务 http://event-display.svc.cluster.local
的接收器绑定作为接收器:
使用 sink 标记的命令示例
kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local
中的svc
确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel
和broker
。
2.4.3. 使用 YAML 创建 ping 源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建无服务器 ping 源,您必须创建一个 YAML 文件来定义 PingSource
对象,然后使用 oc apply
来应用它。
PingSource
对象示例
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
安装 OpenShift CLI (
oc
) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息。
创建服务 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务:
oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 ping 源。
为 ping 源创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 ping 源:
oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令检查是否正确映射了控制器:
oc get pingsource.sources.knative.dev <ping_source_name> -oyaml
$ oc get pingsource.sources.knative.dev <ping_source_name> -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 PingSource,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
watch oc get pods
$ watch oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-container
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 ping 源
删除 ping 源:
oc delete -f <filename>
$ oc delete -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc delete -f ping-source.yaml
$ oc delete -f ping-source.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow