跳至内容

创建 PingSource 对象

stage version

本主题描述了如何创建 PingSource 对象。

PingSource 是一个事件源,它以特定 cron 时间表,生成具有固定有效负载的事件。

以下示例展示了如何将 PingSource 配置为一个事件源,它每分钟向名为 event-display 的 Knative 服务发送事件,该服务用作接收器。如果你已拥有接收器,则可以用你自己的值替换示例。

开始之前

要创建 PingSource

  • 你必须安装 Knative Eventing。PingSource 事件源类型在安装 Knative Eventing 时默认启用。
  • 可以使用 kubectlkn 命令创建组件,例如接收器和 PingSource。
  • 你可以在验证步骤中使用 kubectlkail 进行日志记录。

创建 PingSource 对象

  1. 可选:通过运行以下命令为你的 PingSource 创建一个命名空间

    kubectl create namespace <namespace>
    

    其中 <namespace> 是你希望 PingSource 使用的命名空间。例如,pingsource-example

    注意

    为你的 PingSource 和相关组件创建命名空间,可以让你更轻松地查看此工作流的变化和事件,因为它们与 default 命名空间中可能存在的其他组件隔离。

    它还使移除源更容易,因为你可以删除命名空间以移除所有资源。

  2. 创建接收器。如果你没有自己的接收器,可以使用以下示例服务,它将传入的消息转储到日志中

    1. 将下面的 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 中创建的命名空间的名称。

    2. 通过运行以下命令应用 YAML 文件

      kubectl apply -f <filename>.yaml
      
      其中 <filename> 是你在上一步中创建的文件的名称。

  3. 创建 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

      1. 使用下面的模板创建一个 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 对象,例如,ServiceDeployment
        • <sink-name> 是你的接收器的名称,例如 event-display

        有关你可以为 PingSource 对象配置的字段的更多信息,请参阅 PingSource 参考

      2. 通过运行以下命令应用 YAML 文件

        kubectl apply -f <filename>.yaml
        
        其中 <filename> 是你在上一步中创建的文件的名称。

    • 要创建发送二进制数据的 PingSource

      1. 使用下面的模板创建一个 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 参考

      2. 通过运行以下命令应用 YAML 文件

        kubectl apply -f <filename>.yaml
        
        其中 <filename> 是你在上一步中创建的文件的名称。

验证 PingSource 对象

  1. 通过运行以下命令查看 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
    
  2. 验证输出是否返回了 PingSource 发送到接收器的事件的属性。在下面的示例中,该命令返回了 PingSource 发送到 event-display 服务的事件的 AttributesData 属性

    ☁️  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

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,用于此目的。 了解更多。