×

使用 Knative CLI 列出可用的事件源类型

可以使用 `kn source list-types` CLI 命令列出可在集群上创建和使用的事件源类型。

前提条件
  • 在集群上安装了 OpenShift Serverless 运算符和 Knative Eventing。

  • 已安装 Knative ( `kn` ) CLI。

步骤
  1. 在终端中列出可用的事件源类型

    $ kn source list-types
    示例输出
    TYPE              NAME                                            DESCRIPTION
    ApiServerSource   apiserversources.sources.knative.dev            Watch and send Kubernetes API events to a sink
    PingSource        pingsources.sources.knative.dev                 Periodically send ping events to a sink
    SinkBinding       sinkbindings.sources.knative.dev                Binding for connecting a PodSpecable to a sink
  2. 可选:在 OpenShift Container Platform 上,也可以以 YAML 格式列出可用的事件源类型

    $ kn source list-types -o yaml

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`。

使用 Knative CLI 创建和管理容器源

可以使用 `kn source container` 命令使用 Knative ( `kn` ) CLI 创建和管理容器源。使用 Knative CLI 创建事件源比直接修改 YAML 文件提供了更简化和直观的用户界面。

创建容器源
$ kn source container create <container_source_name> --image <image_uri> --sink <sink>
删除容器源
$ kn source container delete <container_source_name>
描述容器源
$ kn source container describe <container_source_name>
列出现有容器源
$ kn source container list
以 YAML 格式列出现有容器源
$ kn source container list -o yaml
更新容器源

此命令更新现有容器源的镜像 URI。

$ kn source container update <container_source_name> --image <image_uri>

使用 Knative CLI 创建 API 服务器源

可以使用 `kn source apiserver create` 命令使用 `kn` CLI 创建 API 服务器源。使用 `kn` CLI 创建 API 服务器源比直接修改 YAML 文件提供了更简化和直观的用户界面。

前提条件
  • 在集群上安装了 OpenShift Serverless 运算符和 Knative Eventing。

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

  • 您已安装 OpenShift CLI ( `oc` )。

  • 已安装 Knative ( `kn` ) CLI。

步骤

如果要重用现有服务帐户,可以修改现有的 `ServiceAccount` 资源以包含所需的权限,而不是创建新的资源。

  1. 将服务帐户、角色和角色绑定作为 YAML 文件创建到事件源中。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: events-sa
      namespace: default (1)
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: event-watcher
      namespace: default (1)
    rules:
      - apiGroups:
          - ""
        resources:
          - events
        verbs:
          - get
          - list
          - watch
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: k8s-ra-event-watcher
      namespace: default (1)
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: event-watcher
    subjects:
      - kind: ServiceAccount
        name: events-sa
        namespace: default (1)
    1 将此命名空间更改为您选择的安装事件源的命名空间。
  2. 应用 YAML 文件

    $ oc apply -f <filename>
  3. 创建一个具有事件接收器的 API 服务器源。在以下示例中,接收器是一个代理

    $ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource
  4. 要检查 API 服务器源是否已正确设置,请创建一个将传入消息转储到其日志的 Knative 服务

    $ kn service create event-display --image quay.io/openshift-knative/showcase
  5. 如果您使用代理作为事件接收器,请创建一个触发器,用于将来自default代理的事件过滤到服务。

    $ kn trigger create <trigger_name> --sink ksvc:event-display
  6. 通过在默认命名空间中启动 Pod 来创建事件。

    $ oc create deployment event-origin --image quay.io/openshift-knative/showcase
  7. 通过检查以下命令生成的输出,检查控制器是否正确映射。

    $ kn source apiserver describe <source_name>
    示例输出
    Name:                mysource
    Namespace:           default
    Annotations:         sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer
    Age:                 3m
    ServiceAccountName:  events-sa
    Mode:                Resource
    Sink:
      Name:       default
      Namespace:  default
      Kind:       Broker (eventing.knative.dev/v1)
    Resources:
      Kind:        event (v1)
      Controller:  false
    Conditions:
      OK TYPE                     AGE REASON
      ++ Ready                     3m
      ++ Deployed                  3m
      ++ SinkProvided              3m
      ++ SufficientPermissions     3m
      ++ EventTypesProvided        3m
验证

要验证 Kubernetes 事件是否已发送到 Knative,请查看 event-display 日志或使用 Web 浏览器查看事件。

  • 要在 Web 浏览器中查看事件,请打开以下命令返回的链接。

    $ kn service describe event-display -o url
    Example visualization of ApiServerSource event
    图 1. 示例浏览器页面
  • 或者,要在终端中查看日志,请通过输入以下命令查看 Pod 的 event-display 日志。

    $ 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.apiserver.resource.update
      datacontenttype: application/json
      ...
    Data,
      {
        "apiVersion": "v1",
        "involvedObject": {
          "apiVersion": "v1",
          "fieldPath": "spec.containers{event-origin}",
          "kind": "Pod",
          "name": "event-origin",
          "namespace": "default",
           .....
        },
        "kind": "Event",
        "message": "Started container",
        "metadata": {
          "name": "event-origin.159d7608e3a3572c",
          "namespace": "default",
          ....
        },
        "reason": "Started",
        ...
      }
删除 API 服务器源
  1. 删除触发器

    $ kn trigger delete <trigger_name>
  2. 删除事件源

    $ kn source apiserver delete <source_name>
  3. 删除服务帐户、集群角色和集群绑定

    $ oc delete -f authentication.yaml

使用 Knative CLI 创建 ping 源

您可以使用kn source ping create命令使用 Knative (kn) CLI 创建 ping 源。与直接修改 YAML 文件相比,使用 Knative CLI 创建事件源提供了更简化和直观的用户界面。

前提条件
  • OpenShift Serverless Operator、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 创建 Apache Kafka 事件源

您可以使用kn source kafka create命令使用 Knative (kn) CLI 创建 Kafka 源。与直接修改 YAML 文件相比,使用 Knative CLI 创建事件源提供了更简化和直观的用户界面。

前提条件
  • OpenShift Serverless Operator、Knative Eventing、Knative Serving 和KnativeKafka自定义资源 (CR) 已安装在您的集群上。

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

  • 您可以访问 Red Hat AMQ Streams (Kafka) 集群,该集群会生成您要导入的 Kafka 消息。

  • 已安装 Knative ( `kn` ) CLI。

  • 可选:如果您想在此过程中使用验证步骤,则已安装 OpenShift CLI (oc)。

步骤
  1. 要验证 Kafka 事件源是否正常工作,请创建一个 Knative 服务,该服务将传入事件转储到服务日志中。

    $ kn service create event-display \
        --image quay.io/openshift-knative/showcase
  2. 创建一个KafkaSource CR

    $ kn source kafka create <kafka_source_name> \
        --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \
        --topics <topic_name> --consumergroup my-consumer-group \
        --sink event-display

    将此命令中的占位符值替换为您的源名称、引导服务器和主题的值。

    --servers--topics--consumergroup选项指定与 Kafka 集群的连接参数。--consumergroup选项是可选的。

  3. 可选:查看您创建的KafkaSource CR 的详细信息

    $ kn source kafka describe <kafka_source_name>
    示例输出
    Name:              example-kafka-source
    Namespace:         kafka
    Age:               1h
    BootstrapServers:  example-cluster-kafka-bootstrap.kafka.svc:9092
    Topics:            example-topic
    ConsumerGroup:     example-consumer-group
    
    Sink:
      Name:       event-display
      Namespace:  default
      Resource:   Service (serving.knative.dev/v1)
    
    Conditions:
      OK TYPE            AGE REASON
      ++ Ready            1h
      ++ Deployed         1h
      ++ SinkProvided     1h
验证步骤
  1. 触发 Kafka 实例向主题发送消息

    $ oc -n kafka run kafka-producer \
        -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \
        --restart=Never -- bin/kafka-console-producer.sh \
        --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topic

    在提示符中输入消息。此命令假定

    • Kafka 集群安装在kafka命名空间中。

    • KafkaSource对象已配置为使用my-topic主题。

  2. 通过查看日志来验证消息是否已到达。

    $ 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.kafka.event
      source: /apis/v1/namespaces/default/kafkasources/example-kafka-source#example-topic
      subject: partition:46#0
      id: partition:46/offset:0
      time: 2021-03-10T11:21:49.4Z
    Extensions,
      traceparent: 00-161ff3815727d8755848ec01c866d1cd-7ff3916c44334678-00
    Data,
      Hello!