×

ping 源是一种事件源,可用于定期向事件使用者发送具有恒定有效负载的 ping 事件。ping 源可用于安排发送事件,类似于计时器。

使用 Web 控制台创建 ping 源

在集群上安装 Knative Eventing 后,可以使用 Web 控制台创建 ping 源。使用 OpenShift Container Platform Web 控制台提供简化且直观的界面来创建事件源。

先决条件
  • 您已登录到 OpenShift Container Platform Web 控制台。

  • OpenShift Serverless 运算符、Knative Serving 和 Knative Eventing 已安装在集群上。

  • 您已创建项目或有权访问具有适当角色和权限的项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

步骤
  1. 要验证 ping 源是否正常工作,请创建一个简单的 Knative 服务,该服务将传入的消息转储到服务的日志中。

    1. 在**开发者**视角中,导航到**+添加** → **YAML**。

    2. 复制示例 YAML

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          spec:
            containers:
              - image: quay.io/openshift-knative/showcase
    3. 点击**创建**。

  2. 在与上一步中创建的服务相同的命名空间中创建 ping 源,或创建任何其他您要发送事件到的接收器。

    1. 在**开发者**视角中,导航到**+添加** → **事件源**。将显示**事件源**页面。

    2. 可选:如果您有多个事件源提供程序,请从**提供程序**列表中选择所需的提供程序,以过滤来自该提供程序的可用事件源。

    3. 选择**Ping 源**,然后点击**创建事件源**。将显示**创建事件源**页面。

      您可以使用**表单视图**或**YAML 视图**配置**PingSource**设置,并且可以在视图之间切换。在视图之间切换时,数据会持久保存。

    4. 输入**计划**的值。在此示例中,值为*/2 * * * *,这将创建一个每两分钟发送一条消息的 PingSource。

    5. 可选:您可以输入**数据**的值,这是消息有效负载。

    6. 在**目标**部分,选择您的事件接收器。这可以是**资源**或**URI**

      1. 选择**资源**以使用通道、Broker 或服务作为事件源的事件接收器。在此示例中,上一步中创建的event-display服务用作目标**资源**。

      2. 选择**URI**以指定事件路由到的统一资源标识符 (URI)。

    7. 点击**创建**。

验证

您可以通过查看**拓扑**页面来验证 ping 源是否已创建并已连接到接收器。

  1. 在**开发者**视角中,导航到**拓扑**。

  2. 查看 ping 源和接收器。

    View the ping source and service in the Topology view
  3. 在 Web 浏览器中查看 event-display 服务。您应该在 Web UI 中看到 ping 源事件。

    View the ping source events in the web UI
删除 ping 源
  1. 导航到**拓扑**视图。

  2. 右键单击 API 服务器源,然后选择**删除 Ping 源**。

使用 Knative CLI 创建 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` )。

步骤
  1. 要验证 Ping 源是否正常工作,请创建一个简单的 Knative 服务,将传入的消息转储到服务日志中。

    $ kn service create event-display \
        --image quay.io/openshift-knative/showcase
  2. 对于您想要请求的每一组 Ping 事件,请在与事件使用者相同的命名空间中创建一个 Ping 源。

    $ kn source ping create test-ping-source \
        --schedule "*/2 * * * *" \
        --data '{"message": "Hello world!"}' \
        --sink ksvc:event-display
  3. 通过输入以下命令并检查输出,检查控制器是否正确映射。

    $ 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 中观察到每条消息。

  1. 观察创建的新 Pod

    $ watch oc get pods
  2. 使用 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 源
  • 删除 Ping 源

    $ kn delete pingsources.sources.knative.dev <ping_source_name>

Knative CLI sink 标志

使用 Knative ( `kn` ) CLI 创建事件源时,您可以使用 `--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 \ (1)
  --ce-override "sink=bound"
1 `http://event-display.svc.cluster.local` 中的 `svc` 表示接收器是 Knative 服务。其他默认接收器前缀包括 `channel` 和 `broker`。

使用 YAML 创建 Ping 源

使用 YAML 文件创建 Knative 资源使用声明式 API,这使您可以声明性地和可重复地描述事件源。要使用 YAML 创建无服务器 Ping 源,您必须创建一个定义 `PingSource` 对象的 YAML 文件,然后使用 `oc apply` 应用它。

`PingSource` 对象示例
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 中创建应用程序和其他工作负载。

步骤
  1. 要验证 Ping 源是否正常工作,请创建一个简单的 Knative 服务,将传入的消息转储到服务的日志中。

    1. 创建服务 YAML 文件

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: event-display
      spec:
        template:
          spec:
            containers:
              - image: quay.io/openshift-knative/showcase
    2. 创建服务

      $ oc apply -f <filename>
  2. 对于您想要请求的每一组 Ping 事件,请在与事件使用者相同的命名空间中创建一个 Ping 源。

    1. 为 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
    2. 创建 Ping 源

      $ oc apply -f <filename>
  3. 通过输入以下命令检查控制器是否正确映射。

    $ 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 中观察到每条消息。

  1. 观察创建的新 Pod

    $ watch oc get pods
  2. 使用 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 源
  • 删除 Ping 源

    $ oc delete -f <filename>
    示例命令
    $ oc delete -f ping-source.yaml