5.13. 创建代理
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。
如果集群管理员将 OpenShift Serverless 部署配置为使用 Kafka 作为 default 代理类型,使用默认设置创建代理会创建一个基于 Kafka 的代理。
如果您的 OpenShift Serverless 部署没有配置为使用 Kafka 代理作为 default 代理类型,则按照以下流程中的默认设置时会创建基于频道的代理。
5.13.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
命令列出所有现有代理:$ kn broker list
输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
5.13.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
注解:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: annotations: eventing.knative.dev/injection: enabled name: <trigger_name> spec: broker: default subscriber: 1 ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service_name>
- 1
- 指定触发器将事件发送到的事件 sink 或 subscriber。
应用
Trigger
YAML 文件:$ oc apply -f <filename>
验证
您可以使用 oc
CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
输入以下
oc
命令来获取代理:$ oc -n <namespace> get broker default
输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
5.13.3. 通过标记命名空间来创建代理
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过标记您拥有的命名空间或具有写入权限来自动创建 default
代理。
如果您删除该标签,则不会删除使用这个方法创建的代理。您必须手动删除它们。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc
) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
使用
eventing.knative.dev/injection=enabled
标识一个命名空间:$ oc label namespace <namespace> eventing.knative.dev/injection=enabled
验证
您可以使用 oc
CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
使用
oc
命令获取代理:$ oc -n <namespace> get broker <broker_name>
示例命令
$ oc -n default get broker default
输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
可选:如果使用 OpenShift Container Platform Web 控制台,在 Developer 视角中进入 Topology 视图来查看存在的代理:
5.13.4. 删除通过注入创建的代理
如果通过注入创建了一个代理并在以后需要删除它时,您必须手动删除它。如果删除了标签或注解,则使用命名空间标签或触发器注解创建的代理不会被永久删除。
先决条件
-
安装 OpenShift CLI (
oc
) 。
流程
从命名空间中删除
eventing.knative.dev/injection=enabled
标识:$ oc label namespace <namespace> eventing.knative.dev/injection-
移除注解可防止 Knative 在删除代理后重新创建代理。
从所选命名空间中删除代理:
$ oc -n <namespace> delete broker <broker_name>
验证
使用
oc
命令获取代理:$ oc -n <namespace> get broker <broker_name>
示例命令
$ oc -n default get broker default
输出示例
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found
5.13.5. 当配置为 default 代理类型时,创建 Kafka 代理
如果您的 OpenShift Serverless 部署没有配置为使用 Kafka 代理作为默认代理类型,您仍可使用以下步骤创建基于 Kafka 的代理。
5.13.5.1. 使用 YAML 创建 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 文件:
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka 1 name: example-kafka-broker spec: config: apiVersion: v1 kind: ConfigMap name: kafka-broker-config 2 namespace: knative-eventing
应用基于 Kafka 的代理 YAML 文件:
$ oc apply -f <filename>
5.13.5.2. 创建使用外部管理的 Kafka 主题的 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
)。
流程
创建一个基于 Kafka 的代理作为 YAML 文件:
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka 1 kafka.eventing.knative.dev/external.topic: <topic_name> 2 ...
应用基于 Kafka 的代理 YAML 文件:
$ oc apply -f <filename>
5.13.6. 管理代理
Knative (kn
) CLI 提供了可用于描述和列出现有代理的命令。
5.13.6.1. 使用 Knative CLI 列出现有代理
使用 Knative (kn
) CLI 列出代理提供了精简且直观的用户界面。您可以使用 kn broker list
命令列出集群中的现有代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。
流程
列出所有存在的代理:
$ kn broker list
输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
5.13.6.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>
使用 default broker 的命令示例
$ kn broker describe default
输出示例
Name: default Namespace: default Annotations: eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ... Age: 22s Address: URL: http://broker-ingress.knative-eventing.svc.cluster.local/default/default Conditions: OK TYPE AGE REASON ++ Ready 22s ++ Addressable 22s ++ FilterReady 22s ++ IngressReady 22s ++ TriggerChannelReady 22s
5.13.7. 后续步骤
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅配置事件交付参数 的示例。