Eventing
如何在 OpenShift Serverless 中使用事件驱动的架构
摘要
第 1 章 Knative Eventing 复制链接链接已复制到粘贴板!
OpenShift Container Platform 上的 Knative Eventing 可让开发人员使用 事件驱动的架构和无服务器应用程序。事件驱动的体系结构是基于事件和事件用户间分离关系的概念。
事件生成者创建事件,事件 sink、或消费者接收事件。Knative Eventing 使用标准 HTTP POST 请求来发送和接收事件制作者和 sink 之间的事件。这些事件符合 CloudEvents 规范,它允许在任何编程语言中创建、解析、发送和接收事件。
1.1. Knative Eventing 用例: 复制链接链接已复制到粘贴板!
Knative Eventing 支持以下用例:
- 在不创建消费者的情况下发布事件
- 您可以将事件作为 HTTP POST 发送到代理,并使用绑定分离生成事件的应用程序的目标配置。
- 在不创建发布程序的情况下消费事件
- 您可以使用 Trigger 来根据事件属性消费来自代理的事件。应用程序以 HTTP POST 的形式接收事件。
要启用多种 sink 类型的交付,Knative Eventing 会定义以下通用接口,这些接口可由多个 Kubernetes 资源实现:
- 可寻址的资源
-
能够接收和确认通过 HTTP 发送的事件到 Event 的
status.address.url字段中定义的地址。KubernetesService资源也满足可寻址的接口。 - 可调用的资源
-
能够通过 HTTP 接收事件并转换它,并在 HTTP 响应有效负载中返回
0或1新事件。这些返回的事件可能会象处理外部事件源中的事件一样进一步处理。
第 2 章 事件源 复制链接链接已复制到粘贴板!
2.1. 事件源 复制链接链接已复制到粘贴板!
Knative 事件源可以是生成或导入云事件的任何 Kubernetes 对象,并将这些事件转发到另一个端点,称为接收器(sink)。事件源对于开发对事件做出反应的分布式系统至关重要。
您可以使用 OpenShift Container Platform Web 控制台、Knative (kn) CLI 或应用 YAML 文件的 Developer 视角创建和管理 Knative 事件源。
目前,OpenShift Serverless 支持以下事件源类型:
您还可以创建自定义事件源。
2.2. Administrator 视角中的事件源 复制链接链接已复制到粘贴板!
事件源对于开发对事件做出反应的分布式系统至关重要。
2.2.1. 使用 Administrator 视角创建事件源 复制链接链接已复制到粘贴板!
Knative 事件源可以是生成或导入云事件的任何 Kubernetes 对象,并将这些事件转发到另一个端点,称为接收器(sink)。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless → Eventing。
- 在 Create 列表中,选择 Event Source。您将被定向到 Event Sources 页面。
- 选择您要创建的事件源类型。
2.3. 创建 API 服务器源 复制链接链接已复制到粘贴板!
API 服务器源是一个事件源,可用于将事件接收器(sink),如 Knative 服务,连接到 Kubernetes API 服务器。API 服务器源监视 Kubernetes 事件并将其转发到 Knative Eventing 代理。
2.3.1. 使用 Web 控制台创建 API 服务器源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建 API 服务器源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
如果要重新使用现有服务帐户,您可以修改现有的 ServiceAccount 资源,使其包含所需的权限,而不是创建新资源。
以 YAML 文件形式,为事件源创建服务帐户、角色和角色绑定:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 Developer 视角中,导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
- 选择 ApiServerSource,然后点 Create Event Source。此时会显示 Create Event Source 页面。
使用 Form view 或 YAML view 配置 ApiServerSource 设置:
注意您可以在 Form view 和 YAML view 间进行切换。在不同视图间切换时数据会被保留。
-
输入
v1作为 APIVERSION 和Event作为 KIND。 - 为您创建的服务帐户选择 Service Account Name。
- 为事件源选择 Sink。Sink 可以是一个 资源,如频道、代理或服务,也可以是一个 URI。
-
输入
- 点 Create。
验证
创建 API 服务器源后,您会在 Topology 视图中看到它连接到接收器的服务。
如果使用 URI sink,请右键点击 URI sink → Edit URI 来修改 URI。
删除 API 服务器源
- 导航到 Topology 视图。
右键点击 API 服务器源并选择 Delete ApiServerSource。
2.3.2. 使用 Knative CLI 创建 API 服务器源 复制链接链接已复制到粘贴板!
您可以使用 kn source apiserver create 命令,使用 kn CLI 创建 API 服务器源。使用 kn CLI 创建 API 服务器源可提供比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。 -
已安装 Knative (
kn) CLI。
如果要重新使用现有服务帐户,您可以修改现有的 ServiceAccount 资源,使其包含所需的权限,而不是创建新资源。
以 YAML 文件形式,为事件源创建服务帐户、角色和角色绑定:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建具有事件 sink 的 API 服务器源。在以下示例中,sink 是一个代理:
kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource
$ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode ResourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查 API 服务器源是否已正确设置,请创建一个 Knative 服务,在日志中转储传入的信息:
kn service create <service_name> --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
$ kn service create <service_name> --image quay.io/openshift-knative/knative-eventing-sources-event-display:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用代理作为事件 sink,请创建一个触发器将事件从
default代理过滤到服务:kn trigger create <trigger_name> --sink ksvc:<service_name>
$ kn trigger create <trigger_name> --sink ksvc:<service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在 default 命名空间中启动 pod 来创建事件:
oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
$ oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查以下命令生成的输出来检查是否正确映射了控制器:
kn source apiserver describe <source_name>
$ kn source apiserver describe <source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看消息转储程序功能日志来验证 Kubernetes 事件是否已发送到 Knative。
获取 pod:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 pod 的消息转储程序功能日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 API 服务器源
删除触发器:
kn trigger delete <trigger_name>
$ kn trigger delete <trigger_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除事件源:
kn source apiserver delete <source_name>
$ kn source apiserver delete <source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除服务帐户、集群角色和集群绑定:
oc delete -f authentication.yaml
$ oc delete -f authentication.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。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 \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.3.3. 使用 YAML 文件创建 API 服务器源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建 API 服务器源,您必须创建一个 YAML 文件来定义 ApiServerSource 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您已在与 API 服务器源 YAML 文件中定义的相同的命名空间中创建
default代理。 -
安装 OpenShift CLI (
oc) 。
如果要重新使用现有服务帐户,您可以修改现有的 ServiceAccount 资源,使其包含所需的权限,而不是创建新资源。
以 YAML 文件形式,为事件源创建服务帐户、角色和角色绑定:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 API 服务器源创建为 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ApiServerSourceYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查 API 服务器源是否已正确设置,请创建一个 Knative 服务作为 YAML 文件,在日志中转储传入的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ServiceYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
Trigger对象作为一个 YAML 文件,该文件将事件从default代理过滤到上一步中创建的服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
TriggerYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在 default 命名空间中启动 pod 来创建事件:
oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-display
$ oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令并检查输出,检查是否正确映射了控制器:
oc get apiserversource.sources.knative.dev testevents -o yaml
$ oc get apiserversource.sources.knative.dev testevents -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证 Kubernetes 事件是否已发送到 Knative,您可以查看消息转储程序功能日志。
输入以下命令来获取 pod:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来查看 pod 的消息转储程序功能日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 API 服务器源
删除触发器:
oc delete -f trigger.yaml
$ oc delete -f trigger.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除事件源:
oc delete -f k8s-events.yaml
$ oc delete -f k8s-events.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除服务帐户、集群角色和集群绑定:
oc delete -f authentication.yaml
$ oc delete -f authentication.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 创建 ping 源 复制链接链接已复制到粘贴板!
ping 源是一个事件源,可用于定期向事件消费者发送带有恒定有效负载的 ping 事件。ping 源可以用来调度发送事件,类似于计时器。
2.4.1. 使用 Web 控制台创建 ping 源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建 ping 源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息。
- 在 Developer 视角中,导航到 +Add → YAML。
复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
在与上一步中创建的服务相同的命名空间中创建一个 ping 源,或您要将事件发送到的任何其他接收器。
- 在 Developer 视角中,导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
选择 Ping Source,然后点击 Create Event Source。此时会显示 Create Event Source 页面。
注意您可以使用 Form view 或 YAML view 配置 PingSource 设置,并可以在两者间切换。在不同视图间切换时数据会被保留。
-
为 Schedule 输入一个值。在本例中,值为
*/2 * * *,它会创建一个 PingSource,每两分钟发送一条消息。 - 可选:您可以为 Data 输入一个值,它是消息的有效负载。
-
选择一个 Sink。这可以是 Resource 或一个 URI。在这个示例中,上一步中创建的
event-display服务被用作 Resource sink。 - 点 Create。
验证
您可以通过查看 Topology 页面来验证 ping 源是否已创建并连接到接收器。
- 在 Developer 视角中,导航到 Topology。
查看 ping 源和接收器。
删除 ping 源
- 导航到 Topology 视图。
- 右键单击 API 服务器源,再选择 Delete Ping Source。
2.4.2. 使用 Knative CLI 创建 ping 源 复制链接链接已复制到粘贴板!
您可以使用 kn source ping create 命令,通过 Knative (kn) CLI 创建 ping 源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 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/knative-eventing-sources-event-display:latest$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 ping 源:
kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-display$ kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令并检查输出,检查是否正确映射了控制器:
kn source ping describe test-ping-source
$ kn source ping describe test-ping-sourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 ping 源,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
watch oc get pods
$ watch oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 ping 源
删除 ping 源:
kn delete pingsources.sources.knative.dev <ping_source_name>
$ kn delete pingsources.sources.knative.dev <ping_source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。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 \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.4.3. 使用 YAML 创建 ping 源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建无服务器 ping 源,您必须创建一个 YAML 文件来定义 PingSource 对象,然后使用 oc apply 来应用它。
PingSource 对象示例
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息。
创建服务 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 ping 源。
为 ping 源创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 ping 源:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令检查是否正确映射了控制器:
oc get pingsource.sources.knative.dev <ping_source_name> -oyaml
$ oc get pingsource.sources.knative.dev <ping_source_name> -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 PingSource,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
watch oc get pods
$ watch oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 ping 源
删除 ping 源:
oc delete -f <filename>
$ oc delete -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc delete -f ping-source.yaml
$ oc delete -f ping-source.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. Apache Kafka 的源 复制链接链接已复制到粘贴板!
您可以创建一个 Apache Kafka 源,从 Apache Kafka 集群中读取事件,并将这些事件传递给接收器。您可以使用 OpenShift Container Platform web 控制台、Knative (kn) CLI 或直接创建 KafkaSource 对象并使用 OpenShift CLI (oc) 创建 Kafka 源来应用它。
请参阅有关 为 Apache Kafka 安装 Knative 代理 的文档。
2.5.1. 使用 Web 控制台创建 Apache Kafka 事件源 复制链接链接已复制到粘贴板!
在集群中安装 Apache Kafka 的 Knative 代理实现后,您可以使用 Web 控制台创建 Apache Kafka 源。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建 Kafka 源。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在集群中。 - 已登陆到 web 控制台。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 在 Developer 视角中,进入到 +Add 页面并选择 Event Source。
- 在 Event Sources 页面中,在 Type 部分选择 Kafka Source。
配置 Kafka Source 设置:
- 添加用逗号分开的 Bootstrap 服务器列表。
- 添加以逗号分隔的标题列表。
- 添加一个 消费者组。
- 为您创建的服务帐户选择 Service Account Name。
- 为事件源选择 Sink。Sink 可以是一个 资源,如频道、代理或服务,也可以是一个 URI。
- 输入 Kafka 事件源的 名称。
- 点 Create。
验证
您可以通过查看 Topology 页面来验证 Kafka 事件源是否已创建并连接到接收器。
- 在 Developer 视角中,导航到 Topology。
查看 Kafka 事件源和接收器。
2.5.2. 使用 Knative CLI 创建 Apache Kafka 事件源 复制链接链接已复制到粘贴板!
您可以使用 kn source kafka create 命令,使用 Knative (kn) CLI 创建 Kafka 源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
-
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/knative-eventing-sources-event-display$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
KafkaSourceCR:kn source kafka create <kafka_source_name> \ --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \ --topics <topic_name> --consumergroup my-consumer-group \ --sink event-display$ kn source kafka create <kafka_source_name> \ --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \ --topics <topic_name> --consumergroup my-consumer-group \ --sink event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将此命令中的占位符值替换为源名称、引导服务器和主题的值。
--servers、--topics和--consumergroup选项指定到 Kafka 集群的连接参数。--consumergroup选项是可选的。可选:查看您创建的
KafkaSourceCR 的详情:kn source kafka describe <kafka_source_name>
$ kn source kafka describe <kafka_source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
触发 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$ 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-topicCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在提示符后输入信息。这个命令假设:
-
Kafka 集群安装在
kafka命名空间中。 -
KafkaSource对象已被配置为使用my-topic主题。
-
Kafka 集群安装在
通过查看日志来验证消息是否显示:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。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 \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.5.3. 使用 YAML 创建 Apache Kafka 事件源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建 Kafka 源,您必须创建一个 YAML 文件来定义 KafkaSource 对象,然后使用 oc apply 命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
-
安装 OpenShift CLI (
oc) 。
流程
创建
KafkaSource对象作为 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要仅支持 OpenShift Serverless 上的
KafkaSource对象的v1beta1API 版本。不要使用这个 API 的v1alpha1版本,因为这个版本现已弃用。KafkaSource对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
KafkaSourceYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 Kafka 事件源是否已创建:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE kafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13m
NAME READY STATUS RESTARTS AGE kafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.4. 为 Apache Kafka 源配置 SASL 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt证书文件。 -
已安装 OpenShift (
oc) CLI。
流程
在所选命名空间中创建证书文件作为 secret:
oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \1 --from-literal=user="my-sasl-user"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- SASL 类型可以是
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。
创建或修改 Kafka 源,使其包含以下
spec配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用公共云 Kafka 服务,则不需要
caCertspec。
2.6. 自定义事件源 复制链接链接已复制到粘贴板!
如果您需要从 Knative 中没有包含在 Knative 的事件制作者或发出没有 CloudEvent 格式的事件的制作者中入站事件,您可以通过创建自定义事件源来实现此目标。您可以使用以下方法之一创建自定义事件源:
-
通过创建接收器绑定,将
PodSpecable对象用作事件源。 - 通过创建容器源,将容器用作事件源。
2.6.1. 接收器(sink)绑定 复制链接链接已复制到粘贴板!
SinkBinding 对象支持将事件产品与交付寻址分离。接收器绑定用于将 事件制作者 连接到事件消费者(sink) 。event producer 是一个 Kubernetes 资源,用于嵌入 PodSpec 模板并生成事件。sink 是一个可寻址的 Kubernetes 对象,可以接收事件。
SinkBinding 对象将环境变量注入到 sink 的 PodTemplateSpec 中,这意味着应用程序代码不需要直接与 Kubernetes API 交互来定位事件目的地。这些环境变量如下:
K_SINK- 解析 sink 的 URL。
K_CE_OVERRIDES- 指定出站事件覆盖的 JSON 对象。
SinkBinding 对象目前不支持服务的自定义修订名称。
2.6.1.1. 使用 YAML 创建接收器绑定 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建接收器绑定,您必须创建一个 YAML 文件来定义 SinkBinding 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要检查接收器绑定是否已正确设置,请创建一个 Knative 事件显示服务或事件接收器,在日志中转储传入的信息。
创建服务 YAML 文件:
服务 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建将事件定向到该服务的接收器绑定实例。
创建接收器绑定 YAML 文件:
服务 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,任何具有标签
app: heartbeat-cron的作业都将被绑定到事件 sink。
创建接收器绑定:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
CronJob对象。创建 cron 任务 YAML 文件:
Cron Job YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要使用接收器绑定,您必须手动在 Knative 资源中添加
bindings.knative.dev/include=true标签。例如,要将此标签添加到
CronJob资源,请将以下行添加到Job资源 YAML 定义中:jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 cron job:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令并检查输出,检查是否正确映射了控制器:
oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml
$ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看消息 dumper 功能日志,来验证 Kubernetes 事件是否已发送到 Knative 事件。
输入命令:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入命令:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6.1.2. 使用 Knative CLI 创建接收器绑定 复制链接链接已复制到粘贴板!
您可以使用 kn source binding create 命令通过 Knative (kn) CLI 创建接收器绑定。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
安装 Knative (
kn) CLI。 -
安装 OpenShift CLI (
oc) 。
以下操作过程要求您创建 YAML 文件。
如果更改了示例中使用的 YAML 文件的名称,则需要更新对应的 CLI 命令。
流程
要检查接收器绑定是否已正确设置,请创建一个 Knative 事件显示服务或事件 sink,在日志中转储传入的信息:
kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
$ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建将事件定向到该服务的接收器绑定实例:
kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display
$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
CronJob对象。创建 cron 任务 YAML 文件:
Cron Job YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要使用接收器绑定,您必须手动在 Knative CR 中添加
bindings.knative.dev/include=true标签。例如,要将此标签添加到
CronJobCR,请将以下行添加到JobCR YAML 定义中:jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 cron job:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令并检查输出,检查是否正确映射了控制器:
kn source binding describe bind-heartbeat
$ kn source binding describe bind-heartbeatCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看消息 dumper 功能日志,来验证 Kubernetes 事件是否已发送到 Knative 事件。
您可以输入以下命令来查看消息转储程序功能日志:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6.1.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。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 \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.6.1.3. 使用 Web 控制台创建接收器绑定 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建接收器绑定。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建 Knative 服务以用作接收器:
- 在 Developer 视角中,导航到 +Add → YAML。
复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
创建用作事件源的
CronJob资源,并每分钟发送一个事件。- 在 Developer 视角中,导航到 +Add → YAML。
复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 确保包含
bindings.knative.dev/include: true标签。OpenShift Serverless 的默认命名空间选择行为使用包含模式。
- 点 Create。
在与上一步中创建的服务相同的命名空间中创建接收器绑定,或您要将事件发送到的任何其他接收器。
- 在 Developer 视角中,导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
选择 Sink Binding,然后单击 Create Event Source。此时会显示 Create Event Source 页面。
注意您可以使用 Form view 或 YAML view 配置 Sink Binding 设置,并可以在两者间切换。在不同视图间切换时数据会被保留。
-
在 apiVersion 字段中,输入
batch/v1。 在 Kind 字段中,输入
Job。注意OpenShift Serverless sink 绑定不支持
CronJobkind,因此 Kind 字段必须以 cron 任务创建的Job对象为目标,而不是 cron 作业对象本身。-
选择一个 Sink。这可以是 Resource 或一个 URI。在这个示例中,上一步中创建的
event-display服务被用作 Resource sink。 在 Match labels 部分:
-
在 Name 字段中输入
app。 在 Value 字段中输入
heartbeat-cron。注意使用带有接收器绑定的 cron 任务时,需要标签选择器,而不是资源名称。这是因为,Cron Job 创建的作业没有可预测的名称,并在名称中包含随机生成的字符串。例如,
hearthbeat-cron-1cc23f.
-
在 Name 字段中输入
- 点 Create。
验证
您可以通过查看 Topology 页面和 pod 日志来验证接收器绑定、接收器和 cron 任务是否已创建并正常工作。
- 在 Developer 视角中,导航到 Topology。
查看接收器绑定、接收器和心跳 cron 任务。
- 观察在添加了接收器绑定后 cron 任务正在注册成功的作业。这意味着接收器绑定成功重新配置由 cron 任务创建的作业。
-
浏览
event-display服务 pod 的日志,以查看 heartbeats cron 作业生成的事件。
2.6.1.4. 接收器绑定引用 复制链接链接已复制到粘贴板!
您可以通过创建接收器绑定,将 PodSpecable 对象用作事件源。您可以在创建 SinkBinding 对象时配置多个参数。
SinkBinding 对象支持以下参数:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定 API 版本,如 | 必需 |
|
|
将此资源对象标识为 | 必需 |
|
|
指定唯一标识 | 必需 |
|
|
指定此 | 必需 |
|
| 对解析为 URI 作为 sink 的对象的引用。 | 必需 |
|
| 提及通过绑定实施来增强运行时合同的资源。 | 必需 |
|
| 定义覆盖来控制发送到 sink 的事件的输出格式和修改。 | 选填 |
2.6.1.4.1. 主题参数 复制链接链接已复制到粘贴板!
Subject 参数引用通过绑定实施来增强运行时合同的资源。您可以为 Subject 定义配置多个字段。
Subject 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
| 引用的 API 版本。 | 必需 |
|
| 引用的类型。 | 必需 |
|
| 引用的命名空间。如果省略,则默认为对象的命名空间。 | 选填 |
|
| 引用的名称。 |
如果配置 |
|
| 引用的选择器。 |
如果配置 |
|
| 标签选择器要求列表。 |
仅使用 |
|
| 选择器应用到的标签键。 |
使用 |
|
|
代表键与一组值的关系。有效的运算符为 |
使用 |
|
|
字符串值数组。如果 |
使用 |
|
|
键值对映射. |
仅使用 |
主题参数示例
根据以下 YAML,选择 default 命名空间中名为 mysubject 的 Deployment 对象:
根据以下 YAML,可以选择在 default 命名空间中带有 working=example 标签的 Job 对象:
根据以下 YAML,可以选择在 default 命名空间中带有标签 working=example 或 working=sample 的 Pod 对象:
2.6.1.4.2. CloudEvent 覆盖 复制链接链接已复制到粘贴板!
ceOverrides 定义提供覆盖控制发送到 sink 的 CloudEvent 输出格式和修改。您可以为 ceOverrides 定义配置多个字段。
ceOverrides 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定在出站事件中添加或覆盖哪些属性。每个 | 选填 |
仅允许有效的 CloudEvent 属性名称作为扩展。您无法从扩展覆盖配置设置 spec 定义的属性。例如,您无法修改 type 属性。
CloudEvent Overrides 示例
这会在 主题 上设置 K_CE_OVERRIDES 环境变量:
输出示例
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
2.6.1.4.3. include 标签 复制链接链接已复制到粘贴板!
要使用接收器绑定,您需要为资源或包含资源的命名空间分配 bindings.knative.dev/include: "true" 标签。如果资源定义不包括该标签,集群管理员可以通过运行以下命令将它附加到命名空间:
oc label namespace <namespace> bindings.knative.dev/include=true
$ oc label namespace <namespace> bindings.knative.dev/include=true
2.6.2. 容器源 复制链接链接已复制到粘贴板!
容器源创建容器镜像来生成事件并将事件发送到 sink。您可以通过创建容器镜像和使用您的镜像 URI 的 ContainerSource 对象,使用容器源创建自定义事件源。
2.6.2.1. 创建容器镜像的指南 复制链接链接已复制到粘贴板!
两个环境变量由容器源控制器注入:K_SINK 和 K_CE_OVERRIDES。这些变量分别从 sink 和 andceOverrides spec 解析。事件发送到 K_SINK 环境变量中指定的 sink URI。该消息必须使用 CloudEvent HTTP 格式作为 POST 发送。
容器镜像示例
以下是心跳容器镜像的示例:
以下是引用先前心跳容器镜像的容器源示例:
2.6.2.2. 使用 Knative CLI 创建和管理容器源 复制链接链接已复制到粘贴板!
您可以使用 kn source container 命令来使用 Knative (kn) 创建和管理容器源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
创建容器源
kn source container create <container_source_name> --image <image_uri> --sink <sink>
$ kn source container create <container_source_name> --image <image_uri> --sink <sink>
删除容器源
kn source container delete <container_source_name>
$ kn source container delete <container_source_name>
描述容器源
kn source container describe <container_source_name>
$ kn source container describe <container_source_name>
列出现有容器源
kn source container list
$ kn source container list
以 YAML 格式列出现有容器源
kn source container list -o yaml
$ kn source container list -o yaml
更新容器源
此命令为现有容器源更新镜像 URI:
kn source container update <container_source_name> --image <image_uri>
$ kn source container update <container_source_name> --image <image_uri>
2.6.2.3. 使用 Web 控制台创建容器源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 Web 控制台创建容器源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 在 Developer 视角中,导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 选择 Container Source,然后点 Create Event Source。此时会显示 Create Event Source 页面。
使用 Form view 或 YAML 视图配置 Container Source 设置:
注意您可以在 Form view 和 YAML view 间进行切换。在不同视图间切换时数据会被保留。
- 在 Image 字段中,输入您要在由容器源创建的容器中运行的镜像的 URI。
- 在 Name 字段中输入镜像的名称。
- 可选:在 Arguments 参数字段中,输入要传递给容器的任何参数。
- 可选:在 Environment variables 字段中,添加容器中要设置的任何环境变量。
在 Sink 部分,添加一个接收器,其中将容器源的事件路由到其中。如果使用 Form 视图,您可以从以下选项中选择:
- 选择 Resource 使用频道、代理或服务作为事件源的接收器。
- 选择 URI,以指定容器源的事件路由到的位置。
- 配置完容器源后,点 Create。
2.6.2.4. 容器源参考 复制链接链接已复制到粘贴板!
您可以通过创建 ContainerSource 对象来使用容器作为事件源。您可以在创建 ContainerSource 对象时配置多个参数。
ContainerSource 对象支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定 API 版本,如 | 必需 |
|
|
将此资源对象标识为 | 必需 |
|
|
指定唯一标识 | 必需 |
|
|
指定此 | 必需 |
|
| 对解析为 URI 作为 sink 的对象的引用。 | 必需 |
|
|
| 必需 |
|
| 定义覆盖来控制发送到 sink 的事件的输出格式和修改。 | 选填 |
模板参数示例
2.6.2.4.1. CloudEvent 覆盖 复制链接链接已复制到粘贴板!
ceOverrides 定义提供覆盖控制发送到 sink 的 CloudEvent 输出格式和修改。您可以为 ceOverrides 定义配置多个字段。
ceOverrides 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定在出站事件中添加或覆盖哪些属性。每个 | 选填 |
仅允许有效的 CloudEvent 属性名称作为扩展。您无法从扩展覆盖配置设置 spec 定义的属性。例如,您无法修改 type 属性。
CloudEvent Overrides 示例
这会在 主题 上设置 K_CE_OVERRIDES 环境变量:
输出示例
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
2.7. 使用 Developer 视角将事件源连接到接收器(sink) 复制链接链接已复制到粘贴板!
当使用 OpenShift Container Platform Web 控制台创建事件源时,您可以指定事件从该源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
2.7.1. 使用 Developer 视角将事件源连接到接收器(sink) 复制链接链接已复制到粘贴板!
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台,且处于 Developer 视角。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了 sink,如 Knative 服务、频道或代理。
流程
- 进入 +Add → Event Source 并选择您要创建的事件源类型,创建任何类型的事件源。
- 在 Create Event Source 表单视图的 Sink 部分,在 Resource 列表中选择您的接收器。
- 点 Create。
验证
您可以通过查看 Topology 页面来验证事件源是否已创建并连接到 sink。
- 在 Developer 视角中,导航到 Topology。
- 查看事件源并点连接的接收器查看右侧面板中的接收器详情。
第 3 章 事件 sink 复制链接链接已复制到粘贴板!
3.1. 事件 sink 复制链接链接已复制到粘贴板!
在创建事件源时,您可以指定事件从源发送到的事件接收器(sink)。事件接收器是一个可寻址或可调用的资源,可以从其他资源接收传入的事件。Knative 服务、频道和代理都是事件接收器示例。还有一个特定的 Apache Kafka 接收器类型。
可寻址的对象接收和确认通过 HTTP 发送的事件到其 status.address.url 字段中定义的地址。作为特殊情况,核心 Kubernetes Service 对象也履行可寻址的接口。
可调用的对象可以接收通过 HTTP 发送的事件并转换事件,并在 HTTP 响应中返回 0 或 1 新事件。这些返回的事件可能会象处理外部事件源中的事件一样进一步处理。
3.1.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。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 \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
您可以通过自定义 kn,配置哪些 CR 可在 Knative (kn) CLI 命令中使用 --sink 标记。
3.2. 创建事件接收器 复制链接链接已复制到粘贴板!
在创建事件源时,您可以指定事件从源发送到的事件接收器(sink)。事件接收器是一个可寻址或可调用的资源,可以从其他资源接收传入的事件。Knative 服务、频道和代理都是事件接收器示例。还有一个特定的 Apache Kafka 接收器类型。
有关创建可用作事件接收器的资源的详情,请查看以下文档:
3.3. Apache Kafka 的接收器 复制链接链接已复制到粘贴板!
Apache Kafka sink 是集群中启用了 Apache Kafka 时可用的事件 sink 类型。您可以使用 Kafka sink 将事件从事件源发送到 Kafka 主题。
3.3.1. 使用 YAML 创建 Apache Kafka sink 复制链接链接已复制到粘贴板!
您可以创建一个 Kafka 接收器将事件发送到 Kafka 主题。默认情况下,Kafka sink 使用二进制内容模式,其效率比结构化模式更高效。要使用 YAML 创建 Kafka sink,您必须创建一个 YAML 文件来定义 KafkaSink 对象,然后使用 oc apply 命令应用它。
先决条件
-
在集群中安装了 OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源 (CR) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
-
安装 OpenShift CLI (
oc) 。
流程
创建一个
KafkaSink对象定义作为一个 YAML 文件:Kafka sink YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 Kafka sink,请应用
KafkaSinkYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置事件源,以便在其 spec 中指定 sink:
连接到 API 服务器源的 Kafka sink 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 OpenShift Container Platform Web 控制台中的 Developer 视角创建一个 Kafka 接收器将事件发送到 Kafka 主题。默认情况下,Kafka sink 使用二进制内容模式,其效率比结构化模式更高效。
作为开发人员,您可以创建一个事件 sink 来从特定源接收事件并将其发送到 Kafka 主题。
先决条件
- 您已从 OperatorHub 安装了带有 Knative Serving、Knative Eventing 和 Knative 代理的 OpenShift Serverless Operator。
- 您已在 Kafka 环境中创建了一个 Kafka 主题。
流程
- 在 Developer 视角中,进入到 +Add 视图。
- 点 Eventing 目录中的 Event Sink。
-
在目录项中搜索
KafkaSink并点它。 - 点 Create Event Sink。
在表单视图中,键入 bootstrap 服务器的 URL,这是主机名和端口的组合。
- 键入要发送事件数据的主题名称。
- 键入事件 sink 的名称。
- 点 Create。
验证
- 在 Developer 视角中,进入 Topology 视图。
- 点创建的事件 sink 在右侧面板中查看其详情。
3.3.3. 为 Apache Kafka sink 配置安全性 复制链接链接已复制到粘贴板!
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Apache Kafka 的 Knative 代理实现唯一支持的流量加密方法。
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源(CR)已安装在 OpenShift Container Platform 集群中。 -
在
KnativeKafkaCR 中启用了 Kafka sink。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem文件的密钥。 -
已安装 OpenShift (
oc) CLI。 -
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。
流程
在与
KafkaSink对象相同的命名空间中创建一个 secret:重要证书和密钥必须采用 PEM 格式。
对于使用 SASL 时没有加密的身份验证:
oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SASL_PLAINTEXT \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-literal=user=<username> \ --from-literal=password=<password>
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SASL_PLAINTEXT \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-literal=user=<username> \ --from-literal=password=<password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于使用 TLS 的 SASL 和加密进行身份验证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用公共云管理的 Kafka 服务,可以省略
ca.crt来使用系统的 root CA 设置。
使用 TLS 进行身份验证和加密:
oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=<my_caroot.pem_file_path> \ --from-file=user.crt=<my_cert.pem_file_path> \ --from-file=user.key=<my_key.pem_file_path>
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=<my_caroot.pem_file_path> \1 --from-file=user.crt=<my_cert.pem_file_path> \ --from-file=user.key=<my_key.pem_file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用公共云管理的 Kafka 服务,可以省略
ca.crt来使用系统的 root CA 设置。
创建或修改
KafkaSink对象,并在authspec 中添加对 secret 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
KafkaSink对象:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 代理(Broker) 复制链接链接已复制到粘贴板!
4.1. 代理(Broker) 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
4.2. 代理类型 复制链接链接已复制到粘贴板!
集群管理员可为集群设置 default 代理实施。创建代理时,会使用默认代理实现,除非在 Broker 对象中提供配置。
4.2.1. 用于开发的默认代理实现 复制链接链接已复制到粘贴板!
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。默认代理由 InMemoryChannel 频道实现支持。
如果要使用 Apache Kafka 减少网络跃点,请为 Apache Kafka 使用 Knative 代理实现。不要将基于频道的代理配置为由 KafkaChannel 频道实现支持。
4.2.2. Apache Kafka 的生产环境就绪的 Knative 代理实现 复制链接链接已复制到粘贴板!
对于生产环境就绪的 Knative Eventing 部署,红帽建议为 Apache Kafka 使用 Knative 代理实现。代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Knative 代理与 Kafka 有一个原生集成,用于存储和路由事件。它可以更好地与 Kafka 集成用于代理,并在其他代理类型中触发模型,并减少网络跃点。Knative 代理实现的其他优点包括:
- 最少一次的交付保证
- 根据 CloudEvents 分区扩展排序事件交付
- 数据平面的高可用性
- 水平扩展数据平面
Apache Kafka 的 Knative 代理实现使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的 data 规格与 Kafka 记录的值对应。
4.3. 创建代理 复制链接链接已复制到粘贴板!
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。
如果集群管理员将 OpenShift Serverless 部署配置为使用 Apache Kafka 作为默认代理类型,使用默认设置创建代理会为 Apache Kafka 创建一个 Knative 代理。
如果您的 OpenShift Serverless 部署没有配置为使用 Apache Kafka 的 Knative 代理作为默认代理类型,则按照以下流程中的默认设置时会创建基于频道的代理。
4.3.1. 使用 Knative CLI 创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。通过使用 Knative (kn) CLI 创建代理,通过直接修改 YAML 文件来提供更简化的、直观的用户界面。您可以使用 kn broker create 命令创建代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建代理:
kn broker create <broker_name>
$ kn broker create <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
kn命令列出所有现有代理:kn broker list
$ kn broker listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
4.3.2. 通过注解触发器来创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过将 eventing.knative.dev/injection: enabled 注解添加到 Trigger 对象来创建代理。
如果您使用 eventing.knative.dev/injection: enabled 注解创建代理,则在没有集群管理员权限的情况下无法删除该代理。如果您在集群管理员还没有删除此注解前删除了代理,则代理会在删除后再次被创建。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
Trigger对象作为 YAML 文件,该文件带有eventing.knative.dev/injection: enabled注解:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定触发器将事件发送到的事件 sink 或 subscriber。
应用
TriggerYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 oc CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
输入以下
oc命令来获取代理:oc -n <namespace> get broker default
$ oc -n <namespace> get broker defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
4.3.3. 通过标记命名空间来创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过标记您拥有的命名空间或具有写入权限来自动创建 default 代理。
如果您删除该标签,则不会删除使用这个方法创建的代理。您必须手动删除它们。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 如果您使用 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated,则具有集群或专用管理员权限。
流程
使用
eventing.knative.dev/injection=enabled标识一个命名空间:oc label namespace <namespace> eventing.knative.dev/injection=enabled
$ oc label namespace <namespace> eventing.knative.dev/injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 oc CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
使用
oc命令获取代理:oc -n <namespace> get broker <broker_name>
$ oc -n <namespace> get broker <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc -n default get broker default
$ oc -n default get broker defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
4.3.4. 删除通过注入创建的代理 复制链接链接已复制到粘贴板!
如果通过注入创建了一个代理并在以后需要删除它时,您必须手动删除它。如果删除了标签或注解,则使用命名空间标签或触发器注解创建的代理不会被永久删除。
先决条件
-
安装 OpenShift CLI (
oc) 。
流程
从命名空间中删除
eventing.knative.dev/injection=enabled标识:oc label namespace <namespace> eventing.knative.dev/injection-
$ oc label namespace <namespace> eventing.knative.dev/injection-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 移除注解可防止 Knative 在删除代理后重新创建代理。
从所选命名空间中删除代理:
oc -n <namespace> delete broker <broker_name>
$ oc -n <namespace> delete broker <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
oc命令获取代理:oc -n <namespace> get broker <broker_name>
$ oc -n <namespace> get broker <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc -n default get broker default
$ oc -n default get broker defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.5. 使用 Web 控制台创建代理 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建代理。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建代理。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 在 Developer 视角中,进入到 +Add → Broker。此时会显示 Broker 页面。
-
可选。更新代理的名称。如果您没有更新名称,则生成的代理名为
default。 - 点 Create。
验证
您可以通过在 Topology 页面中查看代理组件来验证代理是否已创建。
- 在 Developer 视角中,导航到 Topology。
查看
mt-broker-ingress、mt-broker-filter和mt-broker-controller组件。
4.3.6. 使用 Administrator 视角创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless → Eventing。
- 在 Create 列表中,选择 Broker。您将进入 Create Broker 页面。
- 可选:修改代理的 YAML 配置。
- 点 Create。
4.3.7. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅 配置事件交付参数 的示例。
4.4. 配置默认代理支持频道 复制链接链接已复制到粘贴板!
如果您使用基于频道的代理,您可以将代理的默认后备频道类型设置为 InMemoryChannel 或 KafkaChannel。
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 OpenShift (
oc) CLI。 -
如果要使用 Apache Kafka 频道作为默认后备频道类型,还必须在集群中安装
KnativeKafkaCR。
流程
修改
KnativeEventing自定义资源 (CR)以添加config-br-default-channel配置映射的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用更新的
KnativeEventingCR:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 配置默认代理类 复制链接链接已复制到粘贴板!
您可以使用 config-br-defaults 配置映射来指定 Knative Eventing 的默认代理类设置。您可以为整个集群或一个或多个命名空间指定默认代理类。目前,支持 MTChannelBasedBroker 和 Kafka 代理类型。
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
如果要将 Apache Kafka 的 Knative 代理用作默认代理实现,还必须在集群中安装
KnativeKafkaCR。
流程
修改
KnativeEventing自定义资源,以添加config-br-defaults配置映射的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Knative Eventing 的默认代理类。
- 2
- 在
spec.config中,您可以指定您要为修改的配置添加的配置映射。 - 3
config-br-defaults配置映射指定任何没有指定spec.config设置或代理类的代理的默认设置。- 4
- 集群范围的默认代理类配置。在本例中,集群的默认代理类实现是
Kafka。 - 5
kafka-broker-config配置映射指定 Kafka 代理的默认设置。请参阅"添加资源"部分中的"为 Apache Kafka 设置配置 Knative 代理"。- 6
- 存在
kafka-broker-config配置映射的命名空间。 - 7
- 命名空间范围的默认代理类配置。在本例中,
my-namespace命名空间的默认代理类实现是MTChannelbasedBroker。您可以为多个命名空间指定默认代理类实现。 - 8
config-br-default-channel配置映射指定代理的默认后备频道。请参阅"Additional resources"部分的"配置默认代理支持频道"部分。- 9
config-br-default-channel配置映射所在的命名空间。
重要配置特定于命名空间的默认设置会覆盖任何集群范围的设置。
4.6. Apache Kafka 的 Knative 代理实现 复制链接链接已复制到粘贴板!
对于生产环境就绪的 Knative Eventing 部署,红帽建议为 Apache Kafka 使用 Knative 代理实现。代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Knative 代理与 Kafka 有一个原生集成,用于存储和路由事件。它可以更好地与 Kafka 集成用于代理,并在其他代理类型中触发模型,并减少网络跃点。Knative 代理实现的其他优点包括:
- 最少一次的交付保证
- 根据 CloudEvents 分区扩展排序事件交付
- 数据平面的高可用性
- 水平扩展数据平面
Apache Kafka 的 Knative 代理实现使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的 data 规格与 Kafka 记录的值对应。
4.6.1. 当没有配置为 default 代理类型时,创建 Apache Kafka 代理 复制链接链接已复制到粘贴板!
如果您的 OpenShift Serverless 部署没有配置为使用 Kafka 代理作为默认代理类型,您仍可使用以下步骤创建基于 Kafka 的代理。
4.6.1.1. 使用 YAML 创建 Apache Kafka 代理 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建 Kafka 代理,您必须创建一个 YAML 文件来定义 Broker 对象,然后使用 oc apply 命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
创建一个基于 Kafka 的代理作为 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用基于 Kafka 的代理 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.1.2. 创建使用外部管理的 Kafka 主题的 Apache Kafka 代理 复制链接链接已复制到粘贴板!
如果要在不创建自己的内部主题的情况下使用 Kafka 代理,您可以使用外部管理的 Kafka 主题。要做到这一点,您必须创建一个使用 kafka.eventing.knative.dev/external.topic 注解的 Kafka Broker 对象。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 - 您可以访问一个 Kafka 实例,如 Red Hat AMQ Streams,并创建了 Kafka 主题。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
4.6.1.3. 使用隔离数据平面的 Apache Kafka 的 Knative Broker 实现 复制链接链接已复制到粘贴板!
带有隔离数据平面的 Apache Kafka 的 Knative Broker 实现只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Apache Kafka 的 Knative Broker 实现有 2 个平面:
- Control plane(控制平面)
- 由与 Kubernetes API 通信、监视自定义对象和管理数据平面的控制器组成。
- 数据平面
-
侦听传入事件、与 Apache Kafka 通信以及向事件接收器发送事件的组件集合。Apache Kafka 数据平面的 Knative Broker 实现是事件流的位置。实现由
kafka-broker-receiver和kafka-broker-dispatcher部署组成。
当您配置 Kafka 的代理类时,Apache Kafka 的 Knative Broker 实现会使用共享的数据平面。这意味着 knative-eventing 命名空间中的 kafka-broker-receiver 和 kafka-broker-dispatcher 部署用于集群中的所有 Apache Kafka Broker。
但是,当您配置 KafkaNamespaced 的代理类时,Apache Kafka 代理控制器会为代理存在的每个命名空间创建一个新的数据平面。该数据平面都会被该命名空间中的所有 KafkaNamespaced 代理使用。这提供了数据平面之间的隔离,因此用户命名空间中的 kafka-broker-receiver 和 kafka-broker-dispatcher 部署仅用于该命名空间中的代理。
由于具有单独的数据平面,这个安全功能会创建更多部署并使用更多资源。除非有这样的隔离要求,请使用一个带有 Kafka 类的 常规 代理。
4.6.1.4. 为使用隔离的数据平面的 Apache Kafka 创建 Knative 代理 复制链接链接已复制到粘贴板!
带有隔离数据平面的 Apache Kafka 的 Knative Broker 实现只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
要创建 KafkaNamespaced 代理,您必须将 eventing.knative.dev/broker.class 注解设置为 KafkaNamespaced。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 - 您可以访问 Apache Kafka 实例,如 Red Hat AMQ Streams,并创建了 Kafka 主题。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
使用 YAML 文件创建基于 Apache Kafka 的代理:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用基于 Apache Kafka 的代理 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
spec.config 中的 ConfigMap 对象必须与 Broker 对象位于同一个命名空间中:
使用 KafkaNamespaced 类创建第一个 Broker 对象后,在命名空间中创建 kafka-broker-receiver 和 kafka-broker-dispatcher 部署。因此,同一命名空间中的 KafkaNamespaced 类的所有代理都将使用相同的数据平面。如果命名空间中没有 KafkaNamespaced 类的代理,则会删除命名空间中的数据平面。
4.6.2. 配置 Apache Kafka 代理设置 复制链接链接已复制到粘贴板!
您可以通过创建配置映射并在 Kafka Broker 对象中引用此配置映射,配置复制因素、bootstrap 服务器和 Kafka 代理的主题分区数量。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源(CR)已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
修改
kafka-broker-config配置映射,或创建自己的配置映射来包含以下配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要default.topic.replication.factor值必须小于或等于集群中的 Kafka 代理实例数量。例如,如果您只有一个 Kafka 代理,则default.topic.replication.factor值应该不超过"1"。Kafka 代理配置映射示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置映射:
$ oc apply -f <config_map_filename>
$ oc apply -f <config_map_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 Kafka
Broker对象的配置映射:Broker 对象示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用代理:
$ oc apply -f <broker_filename>
$ oc apply -f <broker_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3. Apache Kafka 的 Knative 代理实现的安全配置 复制链接链接已复制到粘贴板!
Kafka 集群通常使用 TLS 或 SASL 身份验证方法进行保护。您可以使用 TLS 或 SASL 将 Kafka 代理或频道配置为针对受保护的 Red Hat AMQ Streams 集群进行操作。
红帽建议您同时启用 SASL 和 TLS。
4.6.3.1. 为 Apache Kafka 代理配置 TLS 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Apache Kafka 的 Knative 代理实现唯一支持的流量加密方法。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem文件的密钥。 -
安装 OpenShift CLI (
oc) 。
流程
在
knative-eventing命名空间中创建证书文件作为 secret:oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem
$ oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用密钥名称
ca.crt、user.crt和user.key。不要更改它们。编辑
KnativeKafkaCR,并在brokerspec 中添加对 secret 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3.2. 为 Apache Kafka 代理配置 SASL 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt证书文件。 -
安装 OpenShift CLI (
oc) 。
流程
在
knative-eventing命名空间中创建证书文件作为 secret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用键名
ca.crt,password, 和sasl.mechanism.不要更改它们。 如果要将 SASL 与公共 CA 证书搭配使用,您必须在创建 secret 时使用
tls.enabled=true标志,而不是使用ca.crt参数。例如:oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用键名
编辑
KnativeKafkaCR,并在brokerspec 中添加对 secret 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. 管理代理 复制链接链接已复制到粘贴板!
Knative (kn) CLI 提供了可用于描述和列出现有代理的命令。
4.7.1. 使用 Knative CLI 列出现有代理 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 列出代理提供了精简且直观的用户界面。您可以使用 kn broker list 命令列出集群中的现有代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。
流程
列出所有存在的代理:
kn broker list
$ kn broker listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.2. 使用 Knative CLI 描述现有代理 复制链接链接已复制到粘贴板!
使用 Knative (kn) 描述代理提供了精简且直观的用户界面。您可以使用 kn broker describe 命令通过 Knative CLI 输出集群中现有代理的信息。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。
流程
描述现有代理:
kn broker describe <broker_name>
$ kn broker describe <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 default broker 的命令示例
kn broker describe default
$ kn broker describe defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8. 事件交付 复制链接链接已复制到粘贴板!
您可以配置事件交付参数,当事件无法发送到事件 sink 时。配置事件交付参数,包括死信接收器,可确保重试任何无法发送到事件接收器的事件。否则,未验证的事件将被丢弃。
4.8.1. 频道和代理的事件交付行为模式 复制链接链接已复制到粘贴板!
不同的频道和代理类型都有自己的行为模式,用于事件交付。
4.8.1.1. Apache Kafka 的 Knative 频道和代理 复制链接链接已复制到粘贴板!
如果事件成功传送到 Kafka 频道或代理接收器,接收器会使用一个 202 状态代码进行响应,这意味着该事件已被安全地存储在 Kafka 主题中且不会丢失。
如果接收器使用任何其他状态代码响应,则事件不会被安全存储,用户必须执行步骤来解决这个问题。
4.8.2. 可配置事件交付参数 复制链接链接已复制到粘贴板!
为事件交付配置以下参数:
- 死信接收器
-
您可以配置
deadLetterSink交付参数,以便在事件无法发送时,它存储在指定的事件 sink 中。取消请求没有存储在死信接收器中的事件会被丢弃。死信接收器是符合 Knative Eventing sink 合同的任何可寻址对象,如 Knative 服务、Kubernetes 服务或一个 URI。 - Retries
-
您可以通过使用整数值配置重试 delivery 参数,在事件发送到 dead letter sink 前
重试交付的次数。 - Back off 延迟
-
您可以设置
backoffDelay交付参数,以在失败后尝试事件交付重试前指定延迟。backoffDelay参数的持续时间使用 ISO 8601 格式指定。例如,PT1S指定 1 秒延迟。 - Back off 策略
-
backoffPolicy交付参数可以用来指定重试避退策略。该策略可以指定为linear或exponential。当使用linearback off 策略时,back off 延迟等同于backoffDelay * <numberOfRetries>。当使用exponentialbackoff 策略时,back off 的延迟等于backoffDelay*2^<numberOfRetries>。
4.8.3. 配置事件交付参数示例 复制链接链接已复制到粘贴板!
您可以为 Broker、Trigger、Channel 和 Subscription 对象配置事件交付参数。如果您为代理或频道配置事件交付参数,这些参数会传播到为这些对象创建的触发器或订阅。您还可以为触发器或订阅设置事件交付参数,以覆盖代理或频道的设置。
Broker 对象示例
Trigger 对象示例
Channel 对象示例
Subscription 对象示例
4.8.4. 为触发器配置事件交付顺序 复制链接链接已复制到粘贴板!
如果使用 Kafka 代理,您可以将事件的交付顺序从触发器配置为事件 sink。
先决条件
- OpenShift Serverless Operator、Knative Eventing 和 Knative Kafka 安装在 OpenShift Container Platform 集群中。
- Kafka 代理被启用在集群中使用,您也创建了一个 Kafka 代理。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift (
oc) CLI。
流程
创建或修改
Trigger对象并设置kafka.eventing.knative.dev/delivery.order注解:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 支持的消费者交付保证有:
unordered- 未排序的消费者是一种非阻塞消费者,它能以未排序的方式提供消息,同时保持正确的偏移管理。
排序的一个订购的消费者是一个按分区阻止消费者,在提供分区的下一个消息前等待来自 CloudEvent 订阅者成功响应。
默认排序保证是
unordered。
应用
Trigger对象:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 触发器 复制链接链接已复制到粘贴板!
5.1. 触发器概述 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
如果您将 Knative 代理用于 Apache Kafka,您可以将事件的交付顺序从触发器配置为事件 sink。请参阅为触发器配置事件交付顺序。
5.1.1. 为触发器配置事件交付顺序 复制链接链接已复制到粘贴板!
如果使用 Kafka 代理,您可以将事件的交付顺序从触发器配置为事件 sink。
先决条件
- OpenShift Serverless Operator、Knative Eventing 和 Knative Kafka 安装在 OpenShift Container Platform 集群中。
- Kafka 代理被启用在集群中使用,您也创建了一个 Kafka 代理。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift (
oc) CLI。
流程
创建或修改
Trigger对象并设置kafka.eventing.knative.dev/delivery.order注解:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 支持的消费者交付保证有:
unordered- 未排序的消费者是一种非阻塞消费者,它能以未排序的方式提供消息,同时保持正确的偏移管理。
排序的一个订购的消费者是一个按分区阻止消费者,在提供分区的下一个消息前等待来自 CloudEvent 订阅者成功响应。
默认排序保证是
unordered。
应用
Trigger对象:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅 配置事件交付参数 的示例。
5.2. 创建触发器 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
5.2.1. 使用 Administrator 视角创建触发器 复制链接链接已复制到粘贴板!
使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建触发器。在集群中安装 Knative Eventing 并创建了代理后,您可以使用 web 控制台创建触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
- 您已创建了 Knative 代理。
- 您已创建了 Knative 服务以用作订阅者。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless → Eventing。
-
在 Broker 选项卡中,为您要在其中添加触发器的代理选择 Options 菜单
。
- 点列表中的 Add Trigger。
- 在 Add Trigger 对话框中,为触发器选择 Subscriber。订阅者是可以从代理接收事件的 Knative 服务。
- 点 Add。
5.2.2. 使用 Developer 视角创建触发器 复制链接链接已复制到粘贴板!
使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建触发器。在集群中安装 Knative Eventing 并创建了代理后,您可以使用 web 控制台创建触发器。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了代理和 Knative 服务或其他事件 sink 以连接触发器。
流程
- 在 Developer 视角中,进入 Topology 页。
- 将鼠标悬停在您要创建触发器的代理上,并拖动箭头。此时会显示 Add Trigger 选项。
- 点 Add Trigger。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
验证
- 创建订阅后,您可以在 Topology 页面中查看它,其中它是一个将代理连接到事件 sink 的行。
删除触发器
- 在 Developer 视角中,进入 Topology 页。
- 点您要删除的触发器。
- 在 Actions 上下文菜单中,选择 Delete Trigger。
5.2.3. 使用 Knative CLI 创建触发器 复制链接链接已复制到粘贴板!
您可以使用 kn trigger create 命令创建触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建触发器:
kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>
$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以创建触发器并使用代理注入同时创建
default代理:kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>
$ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,触发器会将发送到代理的所有事件转发到订阅到该代理的 sink。通过对触发器使用
--filter属性,您可以从代理过滤事件,这样订阅者才会根据您定义的标准接收一小部分事件。
5.3. 从命令行列出触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 列出触发器提供精简、直观的用户界面。
5.3.1. 使用 Knative CLI 列出触发器 复制链接链接已复制到粘贴板!
您可以使用 kn trigger list 命令列出集群中的现有触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。
流程
显示可用触发器列表:
kn trigger list
$ kn trigger listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 True
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:以 JSON 格式输出触发器列表:
kn trigger list -o json
$ kn trigger list -o jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 描述从命令行中的触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 描述触发器,提供了一个简化且直观的用户界面。
5.4.1. 使用 Knative CLI 描述触发器 复制链接链接已复制到粘贴板!
您可以通过 kn trigger describe 命令使用 Knative CLI 输出集群中现有触发器的信息。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了触发器。
流程
输入命令:
kn trigger describe <trigger_name>
$ kn trigger describe <trigger_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 将触发器连接到 sink 复制链接链接已复制到粘贴板!
您可以将触发器连接到 sink,以便在将代理的事件发送到 sink 前过滤代理的事件。在 Trigger 对象的资源规格中,连接到触发器的 sink 会配置为 订阅者。
连接到 Apache Kafka sink 的 Trigger 对象示例
5.6. 从命令行过滤触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 使用 kn CLI 通过触发器过滤事件,可提供精简且直观的用户界面。您可以使用 kn trigger create 命令和适当的标记来通过使用触发器过滤事件。
5.6.1. 使用 Knative CLI 使用触发器过滤事件 复制链接链接已复制到粘贴板!
在以下触发器示例中,只有带有属性 type: dev.knative.samples.helloworld 的事件才会发送到事件 sink:
kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
您还可以使用多个属性过滤事件。以下示例演示了如何使用类型、源和扩展属性过滤事件:
kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \ --filter type=dev.knative.samples.helloworld \ --filter source=dev.knative.samples/helloworldsource \ --filter myextension=my-extension-value
$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \
--filter type=dev.knative.samples.helloworld \
--filter source=dev.knative.samples/helloworldsource \
--filter myextension=my-extension-value
5.7. 从命令行更新触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 更新触发器提供精简、直观的用户界面。
5.7.1. 使用 Knative CLI 更新触发器 复制链接链接已复制到粘贴板!
您可以使用带有特定标志的 kn trigger update 命令来更新触发器的属性。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
更新触发器:
kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]
$ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以更新触发器来过滤与传入事件匹配的事件属性。例如,使用
type属性:kn trigger update <trigger_name> --filter type=knative.dev.event
$ kn trigger update <trigger_name> --filter type=knative.dev.eventCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以从触发器中删除过滤器属性。例如,您可以使用键
type来删除过滤器属性:kn trigger update <trigger_name> --filter type-
$ kn trigger update <trigger_name> --filter type-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
--sink参数来更改触发器的事件 sink:kn trigger update <trigger_name> --sink ksvc:my-event-sink
$ kn trigger update <trigger_name> --sink ksvc:my-event-sinkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. 从命令行删除触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 删除触发器提供精简而直观的用户界面。
5.8.1. 使用 Knative CLI 删除触发器 复制链接链接已复制到粘贴板!
您可以使用 kn trigger delete 命令删除触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
删除触发器:
kn trigger delete <trigger_name>
$ kn trigger delete <trigger_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出现有触发器:
kn trigger list
$ kn trigger listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证触发器不再存在:
输出示例
No triggers found.
No triggers found.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 Channels 复制链接链接已复制到粘贴板!
6.1. 频道和订阅 复制链接链接已复制到粘贴板!
频道是定义单一事件转发和持久层的自定义资源。事件源或生成程序在将事件发送到频道后,可使用订阅将这些事件发送到多个 Knative 服务或其他 sink。
您可以通过实例化受支持的 Channel 对象来创建频道,并通过修改 Subscription 对象中的 delivery 规格来配置重新发送尝试。
创建 Channel 对象后,根据默认频道实现,一个经过更改的准入 Webhook 会为 Channel 对象添加一组 spec.channelTemplate 属性。例如,对于 InMemoryChannel 默认实现,Channel 对象如下所示:
然后,频道控制器将根据这个 spec.channelTemplate 配置创建后备频道实例。
创建后,spec.channelTemplate 属性将无法更改,因为它们由默认频道机制设置,而不是由用户设置。
当此机制与上例搭配使用时,会创建两个对象:一个通用的后备频道和一个 InMemoryChannel 频道。如果您使用不同的默认频道实现,使用特定于您的实现的频道替换 InMemoryChannel。例如,在 Apache Kafka 的 Knative 代理中,会创建 KafkaChannel 频道。
后备频道充当将订阅复制到用户创建的频道对象的代理,并设置用户创建的频道对象状态来反映后备频道的状态。
6.1.1. 频道实现类型 复制链接链接已复制到粘贴板!
InMemoryChannel 和 KafkaChannel 频道实现可用于 OpenShift Serverless 进行开发。
以下是 InMemoryChannel 类型频道的限制:
- 事件没有持久性。如果 Pod 停机,则 Pod 上的事件将会丢失。
-
InMemoryChannel频道没有实现事件排序,因此同时接收到的两个事件可能会以任何顺序传送给订阅者。 -
如果订阅者拒绝某个事件,则不会默认重新发送尝试。您可以通过修改
Subscription对象中的delivery规格来配置重新发送尝试。
6.2. 创建频道 复制链接链接已复制到粘贴板!
频道是定义单一事件转发和持久层的自定义资源。事件源或生成程序在将事件发送到频道后,可使用订阅将这些事件发送到多个 Knative 服务或其他 sink。
您可以通过实例化受支持的 Channel 对象来创建频道,并通过修改 Subscription 对象中的 delivery 规格来配置重新发送尝试。
6.2.1. 使用 Administrator 视角创建频道 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 Administrator 视角创建频道。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless → Eventing。
- 在 Create 列表中,选择 Channel。您将被定向到 Channel 页。
选择您要在 Type 列表中创建的
Channel对象类型。注意目前默认只支持
InMemoryChannel频道对象。如果您在 OpenShift Serverless 上安装了 Apache Kafka 的 Knative 代理实现,则 Apache Kafka 的 Knative 频道可用。- 点 Create。
6.2.2. 使用 Developer 视角创建频道 复制链接链接已复制到粘贴板!
使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建频道。在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建频道。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 在 Developer 视角中,导航到 +Add → Channel。
-
选择您要在 Type 列表中创建的
Channel对象类型。 - 点 Create。
验证
通过导航到 Topology 页面确认频道现在存在。
6.2.3. 使用 Knative CLI 创建频道 复制链接链接已复制到粘贴板!
使用 Knative (kn) 创建频道提供了比直接修改 YAML 文件更精简且直观的用户界面。您可以使用 kn channel create 命令创建频道。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建频道:
kn channel create <channel_name> --type <channel_type>
$ kn channel create <channel_name> --type <channel_type>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 频道类型是可选的,但如果指定,则必须使用
Group:Version:Kind格式。例如,您可以创建一个InMemoryChannel对象:kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannel
$ kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Channel 'mychannel' created in namespace 'default'.
Channel 'mychannel' created in namespace 'default'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认该频道现在存在,请列出现有频道并检查输出:
kn channel list
$ kn channel listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
kn channel list NAME TYPE URL AGE READY REASON mychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s True
kn channel list NAME TYPE URL AGE READY REASON mychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除频道
删除频道:
kn channel delete <channel_name>
$ kn channel delete <channel_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4. 使用 YAML 创建默认实现频道 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述频道,并以可重复的方式描述频道。要使用 YAML 创建无服务器频道,您必须创建一个 YAML 文件来定义 Channel 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
Channel对象作为一个 YAML 文件:apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: default
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.5. 使用 YAML 为 Apache Kafka 创建频道 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述频道,并以可重复的方式描述频道。您可以通过创建一个 Kafka 频道,创建由 Kafka 主题支持的 Knative Eventing 频道。要使用 YAML 创建 Kafka 频道,您必须创建一个 YAML 文件来定义 KafkaChannel 对象,然后使用 oc apply 命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 -
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
KafkaChannel对象作为一个 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要仅支持 OpenShift Serverless 上的
KafkaChannel对象的v1beta1API 版本。不要使用这个 API 的v1alpha1版本,因为这个版本现已弃用。应用
KafkaChannelYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.6. 后续步骤 复制链接链接已复制到粘贴板!
- 创建频道后,您可以 将频道连接到 sink,以便 sink 可以接收事件。
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅 配置事件交付参数 的示例。
6.3. 将频道连接到 sink 复制链接链接已复制到粘贴板!
来自事件源或制作者发送到频道的事件可使用 订阅 转发到一个或多个 sink。您可以通过配置 Subscription 对象来创建订阅,它指定消耗发送到该频道的事件的频道和接收器(也称为 订阅者)。
6.3.1. 使用 Developer 视角创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建订阅。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了事件 sink,如 Knative 服务以及频道。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 在 Developer 视角中,进入 Topology 页。
使用以下方法之一创建订阅:
将鼠标悬停在您要为其创建订阅的频道上,并拖动箭头。此时会显示 Add Subscription 选项。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
- 如果服务在与频道相同的命名空间或项目下的 Topology 视图中可用,点击您要为该频道创建订阅的频道,并将箭头直接拖到服务以立即从频道创建订阅到该服务。
验证
创建订阅后,您可以在 Topology 视图中将频道连接到该服务的行显示为:
6.3.2. 使用 YAML 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述订阅,并以可重复的方式描述订阅。要使用 YAML 创建订阅,您必须创建一个 YAML 文件来定义 Subscription 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建
Subscription对象:创建 YAML 文件并将以下示例代码复制到其中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 订阅的名称。
- 2
- 订阅连接的频道的配置设置。
- 3
- 事件交付的配置设置。这会告诉订阅无法发送给订阅者的事件。配置后,消耗的事件会发送到
deadLetterSink。事件将被丢弃,不会尝试重新发送该事件,并在系统中记录错误。deadLetterSink的值需要是一个 Destination。 - 4
- 订阅用户的配置设置。这是事件从频道发送的事件 sink。
应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. 使用 Knative CLI 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 Knative (kn) CLI 创建订阅提供了比直接修改 YAML 文件更精简且直观的用户界面。您可以使用带有适当标志的 kn subscription create 命令创建订阅。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建订阅以将接收器连接到频道:
kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \ --sink <sink_prefix>:<sink_name> \ --sink-dead-letter <sink_prefix>:<sink_name>
$ kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \1 --sink <sink_prefix>:<sink_name> \2 --sink-dead-letter <sink_prefix>:<sink_name>3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--channel指定应处理的云事件的来源。您必须提供频道名称。如果您没有使用由Channel自定义资源支持的默认InMemoryChannel频道,您必须为指定频道类型添加<group:version:kind>前缀。例如,这是 Apache Kafka 支持的频道的messaging.knative.dev:v1beta1:KafkaChannel。- 2
--sink指定事件要传送到的目标目的地。默认情况下,<sink_name>解释为此名称的 Knative 服务,与订阅位于同一个命名空间中。您可以使用以下前缀之一指定接收器类型:ksvc- Knative 服务。
channel- 作为目的地的频道。这里只能引用默认频道类型。
broker- Eventing 代理。
- 3
- 可选:
--sink-dead-letter是一个可选标志,可用于指定在无法发送事件时哪些事件应发送到的接收器。如需更多信息,请参阅 OpenShift Serverless 事件交付文档。示例命令
kn subscription create mysubscription --channel mychannel --sink ksvc:event-display
$ kn subscription create mysubscription --channel mychannel --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Subscription 'mysubscription' created in namespace 'default'.
Subscription 'mysubscription' created in namespace 'default'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认频道已连接到事件接收器或 subscriber,使用一个订阅列出现有订阅并检查输出:
kn subscription list
$ kn subscription listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除订阅
删除订阅:
kn subscription delete <subscription_name>
$ kn subscription delete <subscription_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.4. 使用 Administrator 视角创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink(也称为 订阅者 )后,您可以创建一个订阅来启用事件交付。订阅是通过配置 Subscription 对象创建的,它指定了要向其发送事件的频道和订阅者。您还可以指定一些特定于订阅者的选项,比如如何处理失败。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
- 您已创建了 Knative 频道。
- 您已创建了 Knative 服务以用作订阅者。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless → Eventing。
-
在 Channel 选项卡中,选择您要在其中添加订阅的频道的 Options 菜单
。
- 点击列表中的 Add Subscription。
- 在 Add Subscription 对话框中,为订阅选择 Subscriber。订阅者是可以从频道接收事件的 Knative 服务。
- 点 Add。
6.3.5. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅 配置事件交付参数 的示例。
6.4. 默认频道实现 复制链接链接已复制到粘贴板!
default-ch-webhook 配置映射可以用来指定 Knative Eventing 的默认频道实现。您可以为整个集群或一个或多个命名空间指定默认频道实现。目前支持 InMemoryChannel 和 KafkaChannel 频道类型。
6.4.1. 配置默认频道实施 复制链接链接已复制到粘贴板!
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
如果要将 Apache Kafka 的 Knative 频道用作默认频道实现,还必须在集群中安装
KnativeKafkaCR。
流程
修改
KnativeEventing自定义资源,以添加default-ch-webhook配置映射的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要配置特定于命名空间的默认设置会覆盖任何集群范围的设置。
6.5. 频道的安全配置 复制链接链接已复制到粘贴板!
6.5.1. 为 Apache Kafka 的 Knative 频道配置 TLS 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Apache Kafka 的 Knative 代理实现唯一支持的流量加密方法。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem文件的密钥。 -
安装 OpenShift CLI (
oc) 。
流程
在所选命名空间中创建证书文件作为 secret:
oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用密钥名称
ca.crt、user.crt和user.key。不要更改它们。编辑
KnativeKafka自定义资源:oc edit knativekafka
$ oc edit knativekafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 引用您的 secret 和 secret 的命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保指定 bootstrap 服务器中的匹配端口。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5.2. 为 Apache Kafka 的 Knative 频道配置 SASL 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt证书文件。 -
安装 OpenShift CLI (
oc) 。
流程
在所选命名空间中创建证书文件作为 secret:
oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用键名
ca.crt,password, 和sasl.mechanism.不要更改它们。 如果要将 SASL 与公共 CA 证书搭配使用,您必须在创建 secret 时使用
tls.enabled=true标志,而不是使用ca.crt参数。例如:oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用键名
编辑
KnativeKafka自定义资源:oc edit knativekafka
$ oc edit knativekafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 引用您的 secret 和 secret 的命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保指定 bootstrap 服务器中的匹配端口。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 订阅 复制链接链接已复制到粘贴板!
7.1. 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。订阅是通过配置 Subscription 对象创建的,它指定频道和接收器(也称为 订阅者)来发送事件。
7.1.1. 使用 Administrator 视角创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink(也称为 订阅者 )后,您可以创建一个订阅来启用事件交付。订阅是通过配置 Subscription 对象创建的,它指定了要向其发送事件的频道和订阅者。您还可以指定一些特定于订阅者的选项,比如如何处理失败。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已登录到 Web 控制台,且处于 Administrator 视角。
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
- 您已创建了 Knative 频道。
- 您已创建了 Knative 服务以用作订阅者。
流程
- 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,导航到 Serverless → Eventing。
-
在 Channel 选项卡中,选择您要在其中添加订阅的频道的 Options 菜单
。
- 点击列表中的 Add Subscription。
- 在 Add Subscription 对话框中,为订阅选择 Subscriber。订阅者是可以从频道接收事件的 Knative 服务。
- 点 Add。
7.1.2. 使用 Developer 视角创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建订阅。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了事件 sink,如 Knative 服务以及频道。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 在 Developer 视角中,进入 Topology 页。
使用以下方法之一创建订阅:
将鼠标悬停在您要为其创建订阅的频道上,并拖动箭头。此时会显示 Add Subscription 选项。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
- 如果服务在与频道相同的命名空间或项目下的 Topology 视图中可用,点击您要为该频道创建订阅的频道,并将箭头直接拖到服务以立即从频道创建订阅到该服务。
验证
创建订阅后,您可以在 Topology 视图中将频道连接到该服务的行显示为:
7.1.3. 使用 YAML 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述订阅,并以可重复的方式描述订阅。要使用 YAML 创建订阅,您必须创建一个 YAML 文件来定义 Subscription 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建
Subscription对象:创建 YAML 文件并将以下示例代码复制到其中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 订阅的名称。
- 2
- 订阅连接的频道的配置设置。
- 3
- 事件交付的配置设置。这会告诉订阅无法发送给订阅者的事件。配置后,消耗的事件会发送到
deadLetterSink。事件将被丢弃,不会尝试重新发送该事件,并在系统中记录错误。deadLetterSink的值需要是一个 Destination。 - 4
- 订阅用户的配置设置。这是事件从频道发送的事件 sink。
应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.4. 使用 Knative CLI 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 Knative (kn) CLI 创建订阅提供了比直接修改 YAML 文件更精简且直观的用户界面。您可以使用带有适当标志的 kn subscription create 命令创建订阅。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建订阅以将接收器连接到频道:
kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \ --sink <sink_prefix>:<sink_name> \ --sink-dead-letter <sink_prefix>:<sink_name>
$ kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \1 --sink <sink_prefix>:<sink_name> \2 --sink-dead-letter <sink_prefix>:<sink_name>3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--channel指定应处理的云事件的来源。您必须提供频道名称。如果您没有使用由Channel自定义资源支持的默认InMemoryChannel频道,您必须为指定频道类型添加<group:version:kind>前缀。例如,这是 Apache Kafka 支持的频道的messaging.knative.dev:v1beta1:KafkaChannel。- 2
--sink指定事件要传送到的目标目的地。默认情况下,<sink_name>解释为此名称的 Knative 服务,与订阅位于同一个命名空间中。您可以使用以下前缀之一指定接收器类型:ksvc- Knative 服务。
channel- 作为目的地的频道。这里只能引用默认频道类型。
broker- Eventing 代理。
- 3
- 可选:
--sink-dead-letter是一个可选标志,可用于指定在无法发送事件时哪些事件应发送到的接收器。如需更多信息,请参阅 OpenShift Serverless 事件交付文档。示例命令
kn subscription create mysubscription --channel mychannel --sink ksvc:event-display
$ kn subscription create mysubscription --channel mychannel --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Subscription 'mysubscription' created in namespace 'default'.
Subscription 'mysubscription' created in namespace 'default'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认频道已连接到事件接收器或 subscriber,使用一个订阅列出现有订阅并检查输出:
kn subscription list
$ kn subscription listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除订阅
删除订阅:
kn subscription delete <subscription_name>
$ kn subscription delete <subscription_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.5. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅 配置事件交付参数 的示例。
7.2. 管理订阅 复制链接链接已复制到粘贴板!
7.2.1. 使用 Knative CLI 描述订阅 复制链接链接已复制到粘贴板!
您可以使用 kn subscription describe 命令在终端中使用 Knative (kn) 打印有关订阅的信息。使用 Knative CLI 描述订阅可提供比直接查看 YAML 文件更精简且直观的用户界面。
先决条件
-
已安装 Knative (
kn) CLI。 - 您已在集群中创建了订阅。
流程
描述订阅:
kn subscription describe <subscription_name>
$ kn subscription describe <subscription_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2. 使用 Knative CLI 列出订阅 复制链接链接已复制到粘贴板!
您可以使用 kn subscription list 命令通过 Knative (kn) CLI 列出集群中的现有订阅。使用 Knative CLI 列出订阅提供了精简且直观的用户界面。
先决条件
-
已安装 Knative (
kn) CLI。
流程
列出集群中的订阅:
kn subscription list
$ kn subscription listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3. 使用 Knative CLI 更新订阅 复制链接链接已复制到粘贴板!
您可以使用 kn subscription update 命令以及使用 Knative (kn) CLI 从终端更新订阅的适当标志。使用 Knative CLI 更新订阅可提供比直接更新 YAML 文件更精简且直观的用户界面。
先决条件
-
已安装 Knative (
kn) CLI。 - 您已创建了订阅。
流程
更新订阅:
kn subscription update <subscription_name> \ --sink <sink_prefix>:<sink_name> \ --sink-dead-letter <sink_prefix>:<sink_name>
$ kn subscription update <subscription_name> \ --sink <sink_prefix>:<sink_name> \1 --sink-dead-letter <sink_prefix>:<sink_name>2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--sink指定要将事件传送到的更新目标目的地。您可以使用以下前缀之一指定接收器类型:ksvc- Knative 服务。
channel- 作为目的地的频道。这里只能引用默认频道类型。
broker- Eventing 代理。
- 2
- 可选:
--sink-dead-letter是一个可选标志,可用于指定在无法发送事件时哪些事件应发送到的接收器。如需更多信息,请参阅 OpenShift Serverless 事件交付文档。示例命令
kn subscription update mysubscription --sink ksvc:event-display
$ kn subscription update mysubscription --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 8 章 事件发现 复制链接链接已复制到粘贴板!
8.1. 列出事件源和事件源类型 复制链接链接已复制到粘贴板!
可以查看存在的事件源或事件源类型的列表,也可以在 OpenShift Container Platform 集群中使用。您可以使用 OpenShift Container Platform Web 控制台中的 Knative (kn) CLI 或 Developer 视角列出可用事件源或事件源类型。
8.2. 从命令行列出事件源类型 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 提供了简化和直观的用户界面,用来在集群中查看可用事件源类型。
8.2.1. 使用 Knative CLI 列出可用事件源类型 复制链接链接已复制到粘贴板!
您可以使用 kn source list-types CLI 命令列出集群中创建和使用的事件源类型。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。
流程
列出终端中的可用事件源类型:
kn source list-types
$ kn source list-typesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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 sinkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在 OpenShift Container Platform 中,您还可以以 YAML 格式列出可用事件源类型:
kn source list-types -o yaml
$ kn source list-types -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3. 从 Developer 视角列出事件源类型 复制链接链接已复制到粘贴板!
您可以查看集群中所有可用事件源类型的列表。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面,可用事件源类型。
8.3.1. 在 Developer 视角中查看可用事件源类型 复制链接链接已复制到粘贴板!
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 访问 Developer 视角。
- 点 +Add。
- 点 Event Source。
- 查看可用的事件源类型。
8.4. 从命令行列出事件源 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 提供了简化和直观的用户界面,用来查看集群中的现有事件源。
8.4.1. 使用 Knative CLI 列出可用事件源 复制链接链接已复制到粘贴板!
您可以使用 kn source list 命令列出现有的事件源。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。
流程
列出终端中的现有事件源:
kn source list
$ kn source listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE RESOURCE SINK READY a1 ApiServerSource apiserversources.sources.knative.dev ksvc:eshow2 True b1 SinkBinding sinkbindings.sources.knative.dev ksvc:eshow3 False p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True
NAME TYPE RESOURCE SINK READY a1 ApiServerSource apiserversources.sources.knative.dev ksvc:eshow2 True b1 SinkBinding sinkbindings.sources.knative.dev ksvc:eshow3 False p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 您可以使用
--type标志来只列出特定类型的事件源:kn source list --type <event_source_type>
$ kn source list --type <event_source_type>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn source list --type PingSource
$ kn source list --type PingSourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE RESOURCE SINK READY p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True
NAME TYPE RESOURCE SINK READY p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 9 章 调优事件配置 复制链接链接已复制到粘贴板!
9.1. 覆盖 Knative Eventing 系统部署配置 复制链接链接已复制到粘贴板!
您可以通过修改 KnativeEventing 自定义资源 (CR) 中的 deployments spec 来覆盖某些特定部署的默认配置。目前,对于 eventing-controller、eventing-webhook 和 imc-controller 字段以及探测的 readiness 和 liveness 字段支持覆盖默认配置设置。
replicas spec 无法覆盖使用 Horizontal Pod Autoscaler (HPA) 的部署副本数,且不适用于 eventing-webhook 部署。
您只能覆盖部署中默认定义的探测。
所有 Knative Serving 部署都会默认定义一个就绪度和存活度探测,但以下例外:
-
net-kourier-controller和3scale-kourier-gateway仅定义就绪度探测。 -
net-istio-controller和net-istio-webhook定义没有探测。
9.1.1. 覆盖部署配置 复制链接链接已复制到粘贴板!
目前,对于 eventing-controller、eventing-webhook 和 imc-controller 字段以及探测的 readiness 和 liveness 字段支持覆盖默认配置设置。
replicas spec 无法覆盖使用 Horizontal Pod Autoscaler (HPA) 的部署副本数,且不适用于 eventing-webhook 部署。
在以下示例中,KnativeEventing CR 覆盖 eventing-controller 部署,以便:
-
readiness探测超时eventing-controller被设置为 10 秒。 - 部署指定了 CPU 和内存资源限制。
- 部署有 3 个副本。
-
添加
example-label: label标签。 -
添加
example-annotation:注解。 -
nodeSelector字段被设置为选择带有disktype: hdd标签的节点。
KnativeEventing CR 示例
- 1
- 您可以使用
readiness和liveness探测覆盖来覆盖在 Kubernetes API 中指定的一个部署中的一个容器探测的所有字段,与探测 handler:exec,grpc,httpGet, 和tcpSocket相关的字段除外。
KnativeEventing CR 标签和注解设置覆盖部署本身和生成的 Pod 的部署标签和注解。
9.2. 高可用性 复制链接链接已复制到粘贴板!
高可用性 (HA) 是 Kubernetes API 的标准功能,有助于确保在出现中断时 API 保持正常运行。在 HA 部署中,如果活跃控制器崩溃或被删除,另一个控制器就可以使用。此控制器会接管处理由现在不可用的控制器提供服务的 API。
OpenShift Serverless 中的 HA 可通过领导选举机制获得,该机制会在安装 Knative Serving 和 Eventing control plane 后默认启用。在使用领导选举 HA 模式时,控制器实例在需要前应该已在集群内调度并运行。这些控制器实例争用共享资源,即领导选举锁定。在任何给定时间可以访问领导选举机制锁定资源的控制器实例被称为领导 (leader) 。
OpenShift Serverless 中的 HA 可通过领导选举机制获得,该机制会在安装 Knative Serving 和 Eventing control plane 后默认启用。在使用领导选举 HA 模式时,控制器实例在需要前应该已在集群内调度并运行。这些控制器实例争用共享资源,即领导选举锁定。在任何给定时间可以访问领导选举机制锁定资源的控制器实例被称为领导 (leader) 。
9.2.1. 为 Knative Eventing 配置高可用性副本 复制链接链接已复制到粘贴板!
默认情况下,Knative Eventing eventing-controller、eventing-webhook、imc-controller、imc-dispatcher 和 mt-broker-controller 组件都会具有高可用性 (HA) 。您可以通过修改 KnativeEventing 自定义资源 (CR) 中的 spec.high-availability.replicas 值来更改这些组件的副本数。
对于 Knative Eventing,HA 不会扩展 mt-broker-filter 和 mt-broker-ingress 部署。如果需要多个部署,请手动扩展这些组件。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
流程
- 在 OpenShift Container Platform web 控制台的 Administrator 视角中,进入 OperatorHub → Installed Operators。
-
选择
knative-eventing命名空间。 - 点 OpenShift Serverless Operator 的 Provided APIs 列表中的 Knative Eventing 来进入 Knative Eventing 选项卡。
点 knative-eventing,然后进入 knative-eventing 页面中的 YAML 选项卡。
修改
KnativeEventingCR 中的副本数量:YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2.2. 为 Apache Kafka 为 Knative 代理实现配置高可用性副本 复制链接链接已复制到粘贴板!
默认情况下,对于 Apache Kafka 组件 kafka-controller 和 kafka-webhook-eventing 的 Knative 代理实现,高可用性(HA)默认为每个副本有两个副本。您可以通过修改 KnativeKafka 自定义资源 (CR) 中的 spec.high-availability.replicas 值来更改这些组件的副本数。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或在 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 上具有集群或专用管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Apache Kafka 的 Knative 代理。
流程
- 在 OpenShift Container Platform web 控制台的 Administrator 视角中,进入 OperatorHub → Installed Operators。
-
选择
knative-eventing命名空间。 - 点 OpenShift Serverless Operator 的 Provided APIs 列表中的 Knative Kafka 进入 Knative Kafka 标签页。
点 knative-kafka,然后进入 knative-kafka 页面中的 YAML 选项卡。
修改
KnativeKafkaCR 中的副本数量:YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 10 章 为 Eventing 配置 kube-rbac-proxy 复制链接链接已复制到粘贴板!
kube-rbac-proxy 组件为 Knative Eventing 提供内部身份验证和授权功能。
10.1. 为 Eventing 配置 kube-rbac-proxy 资源 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Serverless Operator CR 全局覆盖 kube-rbac-proxy 容器的资源分配。
You can also override resource allocation for a specific deployment.
You can also override resource allocation for a specific deployment.
以下配置设置 Knative Eventing kube-rbac-proxy 最小值和最大 CPU 和内存分配:
KnativeEventing CR 示例