EventType 自动创建以提高可发现性¶
Flag 名称: eventtype-auto-create
阶段:Alpha,默认禁用
跟踪问题: #7044
角色:开发者
概述¶
通过 eventtype-auto-creation 功能,我们有可能自动创建被 Knative Broker 和 Channel 实现接收和摄取的 EventTypes。
要使用此选择加入功能,我们必须在 config-features 中将其启用,将 eventtype-auto-create flag 设置为 enabled。
apiVersion: v1
kind: ConfigMap
metadata:
name: config-features
namespace: knative-eventing
data:
eventtype-auto-create: "enabled"
...
启用此功能后,我们可以免费在 broker/channel 入口处获得 EventType,而无需像那些与 Broker 或 Channel API 通信的应用程序代码那样,手动将它们创建为 yaml manifest。
示例¶
创建 Broker¶
要检查功能是否正常工作,请创建一个简单的 broker。
kn broker create my-broker
-
使用以下示例创建 YAML 文件
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: namespace: default name: my-broker -
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
向 Broker 发送事件¶
自动创建功能由已处理的事件触发。因此,要验证该功能,我们需要发送一个带有所需类型的示例事件。可以通过多种方式实现,以下是使用集群中的 kn-plugin-event 和 cURL 容器的两个示例。
以下是一个使用 kn CLI 发送事件的示例,以提高开发人员的生产力。kn-plugin-event 插件可以通过 Homebrew 安装,或直接从 GitHub releases 下载,有关更多详细信息,请参阅插件安装步骤。
-
设置
kn event插件brew install knative-extensions/kn-plugins/event -
发送事件
kn event send \ --to Broker:eventing.knative.dev/v1:my-broker\ --type com.corp.integration.warning \ -f message="There might be a problem"
可以通过集群中的 curl 发送事件。
kubectl run curl --image=docker.io/curlimages/curl --rm=true --restart=Never -ti \
-- -X POST -v \
-H "content-type: application/json" \
-H "ce-specversion: 1.0" \
-H "ce-source: my/curl/command" \
-H "ce-type: my.demo.event" \
-H "ce-id: 6cf17c7b-30b1-45a6-80b0-4cf58c92b947" \
-d '{"name":"Knative Demo"}' \
http://broker-ingress.knative-eventing.svc.cluster.local/default/my-broker
curl HTTP POST 请求中构建事件。
事件发现¶
在发送了两个事件后,我们应该能够发现系统中的事件,这基于 eventtype-auto-creation 功能。
k get eventtypes.eventing.knative.dev -A
NAMESPACE NAME TYPE SOURCE SCHEMA BROKER DESCRIPTION READY REASON
default <...> com.corp.integration.warning kn-event/v1.9.0 my-broker True
default <...> my.demo.event my/curl/command my-broker True
结论与建议¶
没有此功能,我们将无法在系统中看到两个 EventType 实例,因此我们提高了事件的可发现性,以便消费。然而,虽然这个选择加入功能对于自动创建事件很方便,但我们**强烈**建议在 GitOps 管道中,将您的应用程序 deployments 产生的实际 EventType manifest 作为其一部分进行创建,而不是依赖于此自动创建功能。