$ kn source list-types
可以使用 `kn source list-types` CLI 命令列出可在集群上创建和使用的事件源类型。
在集群上安装了 OpenShift Serverless 运算符和 Knative Eventing。
已安装 Knative ( `kn` ) CLI。
在终端中列出可用的事件源类型
$ 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
可选:在 OpenShift Container Platform 上,也可以以 YAML 格式列出可用的事件源类型
$ kn source list-types -o yaml
使用 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`。 |
可以使用 `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
$ kn source container list -o yaml
此命令更新现有容器源的镜像 URI。
$ kn source container update <container_source_name> --image <image_uri>
可以使用 `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` 资源以包含所需的权限,而不是创建新的资源。 |
将服务帐户、角色和角色绑定作为 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 | 将此命名空间更改为您选择的安装事件源的命名空间。 |
应用 YAML 文件
$ oc apply -f <filename>
创建一个具有事件接收器的 API 服务器源。在以下示例中,接收器是一个代理
$ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource
要检查 API 服务器源是否已正确设置,请创建一个将传入消息转储到其日志的 Knative 服务
$ kn service create event-display --image quay.io/openshift-knative/showcase
如果您使用代理作为事件接收器,请创建一个触发器,用于将来自default
代理的事件过滤到服务。
$ kn trigger create <trigger_name> --sink ksvc:event-display
通过在默认命名空间中启动 Pod 来创建事件。
$ oc create deployment event-origin --image quay.io/openshift-knative/showcase
通过检查以下命令生成的输出,检查控制器是否正确映射。
$ 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
或者,要在终端中查看日志,请通过输入以下命令查看 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",
...
}
删除触发器
$ kn trigger delete <trigger_name>
删除事件源
$ kn source apiserver delete <source_name>
删除服务帐户、集群角色和集群绑定
$ oc delete -f authentication.yaml
您可以使用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
)。
要验证 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>
您可以使用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
)。
要验证 Kafka 事件源是否正常工作,请创建一个 Knative 服务,该服务将传入事件转储到服务日志中。
$ kn service create event-display \
--image quay.io/openshift-knative/showcase
创建一个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
选项是可选的。
可选:查看您创建的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
触发 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
主题。
通过查看日志来验证消息是否已到达。
$ 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!