apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
- image: quay.io/openshift-knative/showcase
ping 源是一种事件源,可用于定期向事件使用者发送具有恒定有效负载的 ping 事件。ping 源可用于安排发送事件,类似于计时器。
在集群上安装 Knative Eventing 后,可以使用 Web 控制台创建 ping 源。使用 OpenShift Container Platform Web 控制台提供简化且直观的界面来创建事件源。
您已登录到 OpenShift Container Platform Web 控制台。
OpenShift Serverless 运算符、Knative Serving 和 Knative Eventing 已安装在集群上。
您已创建项目或有权访问具有适当角色和权限的项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
要验证 ping 源是否正常工作,请创建一个简单的 Knative 服务,该服务将传入的消息转储到服务的日志中。
在**开发者**视角中,导航到**+添加** → **YAML**。
复制示例 YAML
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
- image: quay.io/openshift-knative/showcase
点击**创建**。
在与上一步中创建的服务相同的命名空间中创建 ping 源,或创建任何其他您要发送事件到的接收器。
在**开发者**视角中,导航到**+添加** → **事件源**。将显示**事件源**页面。
可选:如果您有多个事件源提供程序,请从**提供程序**列表中选择所需的提供程序,以过滤来自该提供程序的可用事件源。
选择**Ping 源**,然后点击**创建事件源**。将显示**创建事件源**页面。
您可以使用**表单视图**或**YAML 视图**配置**PingSource**设置,并且可以在视图之间切换。在视图之间切换时,数据会持久保存。 |
输入**计划**的值。在此示例中,值为*/2 * * * *
,这将创建一个每两分钟发送一条消息的 PingSource。
可选:您可以输入**数据**的值,这是消息有效负载。
在**目标**部分,选择您的事件接收器。这可以是**资源**或**URI**
选择**资源**以使用通道、Broker 或服务作为事件源的事件接收器。在此示例中,上一步中创建的event-display
服务用作目标**资源**。
选择**URI**以指定事件路由到的统一资源标识符 (URI)。
点击**创建**。
您可以通过查看**拓扑**页面来验证 ping 源是否已创建并已连接到接收器。
在**开发者**视角中,导航到**拓扑**。
查看 ping 源和接收器。
在 Web 浏览器中查看 event-display 服务。您应该在 Web UI 中看到 ping 源事件。
导航到**拓扑**视图。
右键单击 API 服务器源,然后选择**删除 Ping 源**。
您可以使用 `kn source ping create` 命令通过 Knative ( `kn` ) CLI 创建 Ping 源。与直接修改 YAML 文件相比,使用 Knative CLI 创建事件源提供了更简化和直观的用户界面。
OpenShift Serverless 运算符、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
对于您想要请求的每一组 Ping 事件,请在与事件使用者相同的命名空间中创建一个 Ping 源。
$ kn source ping create test-ping-source \
--schedule "*/2 * * * *" \
--data '{"message": "Hello world!"}' \
--sink ksvc: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
您可以通过查看接收器 Pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件接收器。
默认情况下,如果在 60 秒内没有收到流量,Knative 服务将终止其 Pod。本指南中显示的示例创建了一个每 2 分钟发送一条消息的 Ping 源,因此应该在新建的 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!"
}
删除 Ping 源
$ kn delete pingsources.sources.knative.dev <ping_source_name>
使用 Knative ( `kn` ) CLI 创建事件源时,您可以使用 `--sink` 标志指定一个接收器,该接收器将接收来自该资源的事件。接收器可以是任何可寻址或可调用的资源,可以接收来自其他资源的传入事件。
以下示例创建一个使用服务 `http://event-display.svc.cluster.local` 作为接收器的接收器绑定。
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \ (1)
--ce-override "sink=bound"
1 | `http://event-display.svc.cluster.local` 中的 `svc` 表示接收器是 Knative 服务。其他默认接收器前缀包括 `channel` 和 `broker`。 |
使用 YAML 文件创建 Knative 资源使用声明式 API,这使您可以声明性地和可重复地描述事件源。要使用 YAML 创建无服务器 Ping 源,您必须创建一个定义 `PingSource` 对象的 YAML 文件,然后使用 `oc apply` 应用它。
apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
name: test-ping-source
spec:
schedule: "*/2 * * * *" (1)
data: '{"message": "Hello world!"}' (2)
sink: (3)
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
1 | 使用CRON 表达式指定事件的计划。 |
2 | 事件消息体表示为 JSON 编码的数据字符串。 |
3 | 这些是事件使用者的详细信息。在此示例中,我们使用名为 `event-display` 的 Knative 服务。 |
OpenShift Serverless 运算符、Knative Serving 和 Knative Eventing 已安装在集群上。
安装 OpenShift CLI ( `oc` )。
您已创建项目或有权访问具有适当角色和权限的项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
要验证 Ping 源是否正常工作,请创建一个简单的 Knative 服务,将传入的消息转储到服务的日志中。
创建服务 YAML 文件
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
- image: quay.io/openshift-knative/showcase
创建服务
$ oc apply -f <filename>
对于您想要请求的每一组 Ping 事件,请在与事件使用者相同的命名空间中创建一个 Ping 源。
为 Ping 源创建一个 YAML 文件
apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
name: test-ping-source
spec:
schedule: "*/2 * * * *"
data: '{"message": "Hello world!"}'
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
创建 Ping 源
$ oc apply -f <filename>
通过输入以下命令检查控制器是否正确映射。
$ oc get pingsource.sources.knative.dev <ping_source_name> -oyaml
apiVersion: sources.knative.dev/v1
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/v1/namespaces/default/pingsources/test-ping-source
uid: 3d80d50b-f8c7-4c1b-99f7-3ec00e0a8164
spec:
data: '{ value: "hello" }'
schedule: '*/2 * * * *'
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
namespace: default
您可以通过查看接收器 Pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件接收器。
默认情况下,Knative 服务如果在 60 秒内没有收到流量,则会终止其 Pod。本指南中显示的示例创建了一个每 2 分钟发送一条消息的 PingSource,因此应该在新建的 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!"
}
删除 Ping 源
$ oc delete -f <filename>
$ oc delete -f ping-source.yaml