This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.Serverless
OpenShift Serverless 的安装、使用与发行注记
摘要
第 1 章 发行注记 复制链接链接已复制到粘贴板!
发行注记包含有关新的和已弃用的功能、破坏更改以及已知问题的信息。以下发行注记适用于 OpenShift Container Platform 的最新 OpenShift Serverless 版本。
如需了解 OpenShift Serverless 功能概述,请参阅 关于 OpenShift Serverless。
OpenShift Serverless 基于开源的 Knative 项目。
有关最新 Knative 组件发行版本的详情,请参阅 Knative 博客。
1.1. 关于 API 版本 复制链接链接已复制到粘贴板!
API 版本是 OpenShift Serverless 中特定功能和自定义资源的开发状态的重要衡量。在集群中创建没有正确 API 版本的资源可能会导致部署出现问题。
OpenShift Serverless Operator 会自动升级使用已弃用 API 版本的旧资源以使用最新版本。例如,如果您在集群中创建了使用旧版本的 ApiServerSource API(如 v1beta1 )的资源,OpenShift Serverless Operator 会在可用时自动更新这些资源以使用 API 的 v1 版本,并且 v1beta1 版本已弃用。
弃用后,可能会在任何即将发布的发行版本中删除旧版本的 API。使用已弃用的 API 版本不会导致资源失败。但是,如果您尝试使用已删除的 API 版本,则会导致资源失败。确保您的清单已更新为使用最新版本来避免问题。
1.2. 通常可用和技术预览功能 复制链接链接已复制到粘贴板!
正式发布(GA)的功能被完全支持,并适用于生产用途。技术预览功能为实验性功能,不适用于生产环境。有关 TP 功能的更多信息,请参阅红帽客户门户网站中的技术支持范围。
下表提供了有关哪些 OpenShift Serverless 功能是 GA 以及 TP 的信息:
| 功能 | 1.23 | 1.24 |
|---|---|---|
|
| TP | TP |
|
| TP | TP |
| Service Mesh mTLS | GA | GA |
|
| GA | GA |
| HTTPS 重定向 | GA | GA |
| Kafka 代理 | TP | TP |
| Kafka sink | TP | TP |
| init 容器支持 Knative 服务 | TP | GA |
| Knative 服务的 PVC 支持 | TP | TP |
1.3. 弃用和删除的功能 复制链接链接已复制到粘贴板!
一些在以前发行本中正式发布(GA)或技术预览(TP)的功能已被弃用或删除。弃用的功能仍然包含在 OpenShift Serverless 中,并且仍然被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Serverless 中已弃用并删除的主要功能的最新列表,请参考下表:
| 功能 | 1.20 | 1.21 | 1.22 | 1.23 | 1.24 |
|---|---|---|---|---|---|
|
| 已弃用 | 已弃用 | 删除 | 删除 | 删除 |
|
| 已弃用 | 删除 | 删除 | 删除 | 删除 |
1.4. Red Hat OpenShift Serverless 1.24.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.24.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.4.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 1.3。
- OpenShift Serverless 现在使用 Knative Eventing 1.3。
- OpenShift Serverless 现在使用 Kourier 1.3。
-
OpenShift Serverless 现在使用 Knative
knCLI 1.3。 - OpenShift Serverless 现在使用 Knative Kafka 1.3。
-
kn funcCLI 插件现在使用func0.24。 - 现在,提供了对 Knative 服务的 init 容器支持(GA)。
- OpenShift Serverless 逻辑现在作为技术预览提供。它启用了定义声明工作流模型来管理无服务器应用程序。
- 现在,您可以在 OpenShift Serverless 中使用成本管理服务。
1.4.2. 修复的问题 复制链接链接已复制到粘贴板!
当集群中存在太多 secret 时,将 OpenShift Serverless 与 Red Hat OpenShift Service Mesh 集成会导致
net-istio-controllerpod 在启动时耗尽内存。现在,可以启用 secret 过滤,这会导致
net-istio-controller只考虑带有networking.internal.knative.dev/certificate-uid标签的 secret,从而减少所需的内存量。- OpenShift Serverless 功能技术预览现在默认使用 Cloud Native Buildpacks 构建容器镜像。
1.4.3. 已知问题 复制链接链接已复制到粘贴板!
- Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards(FIPS)模式。
在 OpenShift Serverless 1.23 中,删除了 KafkaBindings 和
kafka-bindingWebhook 的支持。但是,现有kafkabindings.webhook.sources.knative.dev MutatingWebhookConfiguration可能保留,指向kafka-source-webhook服务,该服务不再存在。对于集群上 KafkaBindings 的某些规格,
kafkabindings.webhook.kafka.sources.knative.dev MutatingWebhookConfiguration可能会被配置,将任何创建和更新事件传递给各种资源,如 Deployment、Knative Services 或 Jobs,然后 Webhook 会失败。要临时解决这个问题,请在升级到 OpenShift Serverless 1.23 后从集群中删除
kafkabindings.webhook.sources.knative.dev MutatingWebhookConfiguration:oc delete mutatingwebhookconfiguration kafkabindings.webhook.kafka.sources.knative.dev
$ oc delete mutatingwebhookconfiguration kafkabindings.webhook.kafka.sources.knative.devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5. Red Hat OpenShift Serverless 1.23.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.23.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.5.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 1.2。
- OpenShift Serverless 现在使用 Knative Eventing 1.2。
- OpenShift Serverless 现在使用 Kourier 1.2。
-
OpenShift Serverless 现在使用 Knative(
kn)CLI 1.2。 - OpenShift Serverless 现在使用 Knative Kafka 1.2。
-
kn funcCLI 插件现在使用func0.24。 -
现在,可以在 Kafka 代理中使用
kafka.eventing.knative.dev/external.topic注解。此注解可以使用现有的外部管理主题,而不是代理自行创建内部主题。 -
kafka-ch-controller和kafka-webhookKafka 组件不再存在。这些组件已被kafka-webhook-eventing组件替代。 - OpenShift Serverless 功能技术预览现在默认使用 Source-to-Image(S2I)来构建容器镜像。
1.5.2. 已知问题 复制链接链接已复制到粘贴板!
- Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards(FIPS)模式。
-
如果您删除了包含 Kafka 代理的命名空间,如果在代理被删除前删除了代理的
auth.secret.ref.namesecret,命名空间终结器可能无法删除。 使用大量 Knative 服务运行 OpenShift Serverless 时,可能会导致运行的 Knativeivator pod 接近其默认的内存限值 600MB。如果使用的内存达到这个限值,则这些 pod 可能会重启。通过修改
KnativeServing自定义资源,可以配置激活器部署的请求和限值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果您使用 Cloud Native Buildpacks 作为功能的本地构建策略,
kn func将无法自动启动 podman,或使用 SSH 隧道到远程守护进程。这些问题的解决方法是,在部署功能前,在本地开发计算机上已在运行 Docker 或 podman 守护进程。 - On-cluster 功能构建当前针对 Quarkus 和 Golang 运行时会失败。它们适用于 Node、Typescript、Python 和 Springboot 运行时。
1.6. Red Hat OpenShift Serverless 1.22.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.22.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.6.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 1.1。
- OpenShift Serverless 现在使用 Knative Eventing 1.1。
- OpenShift Serverless 现在使用 Kourier 1.1。
-
OpenShift Serverless 现在使用 Knative(
kn)CLI 1.1。 - OpenShift Serverless 现在使用 Knative Kafka 1.1。
-
kn funcCLI 插件现在使用func0.23。 - init 容器支持 Knative 服务现在作为技术预览提供。
- 持久性卷声明(PVC)对 Knative 服务的支持现在作为技术预览提供。
-
knative-serving、knative-serving-ingress、knative-eventing和knative-kafka系统命名空间现在默认具有knative.openshift.io/part-of: "openshift-serverless"标签。 - 添加了 Knative Eventing - Kafka Broker/Trigger 仪表板,它允许在 web 控制台中视觉化 Kafka 代理并触发指标。
- 添加了 Knative Eventing - KafkaSink 仪表板,它允许在 web 控制台中视觉化 KafkaSink 指标。
- Knative Eventing - Broker/Trigger 仪表板现在被称为 Knative Eventing - 基于频道的代理/Trigger。
-
knative.openshift.io/part-of: "openshift-serverless"标签已替换knative.openshift.io/system-namespace标签。 -
Knative Serving YAML 配置文件中的命名样式从 camel 问题单(
ExampleName)改为连字符格式(example-name)。从这个版本开始,在创建或编辑 Knative Serving YAML 配置文件时使用连字符格式表示法。
1.6.2. 已知问题 复制链接链接已复制到粘贴板!
- Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards(FIPS)模式。
1.7. Red Hat OpenShift Serverless 1.21.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.21.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.7.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 1.0
- OpenShift Serverless 现在使用 Knative Eventing 1.0。
- OpenShift Serverless 现在使用 Kourier 1.0.
-
OpenShift Serverless 现在使用 Knative(
kn)CLI 1.0。 - OpenShift Serverless 现在使用 Knative Kafka 1.0。
-
kn funcCLI 插件现在使用func0.21。 - Kafka sink 现在作为技术预览提供。
-
Knative 开源项目已开始弃用发现配置密钥,而是统一使用 kebab-cased 键。因此,OpenShift Serverless 1.18.0 发行注记中提到的
defaultExternalScheme键现已弃用,并被default-external-scheme键替代。密钥的使用说明保持不变。
1.7.2. 修复的问题 复制链接链接已复制到粘贴板!
-
在 OpenShift Serverless 1.20.0 中,存在一个与发送事件相关的问题,会影响使用
kn event send向服务发送事件。这个问题现已解决。 -
在 OpenShift Serverless 1.20.0(
func0.20)中,使用http模板创建的 TypeScript 功能无法在集群中部署。这个问题现已解决。 -
在 OpenShift Serverless 1.20.0(
func0.20)中,使用gcr.ioregistry 部署功能会失败,并出现错误。这个问题现已解决。 -
在 OpenShift Serverless 1.20.0(
func0.20)中,使用kn func create命令创建 Springboot 功能项目目录,然后运行kn func build命令失败并显示错误消息。这个问题现已解决。 -
在 OpenShift Serverless 1.19.0(
func0.19)中,一些运行时无法使用 podman 来构建功能。这个问题现已解决。
1.7.3. 已知问题 复制链接链接已复制到粘贴板!
目前,域映射控制器无法处理包含当前不支持的路径的代理 URI。
这意味着,如果要使用
DomainMapping自定义资源(CR)将自定义域映射到代理,则必须使用代理的 ingress 服务配置DomainMappingCR,并将代理的确切路径附加到自定义域:DomainMappingCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 代理的 URI 为
<domain-name>/<broker-namespace>/<broker-name>。
1.8. Red Hat OpenShift Serverless 1.20.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.20.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.8.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.26。
- OpenShift Serverless 现在使用 Knative Eventing 0.26。
- OpenShift Serverless 现在使用 Kourier 0.26。
-
OpenShift Serverless 现在使用 Knative(
kn)CLI 0.26。 - OpenShift Serverless 现在使用 Knative Kafka 0.26。
-
kn funcCLI 插件现在使用func0.20。 Kafka 代理现在作为技术预览提供。
重要FIPS 不支持 Kafka 代理(当前为技术预览)。
-
kn event插件现在作为技术预览提供。 -
kn service create命令的--min-scale和--max-scale标志已弃用。使用--scale-min和--scale-max标志。
1.8.2. 已知问题 复制链接链接已复制到粘贴板!
OpenShift Serverless 使用 HTTPS 的默认地址部署 Knative 服务。将事件发送到集群中的资源时,发件人不会配置集群证书颁发机构(CA)。这会导致事件交付失败,除非集群使用全局接受的证书。
例如,向公开访问的地址发送事件可正常工作:
kn event send --to-url https://ce-api.foo.example.com/
$ kn event send --to-url https://ce-api.foo.example.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另一方面,如果服务使用由自定义 CA 发布的 HTTPS 证书的公共地址,则此交付会失败:
kn event send --to Service:serving.knative.dev/v1:event-display
$ kn event send --to Service:serving.knative.dev/v1:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将事件发送到其他可寻址的对象(如代理或频道)不受此问题的影响,并可以正常工作。
- Kafka 代理目前无法在启用了联邦信息处理标准(FIPS)模式的集群中工作。
如果您使用
kn func create命令创建 Springboot 功能项目目录,后续的kn func build命令运行会失败并显示以下错误消息:[analyzer] no stack metadata found at path '' [analyzer] ERROR: failed to : set API for buildpack 'paketo-buildpacks/ca-certificates@3.0.2': buildpack API version '0.7' is incompatible with the lifecycle
[analyzer] no stack metadata found at path '' [analyzer] ERROR: failed to : set API for buildpack 'paketo-buildpacks/ca-certificates@3.0.2': buildpack API version '0.7' is incompatible with the lifecycleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作为临时解决方案,您可以在功能配置文件
func.yaml中将builder属性更改为gcr.io/paketo-buildpacks/builder:base。使用
gcr.ioregistry 部署功能会失败并显示以下错误消息:Error: failed to get credentials: failed to verify credentials: status code: 404
Error: failed to get credentials: failed to verify credentials: status code: 404Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为临时解决方案,请使用与
gcr.io不同的 registry,如quay.io或docker.io。使用
http模板创建的 TypeScript 功能无法在集群中部署。作为临时解决方案,在
func.yaml文件中替换以下部分:buildEnvs: []
buildEnvs: []Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个:
buildEnvs: - name: BP_NODE_RUN_SCRIPTS value: build
buildEnvs: - name: BP_NODE_RUN_SCRIPTS value: buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
func版本 0.20 中,一些运行时可能无法使用 podman 构建功能。您可能会看到类似如下的错误消息:ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个问题存在以下临时解决方案:
通过在 service
ExecStart定义中添加--time=0来更新 podman 服务:服务配置示例
ExecStart=/usr/bin/podman $LOGGING system service --time=0
ExecStart=/usr/bin/podman $LOGGING system service --time=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来重启 podman 服务:
systemctl --user daemon-reload
$ systemctl --user daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart --user podman.socket
$ systemctl restart --user podman.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow
或者,您可以使用 TCP 公开 podman API:
podman system service --time=0 tcp:127.0.0.1:5534 & export DOCKER_HOST=tcp://127.0.0.1:5534
$ podman system service --time=0 tcp:127.0.0.1:5534 & export DOCKER_HOST=tcp://127.0.0.1:5534Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.9. Red Hat OpenShift Serverless 1.19.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.19.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.9.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.25。
- OpenShift Serverless 现在使用 Knative Eventing 0.25。
- OpenShift Serverless 现在使用 Kourier 0.25。
-
OpenShift Serverless 现在使用 Knative(
kn)CLI 0.25。 - OpenShift Serverless 现在使用 Knative Kafka 0.25。
-
kn funcCLI 插件现在使用purc0.19。 -
KafkaBindingAPI 在 OpenShift Serverless 1.19.0 中已弃用,并将在以后的发行版本中删除。 - HTTPS 重定向现在被支持,并可以为集群或每个 Knative 服务配置。
1.9.2. 修复的问题 复制链接链接已复制到粘贴板!
- 在以前的版本中,Kafka 频道分配程序仅在响应前等待本地提交成功,这可能会在 Apache Kafka 节点失败时导致事件丢失。Kafka 频道分配程序现在会在响应前等待所有同步副本提交。
1.9.3. 已知问题 复制链接链接已复制到粘贴板!
在
func版本 0.19 中,一些运行时可能无法使用 podman 构建功能。您可能会看到类似如下的错误消息:ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个问题存在以下临时解决方案:
通过在 service
ExecStart定义中添加--time=0来更新 podman 服务:服务配置示例
ExecStart=/usr/bin/podman $LOGGING system service --time=0
ExecStart=/usr/bin/podman $LOGGING system service --time=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来重启 podman 服务:
systemctl --user daemon-reload
$ systemctl --user daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart --user podman.socket
$ systemctl restart --user podman.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow
或者,您可以使用 TCP 公开 podman API:
podman system service --time=0 tcp:127.0.0.1:5534 & export DOCKER_HOST=tcp://127.0.0.1:5534
$ podman system service --time=0 tcp:127.0.0.1:5534 & export DOCKER_HOST=tcp://127.0.0.1:5534Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.10. Red Hat OpenShift Serverless 1.18.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.18.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.10.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.24.0。
- OpenShift Serverless 现在使用 Knative Eventing 0.24.0。
- OpenShift Serverless 现在使用 Kourier 0.24.0。
-
OpenShift Serverless 现在使用 Knative(
kn)CLI 0.24.0。 - OpenShift Serverless 现在使用 Knative Kafka 0.24.7。
-
kn funcCLI 插件现在使用func0.18.0。 在即将到来的 OpenShift Serverless 1.19.0 发行版本中,外部路由的 URL 方案将默认为 HTTPS 以增强安全性。
如果您不希望此更改应用到工作负载,您可以在升级到 1.19.0 前覆盖默认设置,方法是将以下 YAML 添加到
KnativeServing自定义资源(CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您想在 1.18.0 中应用更改,请添加以下 YAML:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在接下来的 OpenShift Serverless 1.19.0 发行版本中,公开 Kourier 网关的默认服务类型将是
ClusterIP,而不是LoadBalancer。如果您不希望此更改应用到工作负载,您可以在升级到 1.19.0 前覆盖默认设置,方法是将以下 YAML 添加到
KnativeServing自定义资源(CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
现在,您可以在 OpenShift Serverless 中使用
emptyDir卷。详情请参阅 OpenShift Serverless 文档中的 Knative Serving 文档。 -
现在,当您使用
kn func创建功能时,Rust 模板可用。
1.10.2. 修复的问题 复制链接链接已复制到粘贴板!
- 1.4 之前的 Camel-K 版本与 OpenShift Serverless 1.17.0 不兼容。Camel-K 中的问题已被解决,Camel-K 版本 1.4.1 可以用于 OpenShift Serverless 1.17.0。
在以前的版本中,如果您为 Kafka 频道或新 Kafka 源创建新订阅,则 Kafka 数据平面可能会在新创建的订阅或 sink 报告就绪状态后准备好发送信息。
因此,数据平面没有报告就绪状态时发送的信息可能没有传送到订阅者或 sink。
在 OpenShift Serverless 1.18.0 中,这个问题已被解决,初始消息不再丢失。有关此问题的更多信息,请参阅 知识库文章 #6343981。
1.10.3. 已知问题 复制链接链接已复制到粘贴板!
较旧版本的 Knative
knCLI 可能会使用较旧版本的 Knative Serving 和 Knative Eventing API。例如,knCLI 版本 0.23.2 使用v1alpha1API 版本。另一方面,较新的 OpenShift Serverless 发行版本可能不再支持旧的 API 版本。例如,OpenShift Serverless 1.18.0 不再支持
kafkasources.sources.knative.dev API的版本v1alpha1。因此,使用带有较新的 OpenShift Serverless 的 Knative
knCLI 的旧版本可能会产生错误,因为kn无法找到过时的 API。例如,knCLI的 0.23.2 版本无法用于 OpenShift Serverless 1.18.0。为避免出现问题,请使用适用于 OpenShift Serverless 发行版本的最新
knCLI 版本。对于 OpenShift Serverless 1.18.0,使用 KnativeknCLI 0.24.0。
1.11. Red Hat OpenShift Serverless 1.17.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.17.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.11.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.23.0。
- OpenShift Serverless 现在使用 Knative Eventing 0.23.0。
- OpenShift Serverless 现在使用 Kourier 0.23.0。
-
OpenShift Serverless 现在使用 Knative
knCLI 0.23.0。 - OpenShift Serverless 现在使用 Knative Kafka 0.23.0。
-
kn funcCLI 插件现在使用func0.17.0. 在即将到来的 OpenShift Serverless 1.19.0 发行版本中,外部路由的 URL 方案将默认为 HTTPS 以增强安全性。
如果您不希望此更改应用到工作负载,您可以在升级到 1.19.0 前覆盖默认设置,方法是将以下 YAML 添加到
KnativeServing自定义资源(CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow - mTLS 功能现在正式发布 (GA)。
-
现在,在使用
kn func创建函数时,typeScript 模板可用。 Knative Eventing 0.23.0 中的 API 版本更改:
-
KafkaChannelAPI 的v1alpha1版本已在 OpenShift Serverless 版本 1.14.0 中弃用,它已被删除。如果配置映射的ChannelTemplateSpec参数包含对此旧版本的引用,您必须更新 spec 的这一部分以使用正确的 API 版本。
-
1.11.2. 已知问题 复制链接链接已复制到粘贴板!
如果您试图将较旧版本的 Knative
knCLI 与较新的 OpenShift Serverless 发行版本搭配使用,则不会找到 API,并出现错误。例如,如果您使用
knCLI 的 1.16.0 发行版本,它使用版本 0.22.0,其 1.17.0 OpenShift Serverless 发行版本使用 Knative Serving 和 Knative Eventing API 的 0.23.0 版本,则 CLI 无法正常工作,因为它仍然会查找过时的 0.22.0 API 版本。确保您使用 OpenShift Serverless 发行版本的最新
knCLI 版本来避免问题。- 此发行版本中的相应 web 控制台仪表板中不会监控或显示 Kafka 频道指标。这是因为 Kafka 分配程序协调过程中的中断更改。
如果您为 Kafka 频道或新 Kafka 源创建新订阅,在新创建的订阅或 sink 报告就绪状态后 Kafka 数据平面可能会延迟分配信息。
因此,在 data plane 没有报告就绪状态时发送的信息可能无法传送到订阅者或 sink。
有关此问题和可能的解决方案的更多信息,请参阅知识库文章 #6343981。
Camel-K 1.4 发行版本与 OpenShift Serverless 版本 1.17.0 不兼容。这是因为 Camel-K 1.4 使用 Knative 版本 0.23.0 中删除的 API。目前,这个问题还没有可用的临时解决方案。如果您需要在 OpenShift Serverless 中使用 Camel-K 1.4,请不要升级到 OpenShift Serverless 版本 1.17.0。
注意这个问题已被解决,Camel-K 版本 1.4.1 与 OpenShift Serverless 1.17.0 兼容。
1.12. Red Hat OpenShift Serverless 1.16.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.16.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.12.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.22.0。
- OpenShift Serverless 现在使用 Knative Eventing 0.22.0。
- OpenShift Serverless 现在使用 Kourier 0.22.0。
-
OpenShift Serverless 现在使用 Knative
knCLI 0.22.0。 - OpenShift Serverless 现在使用 Knative Kafka 0.22.0。
-
kn funcCLI 插件现在使用func0.16.0。 -
kn func emit命令已添加到功能kn插件中。您可以使用此命令发送事件来测试本地部署的功能。
1.12.2. 已知问题 复制链接链接已复制到粘贴板!
- 在升级到 OpenShift Serverless 1.16.0 前,您必须将 OpenShift Container Platform 升级到 4.6.30、4.7.11 或更高版本。
AMQ Streams Operator 可能会阻止安装或升级 OpenShift Serverless Operator。如果发生这种情况,Operator Lifecycle Manager (OLM) 会抛出以下错误:
WARNING: found multiple channel heads: [amqstreams.v1.7.2 amqstreams.v1.6.2], please check the `replaces`/`skipRange` fields of the operator bundles.
WARNING: found multiple channel heads: [amqstreams.v1.7.2 amqstreams.v1.6.2], please check the `replaces`/`skipRange` fields of the operator bundles.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在安装或升级 OpenShift Serverless Operator 前卸载 AMQ Streams Operator,从而解决这个问题。然后您可以重新安装 AMQ Streams Operator。
- 如果使用 mTLS 启用 Service Mesh,则 Knative Serving 的指标会被默认禁用,因为 Service Mesh 会防止 Prometheus 提取指标。有关启用 Knative Serving 指标以用于 Service Mesh 和 mTLS 的说明,请参阅 Serverless 文档中的"集成 Service Mesh with OpenShift Serverless"部分。
如果您部署启用了 Istio ingress 的 Service Mesh CR,您可能会在
istio-ingressgatewaypod 中看到以下警告:2021-05-02T12:56:17.700398Z warning envoy config [external/envoy/source/common/config/grpc_subscription_impl.cc:101] gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) 0.0.0.0_8081: duplicate listener 0.0.0.0_8081 found
2021-05-02T12:56:17.700398Z warning envoy config [external/envoy/source/common/config/grpc_subscription_impl.cc:101] gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) 0.0.0.0_8081: duplicate listener 0.0.0.0_8081 foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您的 Knative 服务也可能无法访问。
您可以按照以下的临时解决方案,通过重新创建
knative-local-gateway服务来解决这个问题:删除
istio-system命名空间中现有的knative-local-gateway服务:oc delete services -n istio-system knative-local-gateway
$ oc delete services -n istio-system knative-local-gatewayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建并应用包含以下 YAML 的
knative-local-gateway服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您在集群中有 1000 个 Knative 服务,然后执行 Knative Serving 的重新安装或升级,则在
KnativeServing自定义资源(CR)变为Ready后创建第一个新服务会有一个延迟。3scale-kourier-control服务会在创建新服务前协调所有以前存在的 Knative 服务。因此,新服务在状态被更新为Ready前,大约会有 800 秒的时间处于IngressNotConfigured或Unknown状态。如果您为 Kafka 频道或新 Kafka 源创建新订阅,在新创建的订阅或 sink 报告就绪状态后 Kafka 数据平面可能会延迟分配信息。
因此,在 data plane 没有报告就绪状态时发送的信息可能无法传送到订阅者或 sink。
有关此问题和可能的解决方案的更多信息,请参阅知识库文章 #6343981。
1.13. Red Hat OpenShift Serverless 1.15.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.15.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.13.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.21.0。
- OpenShift Serverless 现在使用 Knative Eventing 0.21.0。
- OpenShift Serverless 现在使用 Kourier 0.21.0。
-
OpenShift Serverless 现在使用 Knative
knCLI 0.21.0。 - OpenShift Serverless 现在使用 Knative Kafka 0.21.1。
- OpenShift Serverless 功能现在作为技术预览提供。
service.knative.dev/visibility 标签(以前用于创建私有服务)现已弃用。您必须更新现有服务来改用 networking.knative.dev/visibility 标签。
1.13.2. 已知问题 复制链接链接已复制到粘贴板!
如果您为 Kafka 频道或新 Kafka 源创建新订阅,在新创建的订阅或 sink 报告就绪状态后 Kafka 数据平面可能会延迟分配信息。
因此,在 data plane 没有报告就绪状态时发送的信息可能无法传送到订阅者或 sink。
有关此问题和可能的解决方案的更多信息,请参阅知识库文章 #6343981。
1.14. Red Hat OpenShift Serverless 1.14.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift Serverless 1.14.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、改变以及已知的问题包括在此文档中。
1.14.1. 新功能 复制链接链接已复制到粘贴板!
- OpenShift Serverless 现在使用 Knative Serving 0.20.0。
- OpenShift Serverless 使用 Knative Eventing 0.20.0。
- OpenShift Serverless 现在使用 Kourier 0.20.0。
-
OpenShift Serverless 现在使用 Knative
knCLI 0.20.0。 - OpenShift Serverless 现在使用 Knative Kafka 0.20.0。
OpenShift Serverless 上的 Knative Kafka 现已正式发布(GA)。
重要仅支持 OpenShift Serverless 上的
KafkaChannel和KafkaSource对象的v1beta1API 版本。不要使用这些 API 的v1alpha1版本,因为这个版本现已弃用。-
对于 OpenShift Container Platform 4.6 及更新的版本,用于安装和升级 OpenShift Serverless 的 Operator 频道已更新为
stable。 OpenShift Serverless 现在在 IBM Power Systems、IBM Z 和 LinuxONE 上被支持,但以下功能除外,这些功能不被支持:
- Knative Kafka 功能。
- OpenShift Serverless 功能开发人员预览。
1.14.2. 已知问题 复制链接链接已复制到粘贴板!
-
Kafka 频道的订阅有时无法标记为
READY,并处于SubscriptionNotMarkedReadyByChannel状态。您可以通过重启 Kafka 频道的分配程序来解决这个问题。 如果您为 Kafka 频道或新 Kafka 源创建新订阅,在新创建的订阅或 sink 报告就绪状态后 Kafka 数据平面可能会延迟分配信息。
因此,在 data plane 没有报告就绪状态时发送的信息可能无法传送到订阅者或 sink。
有关此问题和可能的解决方案的更多信息,请参阅知识库文章 #6343981。
第 2 章 发现 复制链接链接已复制到粘贴板!
2.1. 关于 OpenShift Serverless 复制链接链接已复制到粘贴板!
OpenShift Serverless 提供 Kubernetes 原生构建块,供开发人员在 OpenShift Container Platform 中创建和部署无服务器、事件驱动的应用程序。OpenShift Serverless 基于开源 Knative 项目,通过启用企业级无服务器平台为混合和多云环境提供可移植性和一致性。
2.1.1. Knative Serving 复制链接链接已复制到粘贴板!
Knative Serving 支持想要创建、部署和管理云原生应用程序的开发人员。它以 Kubernetes 自定义资源定义(CRD)的形式提供一组对象,用于定义和控制 OpenShift Container Platform 集群上无服务器工作负载的行为。
开发人员使用这些 CRD 创建自定义资源(CR)实例,这些实例可作为构建块用于处理复杂用例。例如:
- 快速部署无服务器容器。
- 自动缩放 pod
2.1.1.1. Knative Serving 资源 复制链接链接已复制到粘贴板!
- 服务
-
service.serving.knative.devCRD 会自动管理工作负载的生命周期,以确保应用程序通过网络部署并可访问。每次用户创建的服务或自定义资源发生变化时,它都会创建一个路由、配置和新修订版本。Knative 中进行的大多数开发人员交互都是通过修改服务进行的。 - 修订
-
revision.serving.knative.devCRD 是每次对工作负载进行修改所涉及代码和配置的时间点快照。所有修订版本均为不可变对象,可以根据需要保留。 - Route
-
route.serving.knative.devCRD 可将网络端点映射到一个或多个修订版本。您可通过多种方式管理流量,包括部分流量和指定路由。 - Configuration
-
configuration.serving.knative.devCRD 可保持部署所需状态。它可在使编程过程和配置配置过程相互分离。修改配置则会创建一个新修订版本。
2.1.2. Knative Eventing 复制链接链接已复制到粘贴板!
OpenShift Container Platform 上的 Knative Eventing 可让开发人员使用 事件驱动的架构 和无服务器应用程序。事件驱动的体系结构是基于事件和事件用户间分离关系的概念。
事件制作者创建事件,事件 sink、或消费者接收事件。Knative Eventing 使用标准 HTTP POST 请求来发送和接收事件制作者和 sink 之间的事件。这些事件符合 CloudEvents 规范,它允许在任何编程语言中创建、解析、发送和接收事件。
Knative Eventing 支持以下用例:
- 在不创建消费者的情况下发布事件
- 您可以将事件作为 HTTP POST 发送到代理,并使用绑定分离生成事件的应用程序的目标配置。
- 在不创建发布程序的情况下消耗事件
- 您可以使用 Trigger 来根据事件属性消耗来自代理的事件。应用程序以 HTTP POST 的形式接收事件。
要启用多种 sink 类型的交付,Knative Eventing 会定义以下通用接口,这些接口可由多个 Kubernetes 资源实现:
- 可寻址的资源
-
能够接收和确认通过 HTTP 发送的事件到 Event 的
status.address.url字段中定义的地址。KubernetesService资源也满足可寻址的接口。 - 可调用的资源
-
能够通过 HTTP 接收事件并转换它,并在 HTTP 响应有效负载中返回
0或1新事件。这些返回的事件可能会象处理外部事件源中的 Events 一样进一步处理。
您可以使用以下方法将事件从事件源传播到多个事件接收器:
2.1.3. 支持的配置 复制链接链接已复制到粘贴板!
OpenShift Serverless 支持的功能、配置和集成(当前和过去的版本)包括在 支持的配置页面中。
2.1.4. 可伸缩性和性能 复制链接链接已复制到粘贴板!
OpenShift Serverless 已使用配置为 3 个主要节点和 3 个 worker 节点进行测试,每个节点都有 64 个 CPU、457 GB 内存和 394 GB 存储。
使用此配置创建的最大 Knative 服务数为 3,000。这与 OpenShift Container Platform Kubernetes 服务限制 10,000 对应,因为 1 个 Knative 服务创建 3 个 Kubernetes 服务。
零响应时间的平均缩放约为 3.4 秒,最大响应时间为 8 秒,而一个简单 Quarkus 应用程序使用 99.9thile 的 4.5 秒。这些时间可能因应用程序和应用程序的运行时的不同而有所不同。
2.2. 关于 OpenShift Serverless 功能 复制链接链接已复制到粘贴板!
OpenShift Serverless 功能使开发人员能够在 OpenShift Container Platform 上创建和部署无状态、事件驱动的功能,作为 Knative 服务。kn func CLI 作为 Knative kn CLI 的插件提供。您可以使用 kn func CLI 在集群中创建、构建和部署容器镜像作为 Knative 服务。
OpenShift Serverless 功能只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
2.2.1. 包括运行时 复制链接链接已复制到粘贴板!
OpenShift Serverless 功能提供模板,可用于为以下运行时创建基本功能:
2.2.2. 后续步骤 复制链接链接已复制到粘贴板!
- 功能入门。
2.3. 事件源 复制链接链接已复制到粘贴板!
Knative 事件源可以是生成或导入云事件的任何 Kubernetes 对象,并将这些事件转发到另一个端点,称为接收器(sink)。采购事件对于开发对事件做出反应的分布式系统至关重要。
您可以使用 OpenShift Container Platform Web 控制台、Knative (kn) CLI 或应用 YAML 文件的 Developer 视角创建和管理 Knative 事件源。
目前,OpenShift Serverless 支持以下事件源类型:
您还可以 创建自定义事件源。
2.4. 代理(Broker) 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
2.4.1. 代理类型 复制链接链接已复制到粘贴板!
集群管理员可为集群设置 default 代理实施。创建代理时,会使用 default 代理实现,除非在 Broker 对象中提供配置。
Kafka 代理只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
2.4.1.1. 用于开发的默认代理实现 复制链接链接已复制到粘贴板!
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。默认代理由 InMemoryChannel 频道实现支持。
如果要使用 Kafka 降低网络跃点,请使用 Kafka 代理实现。不要将基于频道的代理配置为由 KafkaChannel 频道实现支持。
2.4.1.2. production-ready Kafka 代理实现 复制链接链接已复制到粘贴板!
对于生产环境就绪的 Knative Eventing 部署,红帽建议您使用 Knative Kafka 代理实现。Kafka 代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Kafka 代理禁用联邦信息处理标准(FIPS)模式。
Kafka 代理具有与 Kafka 的原生集成,用于存储和路由事件。这可让您更好地与 Kafka 集成,以便在其他代理类型上更好地与 Kafka 集成,并减少网络跃点。Kafka 代理实现的其他优点包括:
- at-least-once delivery assurance
- 根据 CloudEvents 分区扩展排序事件交付
- control plane 高可用性
- 水平扩展数据平面
Knative Kafka 代理使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的数据 规格与 Kafka 记录的值对应。
2.4.2. 后续步骤 复制链接链接已复制到粘贴板!
2.5. 频道和订阅 复制链接链接已复制到粘贴板!
频道是定义单一事件转发和持久层的自定义资源。事件源或生成程序将事件发送到频道后,可使用订阅将这些事件发送到多个 Knative 服务或其他 sink。
您可以通过实例化受支持的 Channel 对象来创建频道,并通过修改 Subscription 对象中的 delivery 规格来配置重新发送尝试。
创建 Channel 对象后,,根据默认频道实现,一个经过更改的准入 Webhook 会为 Channel 对象添加一组 spec.channelTemplate 属性。例如,对于 InMemoryChannel 默认实现,Channel 对象如下所示:
然后,频道控制器将根据这个 spec.channelTemplate 配置创建后备频道实例。
创建后,spec.channelTemplate 属性将无法更改,因为它们由默认频道机制设置,而不是由用户设置。
当此机制与上例搭配使用时,会创建两个对象:一个通用的后备频道和一个 InMemoryChannel 频道。如果您使用不同的默认频道实现,使用特定于您的实现的频道替换 InMemoryChannel。例如,在 Knative Kafka 中,创建 KafkaChannel 频道。
后备频道充当将订阅复制到用户创建的频道对象的代理,并设置用户创建的频道对象状态来反映后备频道的状态。
2.5.1. 频道实现类型 复制链接链接已复制到粘贴板!
InMemoryChannel 和 KafkaChannel 频道实现可用于 OpenShift Serverless 进行开发。
以下是 InMemoryChannel 类型频道的限制:
- 没有可用的事件持久性。如果 Pod 停机,则 Pod 上的事件将会丢失。
-
InMemoryChannel频道没有实现事件排序,因此同时接收到的两个事件可能会以任何顺序传送给订阅者。 -
如果订阅者拒绝某个事件,则不会默认重新发送尝试。您可以通过修改
Subscription对象中的delivery规格来配置重新发送尝试。
有关 Kafka 频道的更多信息,请参阅 Knative Kafka 文档。
2.5.2. 后续步骤 复制链接链接已复制到粘贴板!
第 3 章 安装 复制链接链接已复制到粘贴板!
3.1. 安装 OpenShift Serverless Operator 复制链接链接已复制到粘贴板!
安装 OpenShift Serverless Operator 允许您在 OpenShift Container Platform 集群中安装和使用 Knative Serving、Knative Eventing 和 Knative Kafka。OpenShift Serverless Operator 管理集群的 Knative 自定义资源定义(CRD),并可让您在不直接为每个组件修改单个配置映射的情况下配置它们。
3.1.1. 开始前 复制链接链接已复制到粘贴板!
在安装 OpenShift Serverless 前,请阅读以下有关支持的配置和先决条件的信息。
- OpenShift Serverless 支持在受限网络环境中安装。
- OpenShift Serverless 目前无法在单个集群的多租户配置中使用。
3.1.1.1. 定义集群大小要求 复制链接链接已复制到粘贴板!
要安装和使用 OpenShift Serverless,OpenShift Container Platform 集群必须正确定义大小。运行 OpenShift Serverless 的总大小要求取决于安装的组件以及部署的应用程序,并因部署的不同而有所不同。
以下要求仅与 OpenShift Container Platform 集群的 worker 机器池相关。control plane 节点不用于常规调度,它不在要求中。
默认情况下,每个 pod 请求大约 400m CPU,因此最低要求会基于此值。降低应用程序的实际 CPU 请求可增加可能的副本数。
如果您在集群中启用了高可用性 (HA),需要 0.5 - 1.5 个内核,每个 Knative Serving control plane 副本需要 200MB 到 2GB 内存。
3.1.1.2. 使用机器集扩展集群 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform MachineSet API 手动将集群扩展至所需大小。最低要求通常意味着,您需要将一个默认机器集进行扩展,增加两个额外的机器。请参阅手动扩展机器集。
3.1.2. 安装 OpenShift Serverless Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台从 OperatorHub 安装 OpenShift Serverless Operator。安装此 Operator 可让您安装和使用 Knative 组件。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 已登陆到 OpenShift Container Platform Web 控制台。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Operators → OperatorHub 页。
- 滚动页面,或在 Filter by keyword 框中输入关键字 Serverless 来查找 OpenShift Serverless Operator。
- 查看 Operator 信息并单击 Install。
在 Install Operator 页面中:
-
Installation Mode 是 All namespaces on the cluster (default)。此模式将 Operator 安装至默认
openshift-serverless命名空间,以便供集群中的所有命名空间监视和使用。 -
Installed Namespace 是
openshift-serverless。 - 选择 stable 频道作为 更新频道。stable 频道将启用 OpenShift Serverless Operator 最新稳定版本的安装。
- 选择 Automatic 或 Manual 批准策略。
-
Installation Mode 是 All namespaces on the cluster (default)。此模式将 Operator 安装至默认
- 点击 Install 使 Operator 可供 OpenShift Container Platform 集群上的所选命名空间使用。
在 Catalog → Operator Management 页面中,您可以监控 OpenShift Serverless Operator 订阅的安装和升级进度。
- 如果选择了 Manual 批准策略,订阅的升级状态将会一直保持在 Upgrading,直到您审阅并批准了它的安装计划。在 Install Plan 页面批准后,订阅的升级状态将变为 Up to date。
- 如果选择了 Automatic 批准策略,升级状态会在不用人工参与的情况下变为 Up to date。
验证
当订阅的升级状态变为Up to date 后,选择 Catalog → Installed Operators 来验证 OpenShift Serverless Operator 最终出现,它的 Status 在相关的命名空间中最终会变为 InstallSucceeded。
如果没有:
- 切换到 Catalog → Operator Management 页,检查 Operator Subscriptions 和 Install Plans 页中的 Status 是否有错误。
-
检查 Workloads → Pods 页中提供的关于
openshift-serverless项目中的 pod 的日志信息,以便进一步排除故障。
如果要在 OpenShift Serverless 中使用 Red Hat OpenShift distributed tracing,则必须在安装 Knative Serving 或 Knative Eventing 前安装和配置 Red Hat OpenShift distributed tracing。
3.1.4. 后续步骤 复制链接链接已复制到粘贴板!
- 安装 OpenShift Serverless Operator 后,您可以安装 Knative Serving 或 安装 Knative Eventing。
3.2. 安装 Knative Serving 复制链接链接已复制到粘贴板!
安装 Knative Serving 可让您在集群中创建 Knative 服务和功能。它还允许您为应用程序使用自动扩展和网络选项等其他功能。
安装 OpenShift Serverless Operator 后,您可以使用默认设置安装 Knative Serving,或者在 KnativeServing 自定义资源(CR)中配置更高级的设置。如需有关 KnativeServing CR 配置选项的更多信息,请参阅全局配置。
如果要在 OpenShift Serverless 中使用 Red Hat OpenShift distributed tracing,则必须在安装 Knative Serving 前安装和配置 Red Hat OpenShift distributed tracing。
3.2.1. 使用 Web 控制台安装 Knative Serving 复制链接链接已复制到粘贴板!
安装 OpenShift Serverless Operator 后,使用 OpenShift Container Platform Web 控制台安装 Knative Serving。您可以使用默认设置安装 Knative Serving,或者在 KnativeServing 自定义资源(CR)中配置更高级的设置。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 已登陆到 OpenShift Container Platform Web 控制台。
- 已安装 OpenShift Serverless Operator。
流程
- 在 OpenShift Container Platform web 控制台的 Administrator 视角中,进入 Operators → Installed Operators。
- 检查页面顶部的 Project 下拉菜单是否已设置为 Project: knative-serving。
- 点击 OpenShift Serverless Operator 的 Provided APIs 列表中的 Knative Serving 来进入 Knative Serving 选项卡。
- 点 Create Knative Serving。
在 Create Knative Serving 页中,您可以使用默认设置安装 Knative Serving。点 Create。
您还可以使用提供的表单或编辑 YAML 来修改
KnativeServing对象来修改 Knative Serving 安装的设置。-
建议您在不需要完全控制
KnativeServing对象创建的简单配置中使用该表单。 对于更复杂的配置,建议编辑 YAML,这可以完全控制
KnativeServing对象的创建。您可以通过点击 Create Knative Serving 页右上角的 edit YAML 链接来访问 YAML。完成表单后,或者完成对 YAML 的修改后,点 Create。
注意如需有关 KnativeServing 自定义资源定义的配置选项的更多信息,请参阅 高级安装配置选项。
-
建议您在不需要完全控制
-
安装 Knative Serving 后,会创建
KnativeServing对象,并自动定向到 Knative Serving 选项卡。您可以在资源列表中看到knative-serving自定义资源。
验证
-
在 Knative Serving 选项卡中点
knative-serving自定义资源。 您将被自动定向到 Knative Serving Overview 页面。
- 向下滚动查看条件列表。
您应该看到一个状况为 True的条件列表,如示例镜像所示。
注意创建 Knative Serving 资源可能需要几秒钟时间。您可以在 Resources 选项卡中查看其状态。
- 如果条件状态为 Unknown 或 False,请等待几分钟,然后在确认已创建资源后再重新检查。
3.2.2. 使用 YAML 安装 Knative Serving 复制链接链接已复制到粘贴板!
安装 OpenShift Serverless Operator 后,您可以使用默认设置安装 Knative Serving,或者在 KnativeServing 自定义资源(CR)中配置更高级的设置。您可以使用 YAML 文件和 oc CLI 安装 Knative Serving。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 已安装 OpenShift Serverless Operator。
-
安装 OpenShift CLI(
oc)。
流程
创建名为
serving.yaml的文件并将以下示例 YAML 复制到其中:apiVersion: operator.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-servingapiVersion: operator.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
service.yaml文件:oc apply -f serving.yaml
$ oc apply -f serving.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用以下命令校验安装是否完成:
oc get knativeserving.operator.knative.dev/knative-serving -n knative-serving --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'$ oc get knativeserving.operator.knative.dev/knative-serving -n knative-serving --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
DependenciesInstalled=True DeploymentsAvailable=True InstallSucceeded=True Ready=True
DependenciesInstalled=True DeploymentsAvailable=True InstallSucceeded=True Ready=TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意创建 Knative Serving 资源可能需要几秒钟时间。
如果条件状态为
Unknown或False,请等待几分钟,然后在确认已创建资源后再重新检查。检查是否已创建 Knative Serving 资源:
oc get pods -n knative-serving
$ oc get pods -n knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查所需的网络组件是否已安装到自动创建的
knative-serving-ingress命名空间:oc get pods -n knative-serving-ingress
$ oc get pods -n knative-serving-ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE net-kourier-controller-7d4b6c5d95-62mkf 1/1 Running 0 76s net-kourier-controller-7d4b6c5d95-qmgm2 1/1 Running 0 76s 3scale-kourier-gateway-6688b49568-987qz 1/1 Running 0 75s 3scale-kourier-gateway-6688b49568-b5tnp 1/1 Running 0 75s
NAME READY STATUS RESTARTS AGE net-kourier-controller-7d4b6c5d95-62mkf 1/1 Running 0 76s net-kourier-controller-7d4b6c5d95-qmgm2 1/1 Running 0 76s 3scale-kourier-gateway-6688b49568-987qz 1/1 Running 0 75s 3scale-kourier-gateway-6688b49568-b5tnp 1/1 Running 0 75sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.3. 后续步骤 复制链接链接已复制到粘贴板!
- 如果要使用 Knative 事件驱动的架构,您可以安装 Knative Eventing。
3.3. 安装 Knative Eventing 复制链接链接已复制到粘贴板!
要在集群上使用事件驱动的构架,请安装 Knative Eventing。您可以创建 Knative 组件,如事件源、代理和频道,然后使用它们向应用程序或外部系统发送事件。
安装 OpenShift Serverless Operator 后,您可以使用默认设置安装 Knative Eventing,或者在 KnativeEventing 自定义资源(CR)中配置更高级的设置。有关 KnativeEventing CR 配置选项的更多信息,请参阅全局配置。
如果要在 OpenShift Serverless 中使用 Red Hat OpenShift distributed tracing,则必须在安装 Knative Eventing 前安装和配置 Red Hat OpenShift distributed tracing。
3.3.1. 使用 Web 控制台安装 Knative Eventing 复制链接链接已复制到粘贴板!
安装 OpenShift Serverless Operator 后,使用 OpenShift Container Platform Web 控制台安装 Knative Eventing。您可以使用默认设置安装 Knative Eventing,或者在 KnativeEventing 自定义资源(CR)中配置更高级的设置。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 已登陆到 OpenShift Container Platform Web 控制台。
- 已安装 OpenShift Serverless Operator。
流程
- 在 OpenShift Container Platform web 控制台的 Administrator 视角中,进入 Operators → Installed Operators。
- 检查页面顶部的 Project 下拉菜单是否已设置为 Project: knative-eventing。
- 点击 OpenShift Serverless Operator 的 Provided APIs 列表中的 Knative Eventing 来进入 Knative Eventing 选项卡。
- 点 Create Knative Eventing。
在 Create Knative Eventing 页面中,您可以选择使用提供的默认表单或编辑 YAML 来配置
KnativeEventing对象。建议您在不需要完全控制
KnativeEventing对象创建的简单配置中使用该表单。可选。如果您要使用表单配置
KnativeEventing对象,请为您的 Knative Eventing 部署进行任何要实现的更改。
点 Create。
对于更复杂的配置,建议编辑 YAML,这可以完全控制
KnativeEventing对象的创建。您可以通过点击 Create Knative Eventing 页右上角的 edit YAML 链接来访问 YAML。可选。如果您要通过编辑 YAML 配置
KnativeEventing对象,请对您希望用于 Knative Eventing 部署的 YAML 进行更改。
- 点 Create。
-
安装 Knative Eventing 后,会创建
KnativeEventing对象,并自动定向到 Knative Eventing 选项卡。您可以在资源列表中看到knative-eventing自定义资源。
验证
-
点 Knative Eventing 选项卡中的
knative-eventing自定义资源。 您会自动定向到 Knative Eventing Overview 页面。
- 向下滚动查看条件列表。
您应该看到一个状况为 True的条件列表,如示例镜像所示。
注意创建 Knative Eventing 资源可能需要几秒钟时间。您可以在 Resources 选项卡中查看其状态。
- 如果条件状态为 Unknown 或 False,请等待几分钟,然后在确认已创建资源后再重新检查。
3.3.2. 使用 YAML 安装 Knative Eventing 复制链接链接已复制到粘贴板!
安装 OpenShift Serverless Operator 后,您可以使用默认设置安装 Knative Eventing,或者在 KnativeEventing 自定义资源(CR)中配置更高级的设置。您可以使用 YAML 文件和 oc CLI 安装 Knative Eventing。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 已安装 OpenShift Serverless Operator。
-
安装 OpenShift CLI(
oc)。
流程
-
创建名为
eventing.yaml的文件。 将以下示例 YAML 复制到
eventing.yaml中:apiVersion: operator.knative.dev/v1alpha1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventingapiVersion: operator.knative.dev/v1alpha1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventingCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选。根据您的 Knative Eventing 部署,对 YAML 进行相应的更改。
输入以下内容来应用
eventing.yaml文件:oc apply -f eventing.yaml
$ oc apply -f eventing.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证安装是否完成,并观察输出结果:
oc get knativeeventing.operator.knative.dev/knative-eventing \ -n knative-eventing \ --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'$ oc get knativeeventing.operator.knative.dev/knative-eventing \ -n knative-eventing \ --template='{{range .status.conditions}}{{printf "%s=%s\n" .type .status}}{{end}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
InstallSucceeded=True Ready=True
InstallSucceeded=True Ready=TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意创建 Knative Eventing 资源可能需要几秒钟时间。
-
如果条件状态为
Unknown或False,请等待几分钟,然后在确认已创建资源后再重新检查。 使用以下命令检查是否已创建 Knative Eventing 资源:
oc get pods -n knative-eventing
$ oc get pods -n knative-eventingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.3. 后续步骤 复制链接链接已复制到粘贴板!
- 如果要使用 Knative 服务,可以安装 Knative Serving。
3.4. 删除 OpenShift Serverless 复制链接链接已复制到粘贴板!
如果需要从集群中删除 OpenShift Serverless,您可以手动删除 OpenShift Serverless Operator 和其他 OpenShift Serverless 组件。在删除 OpenShift Serverless Operator 之前,您必须删除 Knative Serving 和 Knative Eventing。
3.4.1. 卸载 Knative Serving 复制链接链接已复制到粘贴板!
在删除 OpenShift Serverless Operator 之前,您必须删除 Knative Serving。要卸载 Knative Serving,您必须删除 KnativeServing 自定义资源(CR)并删除 knative-serving 命名空间。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
-
安装 OpenShift CLI(
oc)。
流程
删除
KnativeServingCR:oc delete knativeservings.operator.knative.dev knative-serving -n knative-serving
$ oc delete knativeservings.operator.knative.dev knative-serving -n knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在该命令运行完成且已从
knative-serving命名空间中移除所有 Pod 后,删除命名空间:oc delete namespace knative-serving
$ oc delete namespace knative-servingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.2. 卸载 Knative Eventing 复制链接链接已复制到粘贴板!
在删除 OpenShift Serverless Operator 之前,您必须删除 Knative Eventing。要卸载 Knative Eventing,您必须删除 KnativeEventing 自定义资源(CR)并删除 knative-eventing 命名空间。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
-
安装 OpenShift CLI(
oc)。
流程
删除
KnativeEventingCR:oc delete knativeeventings.operator.knative.dev knative-eventing -n knative-eventing
$ oc delete knativeeventings.operator.knative.dev knative-eventing -n knative-eventingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在该命令运行完成且已从
knative-eventing命名空间中移除所有 Pod 后,删除命名空间:oc delete namespace knative-eventing
$ oc delete namespace knative-eventingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3. 删除 OpenShift Serverless Operator 复制链接链接已复制到粘贴板!
删除 Knative Serving 和 Knative Eventing 后,您可以删除 OpenShift Serverless Operator。您可以使用 OpenShift Container Platform Web 控制台或 oc CLI 完成此操作。
3.4.3.1. 使用 Web 控制台从集群中删除 Operator 复制链接链接已复制到粘贴板!
集群管理员可以使用 Web 控制台从所选命名空间中删除已安装的 Operator。
先决条件
-
使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群 Web 控制台。
流程
- 进入 Operators → Installed Operators 页面,在 Filter by name 字段滚动鼠标或键入关键词,以查找您想要的 Operator。然后点击。
在 Operator Details 页面右侧,从 Actions 列表中选择 Uninstall Operator。
此时会显示 Uninstall Operator? 对话框,提醒您:
删除 Operator 不会移除任何自定义资源定义或受管资源。如果 Operator 在集群中部署了应用程序,或者配置了非集群资源,则这些应用程序将继续运行,需要手动清理。
此操作将删除 Operator 以及 Operator 部署和 pod(若有)。任何 Operands 和由 Operator 管理的资源(包括 CRD 和 CR)都不会被删除。Web 控制台为一些 Operator 启用仪表板和导航项。要在卸载 Operator 后删除这些,您可能需要手动删除 Operator CRD。
- 选择 Uninstall。此 Operator 将停止运行,并且不再接收更新。
3.4.3.2. 使用 CLI 从集群中删除 Operator 复制链接链接已复制到粘贴板!
集群管理员可以使用 CLI 从所选命名空间中删除已安装的 Operator。
先决条件
-
使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。 -
已在工作站上安装
oc命令。
流程
通过
currentCSV字段检查已订阅 Operator 的当前版本(如jaeger):oc get subscription jaeger -n openshift-operators -o yaml | grep currentCSV
$ oc get subscription jaeger -n openshift-operators -o yaml | grep currentCSVCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
currentCSV: jaeger-operator.v1.8.2
currentCSV: jaeger-operator.v1.8.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除订阅(如
jaeger):oc delete subscription jaeger -n openshift-operators
$ oc delete subscription jaeger -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
subscription.operators.coreos.com "jaeger" deleted
subscription.operators.coreos.com "jaeger" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一步中的
currentCSV值来删除目标命名空间中相应 Operator 的 CSV:oc delete clusterserviceversion jaeger-operator.v1.8.2 -n openshift-operators
$ oc delete clusterserviceversion jaeger-operator.v1.8.2 -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
clusterserviceversion.operators.coreos.com "jaeger-operator.v1.8.2" deleted
clusterserviceversion.operators.coreos.com "jaeger-operator.v1.8.2" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3.3. 刷新失败的订阅 复制链接链接已复制到粘贴板!
在 Operator Lifecycle Manager(OLM)中,如果您订阅的是引用网络中无法访问的镜像的 Operator,您可以在 openshift-marketplace 命名空间中找到带有以下错误的作业:
输出示例
ImagePullBackOff for Back-off pulling image "example.com/openshift4/ose-elasticsearch-operator-bundle@sha256:6d2587129c846ec28d384540322b40b05833e7e00b25cca584e004af9a1d292e"
ImagePullBackOff for
Back-off pulling image "example.com/openshift4/ose-elasticsearch-operator-bundle@sha256:6d2587129c846ec28d384540322b40b05833e7e00b25cca584e004af9a1d292e"
输出示例
rpc error: code = Unknown desc = error pinging docker registry example.com: Get "https://example.com/v2/": dial tcp: lookup example.com on 10.0.0.1:53: no such host
rpc error: code = Unknown desc = error pinging docker registry example.com: Get "https://example.com/v2/": dial tcp: lookup example.com on 10.0.0.1:53: no such host
因此,订阅会处于这个失败状态,Operator 无法安装或升级。
您可以通过删除订阅、集群服务版本(CSV)及其他相关对象来刷新失败的订阅。重新创建订阅后,OLM 会重新安装 Operator 的正确版本。
先决条件
- 您有一个失败的订阅,无法拉取不能访问的捆绑包镜像。
- 已确认可以访问正确的捆绑包镜像。
流程
从安装 Operator 的命名空间中获取
Subscription和ClusterServiceVersion对象的名称:oc get sub,csv -n <namespace>
$ oc get sub,csv -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PACKAGE SOURCE CHANNEL subscription.operators.coreos.com/elasticsearch-operator elasticsearch-operator redhat-operators 5.0 NAME DISPLAY VERSION REPLACES PHASE clusterserviceversion.operators.coreos.com/elasticsearch-operator.5.0.0-65 OpenShift Elasticsearch Operator 5.0.0-65 Succeeded
NAME PACKAGE SOURCE CHANNEL subscription.operators.coreos.com/elasticsearch-operator elasticsearch-operator redhat-operators 5.0 NAME DISPLAY VERSION REPLACES PHASE clusterserviceversion.operators.coreos.com/elasticsearch-operator.5.0.0-65 OpenShift Elasticsearch Operator 5.0.0-65 SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除订阅:
oc delete subscription <subscription_name> -n <namespace>
$ oc delete subscription <subscription_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除集群服务版本:
oc delete csv <csv_name> -n <namespace>
$ oc delete csv <csv_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
openshift-marketplace命名空间中获取所有失败的作业的名称和相关配置映射:oc get job,configmap -n openshift-marketplace
$ oc get job,configmap -n openshift-marketplaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME COMPLETIONS DURATION AGE job.batch/1de9443b6324e629ddf31fed0a853a121275806170e34c926d69e53a7fcbccb 1/1 26s 9m30s NAME DATA AGE configmap/1de9443b6324e629ddf31fed0a853a121275806170e34c926d69e53a7fcbccb 3 9m30s
NAME COMPLETIONS DURATION AGE job.batch/1de9443b6324e629ddf31fed0a853a121275806170e34c926d69e53a7fcbccb 1/1 26s 9m30s NAME DATA AGE configmap/1de9443b6324e629ddf31fed0a853a121275806170e34c926d69e53a7fcbccb 3 9m30sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除作业:
oc delete job <job_name> -n openshift-marketplace
$ oc delete job <job_name> -n openshift-marketplaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这样可确保尝试拉取无法访问的镜像的 Pod 不会被重新创建。
删除配置映射:
oc delete configmap <configmap_name> -n openshift-marketplace
$ oc delete configmap <configmap_name> -n openshift-marketplaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 Web 控制台中使用 OperatorHub 重新安装 Operator。
验证
检查是否已成功重新安装 Operator:
oc get sub,csv,installplan -n <namespace>
$ oc get sub,csv,installplan -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.4. 删除 OpenShift Serverless 自定义资源定义 复制链接链接已复制到粘贴板!
卸载 OpenShift Serverless 后,Operator 和 API 自定义资源定义(CRD)会保留在集群中。您可以使用以下步骤删除剩余的 CRD。
移除 Operator 和 API CRD 也会移除所有使用它们定义的资源,包括 Knative 服务。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 您已卸载了 Knative Serving 并移除了 OpenShift Serverless Operator。
-
安装 OpenShift CLI(
oc)。
流程
运行以下命令删除 OpenShift Serverless CRD:
oc get crd -oname | grep 'knative.dev' | xargs oc delete
$ oc get crd -oname | grep 'knative.dev' | xargs oc deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 Knative CLI 复制链接链接已复制到粘贴板!
4.1. 安装 Knative CLI 复制链接链接已复制到粘贴板!
Knative(kn)CLI 本身没有登录机制。要登录到集群,您必须安装 OpenShift CLI (oc),并使用 oc login 命令。CLI 的安装选项可能会因您的操作系统而异。
有关为您的操作系统安装 oc CLI 并使用 oc 登录的更多信息,请参阅 OpenShift CLI 启动文档。
OpenShift Serverless 不能使用 Knative(kn)CLI 安装。集群管理员必须安装 OpenShift Serverless Operator 并设置 Knative 组件,如 安装 OpenShift Serverless Operator 文档所述。
如果您试图将较旧版本的 Knative kn CLI 与较新的 OpenShift Serverless 发行版本搭配使用,则不会找到 API,并出现错误。
例如,如果您使用 Knative (kn) CLI 的 1.23.0 版本,且版本 1.24.0 OpenShift Serverless 发行版本使用 Knative Serving 和 Knative Eventing API 的 1.3 版本,则 CLI 无法正常工作,因为它继续查找过时的 1.2 API 版本。
确保为 OpenShift Serverless 版本使用最新的 Knative(kn)CLI 版本以避免出现问题。
使用 OpenShift Container Platform Web 控制台提供了一个简洁、直观的用户界面来安装 Knative(kn)CLI。安装 OpenShift Serverless Operator 后,您会看到从 OpenShift Container Platform Web 控制台的 Command Line Tools 页面中下载适用于 Linux 的 Knative(kn)CLI 的链接(amd64、s390x、ppc64le)、macOS 或 Windows。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
OpenShift Serverless Operator 和 Knative Serving 已安装在 OpenShift Container Platform 集群中。
重要如果 libc 不可用,您在运行 CLI 命令时可能会看到以下错误:
kn: No such file or directory
$ kn: No such file or directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果要使用验证步骤,您必须安装 OpenShift (
oc) CLI。
流程
-
从 Command Line Tools 页面下载 Knative(
kn)CLI。您可以点 web 控制台右上角的
图标进入 Command Line Tools 页,并在列表中选择 Command Line Tools。
解包存档:
tar -xf <file>
$ tar -xf <file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
kn二进制文件移到PATH中的目录中。 运行以下命令可以查看
PATH的值:echo $PATH
$ echo $PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令检查是否已创建了正确的 Knative CLI 资源和路由:
oc get ConsoleCLIDownload
$ oc get ConsoleCLIDownloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY NAME AGE kn kn - OpenShift Serverless Command Line Interface (CLI) 2022-09-20T08:41:18Z oc-cli-downloads oc - OpenShift Command Line Interface (CLI) 2022-09-20T08:00:20Z
NAME DISPLAY NAME AGE kn kn - OpenShift Serverless Command Line Interface (CLI) 2022-09-20T08:41:18Z oc-cli-downloads oc - OpenShift Command Line Interface (CLI) 2022-09-20T08:00:20ZCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route -n openshift-serverless
$ oc get route -n openshift-serverlessCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD kn kn-openshift-serverless.apps.example.com knative-openshift-metrics-3 http-cli edge/Redirect None
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD kn kn-openshift-serverless.apps.example.com knative-openshift-metrics-3 http-cli edge/Redirect NoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.2. 使用 RPM 软件包管理器为 Linux 安装 Knative CLI 复制链接链接已复制到粘贴板!
对于 Red Hat Enterprise Linux(RHEL),您可以使用软件包管理器(如 yum 或 dnf )将 Knative(kn)CLI 作为 RPM 安装。这允许系统自动管理 Knative CLI 版本。例如,如果有新版本可用,使用 dnf upgrade 一样的命令升级所有软件包,包括 kn。
先决条件
- 您的红帽帐户必须具有有效的 OpenShift Container Platform 订阅。
流程
使用 Red Hat Subscription Manager 注册:
subscription-manager register
# subscription-manager registerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取最新的订阅数据:
subscription-manager refresh
# subscription-manager refreshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将订阅附加到注册的系统:
subscription-manager attach --pool=<pool_id>
# subscription-manager attach --pool=<pool_id>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 活跃的 OpenShift Container Platform 订阅的池 ID
启用 Knative(
kn)CLI 所需的存储库:Linux (x86_64, amd64)
subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-x86_64-rpms"
# subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-x86_64-rpms"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Linux on IBM Z and LinuxONE (s390x)
subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-s390x-rpms"
# subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-s390x-rpms"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Linux on IBM Power (ppc64le)
subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-ppc64le-rpms"
# subscription-manager repos --enable="openshift-serverless-1-for-rhel-8-ppc64le-rpms"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用软件包管理器将 Knative(
kn)CLI 作为 RPM 安装:yum命令示例yum install openshift-serverless-clients
# yum install openshift-serverless-clientsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.3. 为 Linux 安装 Knative CLI 复制链接链接已复制到粘贴板!
如果您使用没有 RPM 或者另一个软件包管理器的 Linux 发行版本,您可以将 Knative(kn)CLI 安装为二进制文件。要做到这一点,您必须下载并解包一个 tar.gz 存档,并将二进制文件添加到 PATH 的目录中。
先决条件
如果您不使用 RHEL 或 Fedora,请确保将 libc 安装在库路径的目录中。
重要如果 libc 不可用,您在运行 CLI 命令时可能会看到以下错误:
kn: No such file or directory
$ kn: No such file or directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
下载相关的 Knative(
kn)CLItar.gz存档:解包存档:
tar -xf <filename>
$ tar -xf <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
kn二进制文件移到PATH中的目录中。 运行以下命令可以查看
PATH的值:echo $PATH
$ echo $PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.4. 为 macOS 安装 Knative CLI 复制链接链接已复制到粘贴板!
如果使用 macOS,您可以将 Knative(kn)CLI 安装为二进制文件。要做到这一点,您必须下载并解包一个 tar.gz 存档,并将二进制文件添加到 PATH 的目录中。
流程
-
下载 Knative(
kn)CLItar.gz存档。 - 解包并提取存档。
-
将
kn二进制文件移到PATH中的目录中。 要查看
PATH,打开终端窗口并运行:echo $PATH
$ echo $PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.5. 为 Windows 安装 Knative CLI 复制链接链接已复制到粘贴板!
如果使用 Windows,您可以将 Knative(kn)CLI 安装为二进制文件。要做到这一点,您必须下载并解包 ZIP 存档,并将二进制文件添加到 PATH 的目录中。
流程
-
下载 Knative(
kn)CLI ZIP 存档。 - 使用 ZIP 程序解压存档。
-
将
kn二进制文件移到PATH中的目录中。 要查看您的
PATH,请打开命令窗口并运行以下命令:path
C:\> pathCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. 配置 Knative CLI 复制链接链接已复制到粘贴板!
您可以通过创建 config.yaml 配置文件来自定义 Knative(kn)CLI 设置。您可以使用 --config 标志来提供此配置,否则会从默认位置提取配置。默认配置位置符合 XDG Base Directory 规格,对于 UNIX 系统和 Windows 系统有所不同。
对于 UNIX 系统:
-
如果设置了
XDG_CONFIG_HOME环境变量,Knative(kn)CLI 查找的默认配置位置为$XDG_CONFIG_HOME/kn。 -
如果没有设置
XDG_CONFIG_HOME环境变量,Knative(kn)CLI 会在$HOME/.config/kn/config.yaml的用户主目录中查找配置。
对于 Windows 系统,默认的 Knative(kn)CLI 配置位置为 %APPDATA%\kn。
配置文件示例
- 1
- 指定 Knative(
kn)CLI 是否应该在PATH环境变量中查找插件。这是一个布尔值配置选项。默认值为false。 - 2
- 指定 Knative(
kn)CLI 查找插件的目录。默认路径取决于操作系统,如前面所述。这可以是用户可见的任何目录。 - 3
sink-mappingsspec 定义了在 Knative(kn)CLI 命令中使用--sink标志时使用的 Kubernetes 可寻址资源。- 4
- 您用来描述接收器(sink)的前缀。
svc(用于服务)、channel和broker是 Knative (kn) CLI 中预定义的前缀。 - 5
- Kubernetes 资源的 API 组。
- 6
- Kubernetes 资源的版本。
- 7
- Kubernetes 资源类型的复数名称。例如,
services或brokers。
4.3. Knative CLI 插件 复制链接链接已复制到粘贴板!
Knative (kn) CLI 支持使用插件,这允许您通过添加不是核心发行版本一部分的自定义命令和其他共享命令来扩展 kn 安装的功能。Knative(kn)CLI 插件的使用方式与主 kn 功能相同。
目前,红帽支持 kn-source-kafka 插件和 kn-event 插件。
kn-event 插件只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
4.3.1. 使用 kn-event 插件构建事件 复制链接链接已复制到粘贴板!
您可以使用 kn event build 命令的 builder 接口来构建事件。然后,您可以稍后发送该事件或在另一个上下文中使用它。
先决条件
-
已安装 Knative(
kn)CLI。
流程
构建事件:
kn event build --field <field-name>=<value> --type <type-name> --id <id> --output <format>
$ kn event build --field <field-name>=<value> --type <type-name> --id <id> --output <format>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
--field标志将数据作为字段值对添加到事件中。您可以多次使用它。 -
--type标志允许您指定指定事件类型的字符串。 -
--id标志指定事件的 ID。 您可以将
json或yaml参数与--output标志一起使用,以更改事件的输出格式。所有这些标记都是可选的。
构建简单的事件
kn event build -o yaml
$ kn event build -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 结果为 YAML 格式
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 构建示例事务事件
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 格式的结果事件
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
4.3.2. 使用 kn-event 插件发送事件 复制链接链接已复制到粘贴板!
您可以使用 kn event send 命令来发送事件。事件可以发送到公开的地址,或发送到集群中的可寻址资源,如 Kubernetes 服务,以及 Knative 服务、代理和频道。命令使用与 kn event build 命令相同的 builder 接口。
先决条件
-
已安装 Knative(
kn)CLI。
流程
发送事件:
kn event send --field <field-name>=<value> --type <type-name> --id <id> --to-url <url> --to <cluster-resource> --namespace <namespace>
$ kn event send --field <field-name>=<value> --type <type-name> --id <id> --to-url <url> --to <cluster-resource> --namespace <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
--field标志将数据作为字段值对添加到事件中。您可以多次使用它。 -
--type标志允许您指定指定事件类型的字符串。 -
--id标志指定事件的 ID。 -
如果您要将事件发送到公开的目的地,请使用
--to-url标志指定 URL。 如果要将事件发送到集群内 Kubernetes 资源,请使用
--to标志指定目的地。-
使用
<Kind>:<ApiVersion>:<name>格式指定 Kubernetes 资源。
-
使用
--namespace标志指定命名空间。如果省略,则会从当前上下文中获取命名空间。所有这些标志都是可选的,除了目的地规格外,您需要使用
--to-url或--to。以下示例显示向 URL 发送事件:
示例命令
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了将事件发送到 in-cluster 资源:
示例命令
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
4.4. Knative Serving CLI 命令 复制链接链接已复制到粘贴板!
您可以使用以下 Knative (kn) CLI 命令,在集群中完成 Knative Serving 任务。
4.4.1. kn service 命令 复制链接链接已复制到粘贴板!
您可以使用以下命令创建和管理 Knative 服务。
4.4.1.1. 使用 Knative CLI 创建无服务器应用程序 复制链接链接已复制到粘贴板!
通过使用 Knative (kn) CLI 创建无服务器应用程序,通过直接修改 YAML 文件来提供更精简且直观的用户界面。您可以使用 kn service create 命令创建基本无服务器应用程序。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建 Knative 服务:
kn service create <service-name> --image <image> --tag <tag-value>
$ kn service create <service-name> --image <image> --tag <tag-value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
--image是应用的镜像的 URI。 --tag是一个可选标志,可用于向利用服务创建的初始修订版本添加标签。示例命令
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 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
4.4.1.2. 使用 Knative CLI 更新无服务器应用程序 复制链接链接已复制到粘贴板!
在以递增方式构建服务时,您可以使用 kn service update 命令进行命令行上的互动会话。与 kn service apply 命令不同,在使用 kn service update 命令时,只需要指定您要更新的更改,而不是指定 Knative 服务的完整配置。
示例命令
通过添加新环境变量来更新服务:
kn service update <service_name> --env <key>=<value>
$ kn service update <service_name> --env <key>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过添加新端口来更新服务:
kn service update <service_name> --port 80
$ kn service update <service_name> --port 80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过添加新的请求和限制参数来更新服务:
kn service update <service_name> --request cpu=500m --limit memory=1024Mi --limit cpu=1000m
$ kn service update <service_name> --request cpu=500m --limit memory=1024Mi --limit cpu=1000mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为修订版本分配
latest标签:kn service update <service_name> --tag <revision_name>=latest
$ kn service update <service_name> --tag <revision_name>=latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为服务的最新
READY修订版本将标签从testing更新为staging:kn service update <service_name> --untag testing --tag @latest=staging
$ kn service update <service_name> --untag testing --tag @latest=stagingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
test标签添加到接收 10% 流量的修订版本,并将其它流量发送到服务的最新READY修订版本:kn service update <service_name> --tag <revision_name>=test --traffic test=10,@latest=90
$ kn service update <service_name> --tag <revision_name>=test --traffic test=10,@latest=90Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.1.3. 应用服务声明 复制链接链接已复制到粘贴板!
您可以使用 kn service apply 命令声明性配置 Knative 服务。如果服务不存在,则使用已更改的选项更新现有服务。
kn service apply 命令对 shell 脚本或持续集成管道特别有用,因为用户通常希望在单个命令中完全指定服务的状态来声明目标状态。
使用 kn service apply 时,必须为 Knative 服务提供完整的配置。这与 kn service update 命令不同,它只在命令中指定您要更新的选项。
示例命令
创建服务:
kn service apply <service_name> --image <image>
$ kn service apply <service_name> --image <image>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将环境变量添加到服务:
kn service apply <service_name> --image <image> --env <key>=<value>
$ kn service apply <service_name> --image <image> --env <key>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 JSON 或 YAML 文件中读取服务声明:
kn service apply <service_name> -f <filename>
$ kn service apply <service_name> -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.1.4. 使用 Knative CLI 描述无服务器应用程序 复制链接链接已复制到粘贴板!
您可以使用 kn service describe 命令来描述 Knative 服务。
示例命令
描述服务:
kn service describe --verbose <service_name>
$ kn service describe --verbose <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow --verbose标志是可选的,但可以包含它以提供更详细的描述。常规输出和详细输出之间的区别在以下示例中显示:没有
--verbose标记的输出示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 带有
--verbose标记的输出示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 YAML 格式描述服务:
kn service describe <service_name> -o yaml
$ kn service describe <service_name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 JSON 格式描述服务:
kn service describe <service_name> -o json
$ kn service describe <service_name> -o jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 仅输出服务 URL:
kn service describe <service_name> -o url
$ kn service describe <service_name> -o urlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.2. 关于 Knative CLI 离线模式 复制链接链接已复制到粘贴板!
执行 kn service 命令时,更改会立即传播到集群。但是,作为替代方案,您可以在离线模式下执行 kn service 命令。当您以离线模式创建服务时,集群不会发生任何更改,而是在本地计算机上创建服务描述符文件。
Knative CLI 的离线模式只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
创建描述符文件后,您可以手动修改并在版本控制系统中跟踪该文件。您还可以使用 kn service create -f、kn service apply -f 或 oc apply -f 命令将更改传播到集群。
离线模式有几种用途:
- 在使用描述符文件对集群进行更改之前,您可以手动修改该文件。
- 您可以在本地跟踪版本控制系统中服务的描述符文件。这可让您在目标集群以外的位置重复使用描述符文件,例如在持续集成(CI)管道、开发环境或演示中。
-
您可以检查创建的描述符文件,以了解 Knative 服务的信息。特别是,您可以看到生成的服务如何受到传递给
kn命令的不同参数的影响。
离线模式有其优点:速度非常快,不需要连接到集群。但是,离线模式缺少服务器端验证。因此,您无法验证服务名称是否唯一,或者是否可以拉取指定镜像。
4.4.2.1. 使用离线模式创建服务 复制链接链接已复制到粘贴板!
您可以在离线模式下执行 kn service 命令,以便集群中不会发生任何更改,而是在本地机器上创建服务描述符文件。创建描述符文件后,您可以在向集群传播更改前修改该文件。
Knative CLI 的离线模式只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。
流程
在离线模式下,创建一个本地 Knative 服务描述符文件:
kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Service 'event-display' created in namespace 'test'.
Service 'event-display' created in namespace 'test'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./标志启用脱机模式,并将./指定为用于存储新目录树的目录。如果您没有指定现有目录,但使用文件名,如
--target my-service.yaml,则不会创建目录树。相反,当前目录中只创建服务描述符my-service.yaml文件。文件名可以具有
.yaml、.yml或.json扩展名。选择.json以 JSON 格式创建服务描述符文件。namespace test选项将新服务放在test命名空间中。如果不使用
--namespace,并且您登录了 OpenShift 集群,则会在当前命名空间中创建描述符文件。否则,描述符文件会在default命名空间中创建。
检查创建的目录结构:
tree ./
$ tree ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
--target指定的当前./目录包含新的test/目录,它在指定的命名空间后命名。 -
test/目录包含ksvc,它在资源类型后命名。 -
ksvc目录包含描述符文件event-display.yaml,它根据指定的服务名称命名。
-
使用
检查生成的服务描述符文件:
cat test/ksvc/event-display.yaml
$ cat test/ksvc/event-display.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出新服务的信息:
kn service describe event-display --target ./ --namespace test
$ kn service describe event-display --target ./ --namespace testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./选项指定包含命名空间子目录的目录结构的根目录。另外,您可以使用
--target选项直接指定 YAML 或 JSON 文件名。可接受的文件扩展包括.yaml、.yml和.json。--namespace选项指定命名空间,与kn通信包含所需服务描述符文件的子目录。如果您不使用
--namespace,且您已登录到 OpenShift 集群,kn在以当前命名空间命名的子目录中搜索该服务。否则,kn在default/子目录中搜索。
使用服务描述符文件在集群中创建服务:
kn service create -f test/ksvc/event-display.yaml
$ kn service create -f test/ksvc/event-display.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.3. kn 容器命令 复制链接链接已复制到粘贴板!
您可以使用以下命令在 Knative 服务规格中创建和管理多个容器。
4.4.3.1. Knative 客户端多容器支持 复制链接链接已复制到粘贴板!
您可以使用 kn container add 命令将 YAML 容器 spec 打印到标准输出。此命令对多容器用例很有用,因为它可以与其他标准 kn 标志一起使用来创建定义。
kn container add 命令接受与容器相关的所有标志,它们都支持与 kn service create 命令搭配使用。kn container add 命令也可以使用 UNIX 管道(|)一次创建多个容器定义来串联。
示例命令
从镜像添加容器并将其打印到标准输出中:
kn container add <container_name> --image <image_uri>
$ kn container add <container_name> --image <image_uri>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn container add sidecar --image docker.io/example/sidecar
$ kn container add sidecar --image docker.io/example/sidecarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
containers: - image: docker.io/example/sidecar name: sidecar resources: {}containers: - image: docker.io/example/sidecar name: sidecar resources: {}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将两个
kn container add命令链接在一起,然后将它们传递给kn service create命令创建带有两个容器的 Knative 服务:kn container add <first_container_name> --image <image_uri> | \ kn container add <second_container_name> --image <image_uri> | \ kn service create <service_name> --image <image_uri> --extra-containers -
$ kn container add <first_container_name> --image <image_uri> | \ kn container add <second_container_name> --image <image_uri> | \ kn service create <service_name> --image <image_uri> --extra-containers -Copy to Clipboard Copied! Toggle word wrap Toggle overflow --extra-containers -指定一个特殊情况,kn读取管道输入,而不是 YAML 文件。示例命令
kn container add sidecar --image docker.io/example/sidecar:first | \ kn container add second --image docker.io/example/sidecar:second | \ kn service create my-service --image docker.io/example/my-app:latest --extra-containers -
$ kn container add sidecar --image docker.io/example/sidecar:first | \ kn container add second --image docker.io/example/sidecar:second | \ kn service create my-service --image docker.io/example/my-app:latest --extra-containers -Copy to Clipboard Copied! Toggle word wrap Toggle overflow --extra-containers标志也可以接受到 YAML 文件的路径:kn service create <service_name> --image <image_uri> --extra-containers <filename>
$ kn service create <service_name> --image <image_uri> --extra-containers <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn service create my-service --image docker.io/example/my-app:latest --extra-containers my-extra-containers.yaml
$ kn service create my-service --image docker.io/example/my-app:latest --extra-containers my-extra-containers.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.4. kn 域命令 复制链接链接已复制到粘贴板!
您可以使用下列命令创建和管理域映射:
4.4.4.1. 使用 Knative CLI 创建自定义域映射 复制链接链接已复制到粘贴板!
您可以通过将您自己的自定义域名映射到 Knative 服务来自定义 Knative 服务域。您可以使用 Knative(kn)CLI 创建映射到可寻址目标 CR 的 DomainMapping 自定义资源(CR),如 Knative 服务或 Knative 路由。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
您已创建了 Knative 服务或路由,并控制要映射到该 CR 的自定义域。
注意您的自定义域必须指向 OpenShift Container Platform 集群的 DNS。
-
已安装 Knative(
kn)CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
将域映射到当前命名空间中的 CR:
kn domain create <domain_mapping_name> --ref <target_name>
$ kn domain create <domain_mapping_name> --ref <target_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn domain create example.com --ref example-service
$ kn domain create example.com --ref example-serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow --ref标志为域映射指定一个可寻址的目标 CR。如果使用
--ref标志时没有提供前缀,则会假定目标为当前命名空间中的 Knative 服务。将域映射到指定命名空间中的 Knative 服务:
kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>
$ kn domain create <domain_mapping_name> --ref <ksvc:service_name:service_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn domain create example.com --ref ksvc:example-service:example-namespace
$ kn domain create example.com --ref ksvc:example-service:example-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将域映射到 Knative 路由:
kn domain create <domain_mapping_name> --ref <kroute:route_name>
$ kn domain create <domain_mapping_name> --ref <kroute:route_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn domain create example.com --ref kroute:example-route
$ kn domain create example.com --ref kroute:example-routeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.4.2. 使用 Knative CLI 管理自定义域映射 复制链接链接已复制到粘贴板!
创建 DomainMapping 自定义资源(CR)后,您可以使用 Knative(kn)CLI 列出现有 CR、查看现有 CR 的信息、更新 CR 或删除 CR。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
您至少已创建了一个
DomainMappingCR。 -
已安装 Knative (
kn) CLI 工具。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
列出现有的
DomainMappingCR:kn domain list -n <domain_mapping_namespace>
$ kn domain list -n <domain_mapping_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看现有
DomainMappingCR 的详情:kn domain describe <domain_mapping_name>
$ kn domain describe <domain_mapping_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
DomainMappingCR 以指向新目标:kn domain update --ref <target>
$ kn domain update --ref <target>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
DomainMappingCR:kn domain delete <domain_mapping_name>
$ kn domain delete <domain_mapping_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. Knative Eventing CLI 命令 复制链接链接已复制到粘贴板!
您可以使用以下 Knative(kn)CLI 命令在集群中完成 Knative Eventing 任务。
4.5.1. kn source 命令 复制链接链接已复制到粘贴板!
您可以使用以下命令列出、创建和管理 Knative 事件源。
4.5.1.1. 使用 Knative CLI 列出可用事件源类型 复制链接链接已复制到粘贴板!
使用 Knative (kn) 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 可选:您也可以以 YAML 格式列出可用事件源类型:
kn source list-types -o yaml
$ kn source list-types -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.1.2. 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。
4.5.1.3. 使用 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>
4.5.1.4. 使用 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
4.5.1.5. 使用 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
4.5.1.6. 使用 Knative CLI 创建 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
4.6. 功能命令 复制链接链接已复制到粘贴板!
4.6.1. 创建功能 复制链接链接已复制到粘贴板!
在构建和部署功能前,您必须使用 Knative (kn) CLI 创建功能。您可以在命令行中指定路径、运行时、模板和镜像 registry,也可以使用 -c 标志在终端中启动交互式体验。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。
流程
创建功能项目:
kn func create -r <repository> -l <runtime> -t <template> <path>
$ kn func create -r <repository> -l <runtime> -t <template> <path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可接受的运行时值包括节点、
go、python、quarkus和typescript。 接受的模板值包括
http和事件。示例命令
kn func create -l typescript -t events examplefunc
$ kn func create -l typescript -t events examplefuncCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Project path: /home/user/demo/examplefunc Function name: examplefunc Runtime: typescript Template: events Writing events to /home/user/demo/examplefunc
Project path: /home/user/demo/examplefunc Function name: examplefunc Runtime: typescript Template: events Writing events to /home/user/demo/examplefuncCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以指定包含自定义模板的存储库。
示例命令
kn func create -r https://github.com/boson-project/templates/ -l node -t hello-world examplefunc
$ kn func create -r https://github.com/boson-project/templates/ -l node -t hello-world examplefuncCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Project path: /home/user/demo/examplefunc Function name: examplefunc Runtime: node Template: hello-world Writing events to /home/user/demo/examplefunc
Project path: /home/user/demo/examplefunc Function name: examplefunc Runtime: node Template: hello-world Writing events to /home/user/demo/examplefuncCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
可接受的运行时值包括节点、
4.6.2. 本地运行功能 复制链接链接已复制到粘贴板!
您可以使用 kn func run 命令在当前目录中本地运行函数,或者在 --path 标志指定的目录中运行。如果您运行的功能之前没有构建,或者项目文件自上次构建以来已修改过,kn func run 命令将在运行它前构建该功能。
在当前目录中运行功能的命令示例
kn func run
$ kn func run
在指定为路径的目录中运行函数的示例
kn func run --path=<directory_path>
$ kn func run --path=<directory_path>
您也可以在运行该功能前强制重建现有镜像,即使项目文件没有更改项目文件,则使用 --build 标志:
使用 build 标记的 run 命令示例
kn func run --build
$ kn func run --build
如果将 build 标志设置为 false,这将禁用构建镜像,并使用之前构建的镜像运行该功能:
使用 build 标记的 run 命令示例
kn func run --build=false
$ kn func run --build=false
您可以使用 help 命令了解更多有关 kn func run 命令选项的信息:
构建 help 命令
kn func help run
$ kn func help run
4.6.3. 构建功能 复制链接链接已复制到粘贴板!
在运行功能前,您必须构建 function 项目。如果使用 kn func run 命令,则该函数会自动构建。但是,您可以使用 kn func build 命令在不运行的情况下构建函数,这对于高级用户或调试场景非常有用。
kn func build 命令创建可在您的计算机或 OpenShift Container Platform 集群中运行的 OCI 容器镜像。此命令使用功能项目名称和镜像 registry 名称为您的功能构建完全限定镜像名称。
4.6.3.1. 镜像容器类型 复制链接链接已复制到粘贴板!
默认情况下,kn func build 使用 Red Hat Source-to-Image(S2I)技术创建一个容器镜像。
使用 Red Hat Source-to-Image(S2I)的 build 命令示例.
kn func build
$ kn func build
您可以通过在命令中添加 --builder 标志并指定 pack 策略,来使用 CNCF Cloud Native Buildpacks 技术:
使用 CNCF Cloud Native Buildpacks 的 build 命令示例
kn func build --builder pack
$ kn func build --builder pack
4.6.3.2. 镜像 registry 类型 复制链接链接已复制到粘贴板!
OpenShift Container Registry 默认用作存储功能镜像的镜像 registry。
使用 OpenShift Container Registry 的 build 命令示例
kn func build
$ kn func build
输出示例
Building function image Function image has been built, image: registry.redhat.io/example/example-function:latest
Building function image
Function image has been built, image: registry.redhat.io/example/example-function:latest
您可以使用 --registry 标志覆盖使用 OpenShift Container Registry 作为默认镜像 registry:
build 命令覆盖 OpenShift Container Registry 以使用 quay.io
kn func build --registry quay.io/username
$ kn func build --registry quay.io/username
输出示例
Building function image Function image has been built, image: quay.io/username/example-function:latest
Building function image
Function image has been built, image: quay.io/username/example-function:latest
4.6.3.3. push 标记 复制链接链接已复制到粘贴板!
您可以将 --push 标志添加到 kn func build 命令中,以便在成功构建后自动推送功能镜像:
使用 OpenShift Container Registry 的 build 命令示例
kn func build --push
$ kn func build --push
4.6.3.4. help 命令 复制链接链接已复制到粘贴板!
您可以使用 help 命令了解更多有关 kn func build 命令选项的信息:
构建 help 命令
kn func help build
$ kn func help build
4.6.4. 部署功能 复制链接链接已复制到粘贴板!
您可以使用 kn func deploy 命令将功能部署到集群中,作为 Knative 服务。如果已经部署了目标功能,则会使用推送到容器镜像 registry 的新容器镜像进行更新,并更新 Knative 服务。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您必须已创建并初始化要部署的功能。
流程
部署功能:
kn func deploy [-n <namespace> -p <path> -i <image>]
$ kn func deploy [-n <namespace> -p <path> -i <image>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Function deployed at: http://func.example.com
Function deployed at: http://func.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果没有指定
namespace,则该函数部署到当前命名空间中。 -
此函数从当前目录中部署,除非指定了
path。 - Knative 服务名称派生自项目名称,无法使用此命令进行更改。
-
如果没有指定
4.6.5. 列出现有功能 复制链接链接已复制到粘贴板!
您可以使用 kn func list 列出现有功能。如果要列出部署为 Knative 服务的功能,也可以使用 kn service list。
流程
列出现有功能:
kn func list [-n <namespace> -p <path>]
$ kn func list [-n <namespace> -p <path>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME NAMESPACE RUNTIME URL READY example-function default node http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com True
NAME NAMESPACE RUNTIME URL READY example-function default node http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 列出部署为 Knative 服务的功能:
kn service list -n <namespace>
$ kn service list -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL LATEST AGE CONDITIONS READY REASON example-function http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com example-function-gzl4c 16m 3 OK / 3 True
NAME URL LATEST AGE CONDITIONS READY REASON example-function http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com example-function-gzl4c 16m 3 OK / 3 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.6. 描述函数 复制链接链接已复制到粘贴板!
kn func info 命令输出有关已部署功能的信息,如功能名称、镜像、命名空间、Knative 服务信息、路由信息和事件订阅。
流程
描述函数:
kn func info [-f <format> -n <namespace> -p <path>]
$ kn func info [-f <format> -n <namespace> -p <path>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn func info -p function/example-function
$ kn func info -p function/example-functionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.7. 使用测试事件调用部署的功能 复制链接链接已复制到粘贴板!
您可以使用 kn func invoke CLI 命令发送测试请求,在本地或 OpenShift Container Platform 集群中调用功能。此命令可用于测试功能是否正常工作并且能够正确接收事件。
示例命令
kn func invoke
$ kn func invoke
kn func invoke 命令默认在本地目录上执行,并假定此目录是一个功能项目。
4.6.7.1. kn func 调用可选参数 复制链接链接已复制到粘贴板!
您可以使用以下 kn func invoke CL 命令标记为请求指定可选参数。
| 标记 | 描述 |
|---|---|
|
|
指定调用函数的目标实例,如 |
|
|
指定消息的格式,如 |
|
| 指定请求的唯一字符串标识符。 |
|
| 指定集群上的命名空间。 |
|
|
指定请求的发件人名称。这与 CloudEvent |
|
|
指定请求类型,例如 |
|
|
指定请求的内容。对于 CloudEvent 请求,这是 CloudEvent |
|
| 指定包含要发送数据的本地文件的路径。 |
|
| 指定请求的 MIME 内容类型。 |
|
| 指定项目目录的路径。 |
|
| 启用系统提示,以交互方式确认所有选项。 |
|
| 启用打印详细输出。 |
|
|
输出有关使用 |
4.6.7.1.1. 主要参数 复制链接链接已复制到粘贴板!
以下参数定义 kn func invoke 命令的主要属性:
- 事件目标(
-t,--target) -
调用函数的目标实例。接受
local值用于本地部署的功能、remote值用于远程部署功能,或一个 URL 用于一个任意的端点。如果没有指定目标,则默认为local。 - 事件消息格式(
-f,--format) -
事件的消息格式,如
http或cloudevent。默认为创建函数时使用的模板格式。 - 事件类型(
--type) -
发送的事件类型。您可以查找有关各个事件制作者文档中设置的
type参数的信息。例如,API 服务器源可能会将生成的事件的type参数设置为dev.knative.apiserver.resource.update。 - 事件源(
--source) -
生成该事件的唯一事件源。这可能是事件源的 URI,如
https://10.96.0.1/或事件源的名称。 - 事件 ID(
--id) - 由事件制作者创建的随机唯一 ID。
- 事件数据(
--data) 允许您为
kn func invoke命令发送的事件指定data值。例如,您可以指定一个--data值,如"Hello World",以便事件包含此数据字符串。默认情况下,kn func invoke创建的事件中不包含任何数据。注意已部署到集群的功能可以对现有事件源的事件响应,该源提供属性(如
source和type)的值。这些事件通常具有 JSON 格式的data值,用于捕获事件的特定域上下文。通过使用本文档中介绍的 CLI 标志,开发人员可以模拟这些事件以进行本地测试。您还可以使用
--file标志发送事件数据,以提供包含事件数据的本地文件。在这种情况下,使用--content-type指定内容类型。- 数据内容类型(
--content-type) -
如果您使用
--data标志为事件添加数据,您可以使用--content-type标志指定事件传输的数据类型。在上例中,数据是纯文本,因此您可以指定kn func call --data "Hello world!" --content-type "text/plain"。
4.6.7.1.2. 示例命令 复制链接链接已复制到粘贴板!
这是 kn func invoke 命令的一般调用:
kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>
$ kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>
例如,要发送 "Hello world!" 事件,您可以运行:
kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
$ kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
4.6.7.1.2.1. 使用数据指定文件 复制链接链接已复制到粘贴板!
要指定磁盘上包含事件数据的文件,请使用 --file 和 --content-type 标志:
kn func invoke --file <path> --content-type <content-type>
$ kn func invoke --file <path> --content-type <content-type>
例如,要发送存储在 test.json 文件中的 JSON 数据,请使用以下命令:
kn func invoke --file ./test.json --content-type application/json
$ kn func invoke --file ./test.json --content-type application/json
4.6.7.1.2.2. 指定功能项目 复制链接链接已复制到粘贴板!
您可以使用 --path 标志指定到功能项目的路径:
kn func invoke --path <path_to_function>
$ kn func invoke --path <path_to_function>
例如,要使用位于 ./example/example-function 目录中的功能项目,请使用以下命令:
kn func invoke --path ./example/example-function
$ kn func invoke --path ./example/example-function
4.6.7.1.2.3. 指定部署目标功能的位置 复制链接链接已复制到粘贴板!
默认情况下,kn func invoke 作为功能本地部署的目标:
kn func invoke
$ kn func invoke
要使用不同的部署,请使用 --target 标志:
kn func invoke --target <target>
$ kn func invoke --target <target>
例如,要使用在集群中部署的功能,请使用 --target remote 标志:
kn func invoke --target remote
$ kn func invoke --target remote
要使用在任意 URL 中部署的功能,请使用 --target <URL> 标志:
kn func invoke --target "https://my-event-broker.example.com"
$ kn func invoke --target "https://my-event-broker.example.com"
您可以明确以本地部署为目标。在这种情况下,如果这个功能没有在本地运行,命令会失败:
kn func invoke --target local
$ kn func invoke --target local
4.6.8. 删除函数 复制链接链接已复制到粘贴板!
您可以使用 kn func delete 命令从集群中删除功能。
流程
删除函数:
kn func delete [<function_name> -n <namespace> -p <path>]
$ kn func delete [<function_name> -n <namespace> -p <path>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果没有指定要删除的功能的名称或路径,则会搜索当前目录以查找用于决定要删除的功能的
func.yaml文件。 -
如果没有指定命名空间,则默认为
func.yaml文件中的namespace值。
-
如果没有指定要删除的功能的名称或路径,则会搜索当前目录以查找用于决定要删除的功能的
第 5 章 开发 复制链接链接已复制到粘贴板!
5.1. 无服务器应用程序 复制链接链接已复制到粘贴板!
无服务器应用程序已创建并部署为 Kubernetes 服务,由路由和配置定义,并包含在 YAML 文件中。要使用 OpenShift Serverless 部署无服务器应用程序,您必须创建一个 Knative Service 对象。
Knative Service 对象 YAML 文件示例
使用以下任一方法创建一个无服务器应用程序:
- 从 OpenShift Container Platform web 控制台创建 Knative 服务。请参阅有关使用 Developer 视角创建应用程序 的文档。
-
使用 Knative(
kn)CLI 创建 Knative 服务。 -
使用
ocCLI 创建并应用 KnativeService对象作为 YAML 文件。
5.1.1. 使用 Knative CLI 创建无服务器应用程序 复制链接链接已复制到粘贴板!
通过使用 Knative (kn) CLI 创建无服务器应用程序,通过直接修改 YAML 文件来提供更精简且直观的用户界面。您可以使用 kn service create 命令创建基本无服务器应用程序。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建 Knative 服务:
kn service create <service-name> --image <image> --tag <tag-value>
$ kn service create <service-name> --image <image> --tag <tag-value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
--image是应用的镜像的 URI。 --tag是一个可选标志,可用于向利用服务创建的初始修订版本添加标签。示例命令
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 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
5.1.2. 使用离线模式创建服务 复制链接链接已复制到粘贴板!
您可以在离线模式下执行 kn service 命令,以便集群中不会发生任何更改,而是在本地机器上创建服务描述符文件。创建描述符文件后,您可以在向集群传播更改前修改该文件。
Knative CLI 的离线模式只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。
流程
在离线模式下,创建一个本地 Knative 服务描述符文件:
kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Service 'event-display' created in namespace 'test'.
Service 'event-display' created in namespace 'test'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./标志启用脱机模式,并将./指定为用于存储新目录树的目录。如果您没有指定现有目录,但使用文件名,如
--target my-service.yaml,则不会创建目录树。相反,当前目录中只创建服务描述符my-service.yaml文件。文件名可以具有
.yaml、.yml或.json扩展名。选择.json以 JSON 格式创建服务描述符文件。namespace test选项将新服务放在test命名空间中。如果不使用
--namespace,并且您登录了 OpenShift 集群,则会在当前命名空间中创建描述符文件。否则,描述符文件会在default命名空间中创建。
检查创建的目录结构:
tree ./
$ tree ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
--target指定的当前./目录包含新的test/目录,它在指定的命名空间后命名。 -
test/目录包含ksvc,它在资源类型后命名。 -
ksvc目录包含描述符文件event-display.yaml,它根据指定的服务名称命名。
-
使用
检查生成的服务描述符文件:
cat test/ksvc/event-display.yaml
$ cat test/ksvc/event-display.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出新服务的信息:
kn service describe event-display --target ./ --namespace test
$ kn service describe event-display --target ./ --namespace testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./选项指定包含命名空间子目录的目录结构的根目录。另外,您可以使用
--target选项直接指定 YAML 或 JSON 文件名。可接受的文件扩展包括.yaml、.yml和.json。--namespace选项指定命名空间,与kn通信包含所需服务描述符文件的子目录。如果您不使用
--namespace,且您已登录到 OpenShift 集群,kn在以当前命名空间命名的子目录中搜索该服务。否则,kn在default/子目录中搜索。
使用服务描述符文件在集群中创建服务:
kn service create -f test/ksvc/event-display.yaml
$ kn service create -f test/ksvc/event-display.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3. 使用 YAML 创建无服务器应用程序 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建无服务器应用程序,您必须创建一个 YAML 文件来定义 Knative Service 对象,然后使用 oc apply 来应用它。
创建服务并部署应用程序后,Knative 会为应用程序的这个版本创建一个不可变的修订版本。Knative 还将执行网络操作,为您的应用程序创建路由、入口、服务和负载平衡器,并根据流量自动扩展或缩减 pod。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
安装 OpenShift CLI(
oc)。
流程
创建包含以下示例代码的 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导航到包含 YAML 文件的目录,并通过应用 YAML 文件来部署应用程序:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.4. 验证无服务器应用程序的部署 复制链接链接已复制到粘贴板!
要验证您的无服务器应用程序是否已成功部署,您必须获取 Knative 创建的应用程序的 URL,然后向该 URL 发送请求并检查其输出。OpenShift Serverless 支持 HTTP 和 HTTPS URL,但 oc get ksvc 的输出始终使用 http:// 格式打印 URL。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装
ocCLI。 - 您已创建了 Knative 服务。
先决条件
-
安装 OpenShift CLI(
oc)。
流程
查找应用程序 URL:
oc get ksvc <service_name>
$ oc get ksvc <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True
NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向集群发出请求并观察其输出。
HTTP 请求示例
curl http://event-delivery-default.example.com
$ curl http://event-delivery-default.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow HTTPS 请求示例
curl https://event-delivery-default.example.com
$ curl https://event-delivery-default.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello Serverless!
Hello Serverless!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。如果您在证书链中收到与自签名证书相关的错误,可以在 curl 命令中添加
--insecure标志来忽略以下错误:curl https://event-delivery-default.example.com --insecure
$ curl https://event-delivery-default.example.com --insecureCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello Serverless!
Hello Serverless!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在生产部署中不能使用自签名证书。这个方法仅用于测试目的。
可选。如果 OpenShift Container Platform 集群配置有证书颁发机构 (CA) 签名但尚未为您的系统配置全局证书,您可以使用
curl命令指定此证书。证书的路径可使用--cacert标志传递给 curl 命令:curl https://event-delivery-default.example.com --cacert <file>
$ curl https://event-delivery-default.example.com --cacert <file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello Serverless!
Hello Serverless!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.5. 使用 HTTP2 和 gRPC 与无服务器应用程序交互 复制链接链接已复制到粘贴板!
OpenShift Serverless 只支持不安全或边缘终端路由。不安全或边缘终端路由不支持 OpenShift Container Platform 中的 HTTP2。这些路由也不支持 gRPC,因为 gRPC 由 HTTP2 传输。如果您在应用程序中使用这些协议,则必须使用入口(ingress)网关直接调用应用程序。要做到这一点,您必须找到 ingress 网关的公共地址以及应用程序的特定主机。
此方法需要使用 LoadBalancer 服务类型公开 Kourier 网关。您可以通过在 KnativeServing 自定义资源定义(CRD)中添加以下 YAML 来配置:
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
安装 OpenShift CLI(
oc)。 - 您已创建了 Knative 服务。
流程
- 找到应用程序主机。请参阅验证无服务器应用程序部署中的相关内容。
查找 ingress 网关的公共地址:
oc -n knative-serving-ingress get svc kourier
$ oc -n knative-serving-ingress get svc kourierCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 公共地址位于
EXTERNAL-IP字段,在本例中是a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com。手动在 HTTP 请求的主机标头中设置应用程序的主机,但将请求定向到 ingress 网关的公共地址。
curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
$ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello Serverless!
Hello Serverless!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以通过将授权设置为应用程序的主机来发出 gRPC 请求,同时将请求直接定向到 ingress 网关:
grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如上例所示,请确保将对应的端口(默认为 80)附加到两个主机中。
5.1.6. 在具有限制性网络策略的集群中启用与 Knative 应用程序通信 复制链接链接已复制到粘贴板!
如果您使用多个用户可访问的集群,您的集群可能会使用网络策略来控制哪些 pod、服务和命名空间可以通过网络相互通信。如果您的集群使用限制性网络策略,Knative 系统 Pod 可能无法访问 Knative 应用程序。例如,如果您的命名空间具有以下网络策略(拒绝所有请求),Knative 系统 pod 无法访问您的 Knative 应用程序:
拒绝对命名空间的所有请求的 NetworkPolicy 对象示例
要允许从 Knative 系统 pod 访问应用程序,您必须为每个 Knative 系统命名空间添加标签,然后在应用程序命名空间中创建一个 NetworkPolicy 对象,以便为具有此标签的其他命名空间访问命名空间。
拒绝对集群中非原生服务的请求的网络策略仍阻止访问这些服务。但是,通过允许从 Knative 系统命名空间访问 Knative 应用程序,您可以从集群中的所有命名空间中访问 Knative 应用程序。
如果您不想允许从集群中的所有命名空间中访问 Knative 应用程序,您可能需要为 Knative 服务使用 JSON Web Token 身份验证 。Knative 服务的 JSON Web 令牌身份验证需要 Service Mesh。
先决条件
-
安装 OpenShift CLI(
oc)。 - 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
流程
将
knative.openshift.io/system-namespace=true标签添加到需要访问应用程序的每个 Knative 系统命名空间:标记
knative-serving命名空间:oc label namespace knative-serving knative.openshift.io/system-namespace=true
$ oc label namespace knative-serving knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标记
knative-serving-ingress命名空间:oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标记
knative-eventing命名空间:oc label namespace knative-eventing knative.openshift.io/system-namespace=true
$ oc label namespace knative-eventing knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标记
knative-kafka命名空间:oc label namespace knative-kafka knative.openshift.io/system-namespace=true
$ oc label namespace knative-kafka knative.openshift.io/system-namespace=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在应用程序命名空间中创建一个
NetworkPolicy对象,允许从带有knative.openshift.io/system-namespace标签的命名空间访问:NetworkPolicy对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.7. 配置 init 容器 复制链接链接已复制到粘贴板!
Init 容器是 pod 中应用程序容器之前运行的专用容器。它们通常用于为应用程序实施初始化逻辑,其中可能包括运行设置脚本或下载所需的配置。
Init 容器可能会导致应用程序的启动时间较长,应该谨慎地用于无服务器应用程序,这应该经常被扩展或缩减。
单个 Knative 服务 spec 支持多个 init 容器。如果没有提供模板名称,Knative 提供一个默认的可配置命名模板。通过在 Knative Service 对象 spec 中添加适当的值,可以设置 init 容器模板。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
在将 init 容器用于 Knative 服务前,管理员必须在
KnativeServing自定义资源(CR)中添加kubernetes.podspec-init-containers标志。如需更多信息,请参阅 OpenShift Serverless "Global configuration" 文档。
5.1.8. 每个服务的 HTTPS 重定向 复制链接链接已复制到粘贴板!
您可以通过配置 networking.knative.dev/http-option 注解来为服务启用或禁用 HTTPS 重定向。以下示例演示了如何在 Knative Service YAML 对象中使用此注解:
5.2. 自动缩放 复制链接链接已复制到粘贴板!
Knative Serving 为应用程序提供自动扩展功能(或 autoscaling),以满足传入的需求。例如,如果应用程序没有流量,并且启用了缩减到零,Knative Serving 将应用程序缩减为零个副本。如果缩减到零,则应用程序会缩减到为集群中的应用程序配置的最小副本数。如果应用流量增加,也可以向上扩展副本来满足需求。
Knative 服务的自动扩展设置可以是由集群管理员配置的全局设置,或为单个服务配置每个修订设置。您可以使用 OpenShift Container Platform Web 控制台修改服务的每个修订设置,方法是修改服务的 YAML 文件,或使用 Knative (kn) CLI 修改服务。
您为服务设置的任何限制或目标均是针对应用程序的单个实例来衡量。例如,将 target 注解设置为 50 可将自动扩展器配置为缩放应用程序,以便每个修订一次处理 50 个请求。
5.2.1. 扩展范围 复制链接链接已复制到粘贴板!
缩放范围决定了可在任意给定时间为应用程序服务的最小和最大副本数。您可以为应用设置规模绑定,以帮助防止冷启动和控制计算成本。
5.2.1.1. 最小扩展范围 复制链接链接已复制到粘贴板!
为应用程序提供服务的最小副本数量由 min-scale 注解决定。如果没有启用缩减为零,则 min-scale 值默认为 1。
如果满足以下条件,min-scale 值默认为 0 个副本:
-
不设置
min-scale注解 - 启用扩展到零
-
使用类
KPA
带有 min-scale 注解的 service spec 示例
5.2.1.1.1. 使用 Knative CLI 设置 min-scale 注解 复制链接链接已复制到粘贴板!
使用 Knative(kn)CLI 设置 min-scale 注解,比直接修改 YAML 文件提供了一个更加精简且直观的用户界面。您可以使用带有 --scale-min 标志的 kn service 命令为服务创建或修改 min-scale 值。
先决条件
- 在集群中安装了 Knative Serving。
-
已安装 Knative(
kn)CLI。
流程
使用
--scale-min标志设置服务的最小副本数:kn service create <service_name> --image <image_uri> --scale-min <integer>
$ kn service create <service_name> --image <image_uri> --scale-min <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.1.2. 最大扩展范围 复制链接链接已复制到粘贴板!
可提供应用程序的副本数量由 max-scale 注解决定。如果没有设置 max-scale 注解,则创建的副本数没有上限。
带有 max-scale 注解的 service spec 示例
5.2.1.2.1. 使用 Knative CLI 设置 max-scale 注解 复制链接链接已复制到粘贴板!
使用 Knative(kn)CLI 设置 max-scale 注解,比直接修改 YAML 文件提供了一个更精简且直观的用户界面。您可以使用带有 --scale-max 标志的 kn service 命令为服务创建或修改 max-scale 值。
先决条件
- 在集群中安装了 Knative Serving。
-
已安装 Knative(
kn)CLI。
流程
使用
--scale-max标志设置服务的最大副本数:kn service create <service_name> --image <image_uri> --scale-max <integer>
$ kn service create <service_name> --image <image_uri> --scale-max <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2. 并发 复制链接链接已复制到粘贴板!
并发请求数决定了应用程序的每个副本可在任意给定时间处理的并发请求数。并发可以配置为软限制或硬限制 :
- 软限制是目标请求限制,而不是严格实施的绑定。例如,如果流量突发,可以超过软限制目标。
硬限制是严格实施的上限请求限制。如果并发达到硬限制,则请求将被缓冲,必须等到有足够的可用容量来执行请求。
重要只有在应用程序中明确用例时才建议使用硬限制配置。指定较少的硬限制可能会对应用程序的吞吐量和延迟造成负面影响,并可能导致冷启动。
添加软目标和硬限制意味着自动扩展以并发请求的软目标数为目标,但为请求的最大数量施加硬限制值。
如果硬限制值小于软限制值,则软限制值将降级,因为不需要将目标设定为多于实际处理的请求数。
5.2.2.1. 配置软并发目标 复制链接链接已复制到粘贴板!
软限制是目标请求限制,而不是严格实施的绑定。例如,如果流量突发,可以超过软限制目标。您可以通过在 spec 中设置 autoscaling.knative.dev/target 注解,或者使用带有正确标记的 kn service 命令为 Knative 服务指定软并发目标。
流程
可选:在
Service自定义资源的 spec 中为您的 Knative 服务设置autoscaling.knative.dev/target注解:服务规格示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 使用
kn service命令指定--concurrency-target标志:kn service create <service_name> --image <image_uri> --concurrency-target <integer>
$ kn service create <service_name> --image <image_uri> --concurrency-target <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务的示例,并发目标为 50 请求
kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-target 50
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-target 50Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2. 配置硬并发限制 复制链接链接已复制到粘贴板!
硬并发限制是严格强制执行上限的上限。如果并发达到硬限制,则请求将被缓冲,必须等到有足够的可用容量来执行请求。您可以通过修改 containerConcurrency spec 或使用带有正确标记的 kn service 命令为 Knative 服务指定硬并发限制。
流程
可选:在
Service自定义资源的 spec 中为您的 Knative 服务设置containerConcurrencyspec:服务规格示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认值为
0,这意味着允许同时访问服务的一个副本的请求数量没有限制。大于
0的值指定允许一次传输到服务的一个副本的请求的确切数量。这个示例将启用 50 个请求的硬并发限制。可选: 使用
kn service命令指定--concurrency-limit标志:kn service create <service_name> --image <image_uri> --concurrency-limit <integer>
$ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务且并发限制为 50 个请求的命令示例
kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-limit 50
$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-limit 50Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.3. 并发目标使用率 复制链接链接已复制到粘贴板!
此值指定自动扩展实际的目标并发限制的百分比。这也称为指定运行副本的热性(hotness),允许自动扩展在达到定义的硬限制前进行扩展。
例如,如果 containerConcurrency 值设置为 10,并且 target-utilization-percentage 值设置为 70%,则自动扩展会在所有现有副本的平均并发请求数量达到 7 时创建一个新的副本。编号为 7 到 10 的请求仍然会被发送到现有的副本,但达到 containerConcurrency 值后会启动额外的副本。
使用 target-utilization-percentage 注解配置的服务示例
5.3. 流量管理 复制链接链接已复制到粘贴板!
在 Knative 应用程序中,可以通过创建流量分割来管理流量。流量分割被配置为由 Knative 服务管理的路由的一部分。
配置路由允许将请求发送到服务的不同修订版本。此路由由 Service 对象的 traffic spec 决定。
traffic 规格声明由一个或多个修订版本组成,每个修订版本负责处理整个流量的一部分。路由到每个修订版本的流量百分比必须添加到 100%,由 Knative 验证确保。
traffic 规格中指定的修订版本可以是固定的、名为修订的修订版本,或者可以指向"latest"修订,该修订跟踪服务所有修订版本列表的头。"latest" 修订版本是一个浮动引用类型,它在创建了新修订版本时更新。每个修订版本都可以附加标签,为该修订版本创建一个额外访问 URL。
traffic 规格可通过以下方法修改:
-
直接编辑
Service对象的 YAML。 -
使用 Knative (
kn) CLI--traffic标志。 - 使用 OpenShift Container Platform Web 控制台。
当您创建 Knative 服务时,它没有任何默认 traffic spec 设置。
5.3.1. traffic 规格示例 复制链接链接已复制到粘贴板!
以下示例显示了一个 traffic 规格,其中 100% 的流量路由到该服务的最新修订版本。在 status 下,您可以看到 latestRevision 解析为的最新修订版本的名称:
以下示例显示了一个 traffic 规格,其中 100% 的流量路由到当前标记为 current 修订版本,并且该修订版本的名称指定为 example-service。标记为 latest 的修订版本会保持可用,即使没有流量路由到它:
以下示例演示了如何扩展 traffic 规格中的修订版本列表,以便在多个修订版本间分割流量。这个示例将 50% 的流量发送到标记为 current 修订版本,50% 的流量发送到标记为 candidate 的修订版本:标记为 latest 的修订版本会保持可用,即使没有流量路由到它:
5.3.2. Knative CLI 流量管理标志 复制链接链接已复制到粘贴板!
Knative (kn) CLI 支持作为 kn service update 命令的一部分对服务的流量块进行流量操作。
下表显示流量分割标志、值格式和标志执行的操作汇总。Repetition 列表示在 kn service update 命令中是否允许重复标志的特定值。
| 标记 | 值 | 操作 | 重复 |
|---|---|---|---|
|
|
|
为 | 是 |
|
|
|
为带有 | 是 |
|
|
|
为最新可用的修订版本提供 | 否 |
|
|
|
为 | 是 |
|
|
|
为最新可用的修订版本提供 | 否 |
|
|
|
从修订中删除 | 是 |
5.3.2.1. 多个标志和顺序优先级 复制链接链接已复制到粘贴板!
所有流量相关标志均可使用单一 kn service update 命令指定。kn 定义这些标志的优先级。不考虑使用命令时指定的标志顺序。
通过 kn 评估标志时,标志的优先级如下:
-
--untag:带有此标志的所有引用修订版本均将从流量块中移除。 -
--tag:修订版本将按照流量块中的指定进行标记。 -
--traffic:为引用的修订版本分配一部分流量分割。
您可以将标签添加到修订版本,然后根据您设置的标签来分割流量。
5.3.2.2. 修订版本的自定义 URL 复制链接链接已复制到粘贴板!
使用 kn service update 命令为服务分配 --tag 标志,可为在更新服务时创建的修订版本创建一个自定义 URL。自定义 URL 使用 https://<tag>-<service_name>-<namespace>.<domain>; or http://<tag>-<service_name>-<namespace>.<domain>; 格式。
--tag 和 --untag 标志使用以下语法:
- 需要一个值。
- 在服务的流量块中表示唯一标签。
- 在一个命令中可多次指定.
5.3.2.2.1. 示例:将标签分配给修订版本 复制链接链接已复制到粘贴板!
以下示例将标签 latest 分配给名为 example-revision 的修订版本:
kn service update <service_name> --tag @latest=example-tag
$ kn service update <service_name> --tag @latest=example-tag
5.3.2.2.2. 示例:从修订中删除标签 复制链接链接已复制到粘贴板!
您可以使用 --untag 标志来删除自定义 URL。
如果修订版本删除了其标签,并分配了流量的 0%,则修订版本将完全从流量块中删除。
以下命令从名为 example-revision 的修订版本中删除所有标签:
kn service update <service_name> --untag example-tag
$ kn service update <service_name> --untag example-tag
5.3.3. 使用 Knative CLI 创建流量分割 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 创建流量分割功能,通过直接修改 YAML 文件,提供更精简且直观的用户界面。您可以使用 kn service update 命令在服务修订版本间分割流量。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative(
kn)CLI。 - 您已创建了 Knative 服务。
流程
使用带有标准
kn service update命令的--traffic标签指定服务修订版本以及您要路由到它的流量百分比:示例命令
kn service update <service_name> --traffic <revision>=<percentage>
$ kn service update <service_name> --traffic <revision>=<percentage>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<service_name>是您要为其配置流量路由的 Knative 服务的名称。 -
<revision>是您要配置为接收流量百分比的修订版本。您可以使用--tag标志指定修订版本的名称,或指定分配给修订版本的标签。 -
<percentage>是您要发送到指定修订版本的流量百分比。
-
可选:
--traffic标志可在一个命令中多次指定。例如,如果您有一个标记为@latest的修订版本以及名为stable的修订版本,您可以指定您要分割到每个修订版本的流量百分比:示例命令
kn service update example-service --traffic @latest=20,stable=80
$ kn service update example-service --traffic @latest=20,stable=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您有多个修订版本,且没有指定应分割到最后一个修订版本的流量百分比,
--traffic标志可以自动计算此设置。例如,如果您有一个第三个版本名为example,则使用以下命令:示例命令
kn service update example-service --traffic @latest=10,stable=60
$ kn service update example-service --traffic @latest=10,stable=60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 剩余的 30% 的流量被分成
example修订,即使未指定。
创建无服务器应用程序后,应用程序会在 OpenShift Container Platform Web 控制台中的 Developer 视角 的 Topology 视图中显示。应用程序修订版本由节点表示,Knative 服务由节点的四边形表示。
代码或服务配置中的任何新更改都会创建一个新修订版本,也就是给定时间点上代码的快照。对于服务,您可以根据需要通过分割服务修订版本并将其路由到不同的修订版本来管理服务间的流量。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
- 已登陆到 OpenShift Container Platform Web 控制台。
流程
要在 Topology 视图中的多个应用程序修订版本间分割流量:
- 点 Knative 服务在侧面面板中查看其概述信息。
点 Resources 选项卡,查看服务的 Revisions 和 Routes 列表。
图 5.1. 无服务器应用程序
- 点侧边面板顶部的由 S 图标代表的服务,查看服务详情概述。
-
点 YAML 选项卡,在 YAML 编辑器中修改服务配置,然后点 Save。例如,将
timeoutseconds从 300 改为 301。这个配置更改会触发新修订版本。在 Topology 视图中会显示最新的修订,服务 Resources 选项卡现在会显示两个修订版本。 在 Resources 选项卡中,点 查看流量分布对话框:
- 在 Splits 字段中为两个修订版本添加流量百分比。
- 添加标签以便为这两个修订版本创建自定义 URL。
点 Save 查看两个节点,分别代表 Topology 视图中的两个修订版本。
图 5.2. 无服务器应用程序修订
5.3.5. 使用蓝绿部署策略路由和管理流量 复制链接链接已复制到粘贴板!
您可以使用蓝绿部署策略,安全地将流量从应用的生产版本重新路由到新版本。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
安装 OpenShift CLI(
oc)。
流程
- 创建并部署应用程序作为 Knative 服务。
通过查看以下命令的输出,查找部署服务时创建的第一个修订版本的名称:
oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'$ oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
example-service-00001
$ example-service-00001Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务
spec中添加以下 YAML 以将入站流量发送到修订版本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您可以在 URL 输出中运行以下命令来查看您的应用程序:
oc get ksvc <service_name>
$ oc get ksvc <service_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
通过修改服务的
template规格中至少有一个字段来部署应用程序的第二个修订版本。例如,您可以修改服务的image或env环境变量。您可以通过应用服务 YAML 文件重新部署服务,如果安装了 Knative (kn) CLI,也可以使用kn service update命令。 运行以下命令,查找您在重新部署服务时创建的第二个最新的修订版本的名称:
oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,服务的第一个和第二个修订版本都已部署并运行。
更新您的现有服务,以便为第二个修订版本创建新的测试端点,同时仍然将所有其他流量发送到第一个修订版本:
使用测试端点更新的服务 spec 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在通过重新应用 YAML 资源重新部署此服务后,应用的第二个修订现已被暂存。没有流量路由到主 URL 的第二个修订版本,Knative 会创建一个名为
v2的新服务来测试新部署的修订版本。运行以下命令,获取第二个修订版本的新服务的 URL:
oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"$ oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在将任何流量路由到之前,您可以使用此 URL 验证新版本的应用运行正常。
再次更新您的现有服务,以便 50% 的流量发送到第一个修订版本,50% 发送到第二个修订版本:
更新的服务 spec 在修订版本间分割流量 50/50 的示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您准备好将所有流量路由到应用程序的新版本时,请再次更新该服务,将 100% 的流量发送到第二个修订版本:
更新的服务 spec 将所有流量发送到第二个修订版本的示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示如果您不计划回滚修订版本,您可以删除第一个修订版本,而不是将其设置为流量的 0%。然后,不可路由的修订版本对象会被垃圾回收。
- 访问第一个修订版本的 URL,以验证没有更多流量发送到应用程序的旧版本。
5.4. 路由 复制链接链接已复制到粘贴板!
Knative 利用 OpenShift Container Platform TLS 终止来为 Knative 服务提供路由。创建 Knative 服务时,会自动为该服务创建一个 OpenShift Container Platform 路由。此路由由 OpenShift Serverless Operator 管理。OpenShift Container Platform 路由通过与 OpenShift Container Platform 集群相同的域公开 Knative 服务。
您可以禁用 OpenShift Container Platform 路由的 Operator 控制,以便您可以配置 Knative 路由来直接使用 TLS 证书。
Knative 路由也可以与 OpenShift Container Platform 路由一起使用,以提供额外的精细路由功能,如流量分割。
5.4.1. 为 OpenShift Container Platform 路由自定义标签和注解 复制链接链接已复制到粘贴板!
OpenShift Container Platform 路由支持使用自定义标签和注解,您可以通过修改 Knative 服务的元数据规格来配置这些标签和注解。自定义标签和注解从服务传播到 Knative 路由,然后传播到 Knative ingress,最后传播到 OpenShift Container Platform 路由。
先决条件
- 您必须已在 OpenShift Container Platform 集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
安装 OpenShift CLI(
oc)。
流程
创建包含您要传播到 OpenShift Container Platform 路由的标签或注解的 Knative 服务:
使用 YAML 创建服务:
使用 YAML 创建的服务示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用 Knative (
kn) CLI 创建服务,请输入:使用
kn命令创建的服务示例kn service create <service_name> \ --image=<image> \ --annotation <annotation_name>=<annotation_value> \ --label <label_value>=<label_value>
$ kn service create <service_name> \ --image=<image> \ --annotation <annotation_name>=<annotation_value> \ --label <label_value>=<label_value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过检查以下命令的输出来验证 OpenShift Container Platform 路由是否已使用您添加的注解或标签创建:
验证命令示例
oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=<service_name> \ -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \ -n knative-serving-ingress -o yaml \ | grep -e "<label_name>: \"<label_value>\"" -e "<annotation_name>: <annotation_value>"$ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=<service_name> \1 -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \2 -n knative-serving-ingress -o yaml \ | grep -e "<label_name>: \"<label_value>\"" -e "<annotation_name>: <annotation_value>"3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.2. 为 Knative 服务配置 OpenShift Container Platform 路由 复制链接链接已复制到粘贴板!
如果要将 Knative 服务配置为在 OpenShift Container Platform 上使用 TLS 证书,则必须禁用 OpenShift Serverless Operator 为服务自动创建路由,而是手动为服务创建路由。
完成以下步骤时,不会创建 knative-serving-ingress 命名空间中的默认 OpenShift Container Platform 路由。但是,应用程序的 Knative 路由仍然在此命名空间中创建。
先决条件
- OpenShift Serverless Operator 和 Knative Serving 组件必须安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI(
oc)。
流程
创建包含
service.knative.openshift.io/disableRoute=true注解的 Knative 服务:重要service.knative.openshift.io/disableRoute=true注解指示 OpenShift Serverless 不自动为您创建路由。但是,该服务仍然会显示 URL 并达到Ready状态。除非使用与 URL 中主机名相同的主机名创建自己的路由,此 URL 才能在外部工作。创建 Knative
Service资源:资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
Service资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选。使用
kn service create命令创建 Knative 服务:kn命令示例kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=true
$ kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证没有为服务创建 OpenShift Container Platform 路由:
示例命令
$ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingress
$ $ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingressCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您将看到以下输出:
No resources found in knative-serving-ingress namespace.
No resources found in knative-serving-ingress namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
knative-serving-ingress命名空间中创建Route资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
Route资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.3. 将集群可用性设置为集群本地 复制链接链接已复制到粘贴板!
默认情况下,Knative 服务会发布到一个公共 IP 地址。被发布到一个公共 IP 地址意味着 Knative 服务是公共应用程序,并有一个公开访问的 URL。
可以从集群以外访问公开的 URL。但是,开发人员可能需要构建后端服务,这些服务只能从集群内部访问(称为 私有服务 )。开发人员可以使用 networking.knative.dev/visibility=cluster-local 标签标记集群中的各个服务,使其私有。
对于 OpenShift Serverless 1.15.0 及更新的版本,service.knative.dev/visibility 标签不再可用。您必须更新现有服务来改用 networking.knative.dev/visibility 标签。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
- 您已创建了 Knative 服务。
流程
通过添加
networking.knative.dev/visibility=cluster-local标签来设置服务的可见性:oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local
$ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-localCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令并查看输出结果,检查您的服务的 URL 是否现在格式为
http://<service_name>.<namespace>.svc.cluster.local:oc get ksvc
$ oc get ksvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 True
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 事件 sink 复制链接链接已复制到粘贴板!
创建事件源时,您可以指定事件从源发送到的接收器。sink 是一个可寻址或可调用的资源,可以从其他资源接收传入的事件。Knative 服务、频道和代理都是接收器示例。
可寻址的对象接收和确认通过 HTTP 发送的事件到其 status.address.url 字段中定义的地址。作为特殊情况,核心 Kubernetes Service 对象也履行可寻址的接口。
可调用的对象可以接收通过 HTTP 发送的事件并转换事件,并在 HTTP 响应中返回 0 或 1 新事件。这些返回的事件可能会象处理外部事件源中的 Events 一样进一步处理。
5.5.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 的 --sink 标记(kn)CLI 命令一起使用。https://access.redhat.com/documentation/en-us/openshift_container_platform/4.7/html-single/serverless/#advanced-kn-config
5.5.2. 使用 Developer 视角将事件源连接到接收器(sink) 复制链接链接已复制到粘贴板!
当使用 OpenShift Container Platform web 控制台创建事件源时,您可以指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台,且处于 Developer 视角。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了 sink,如 Knative 服务、频道或代理。
流程
- 进入 +Add → Event Sources,然后选择您要创建的事件源类型,创建任何类型的事件源。
- 在 Create Event Source 表单视图的 Sink 部分,在 Resource 列表中选择您的接收器。
- 点 Create。
验证
您可以通过查看 Topology 页面来验证事件源是否已创建并连接到 sink。
- 在 Developer 视角中,导航到 Topology。
- 查看事件源并点击连接的 sink 来查看侧面面板中的 sink 详情。
5.5.3. 将触发器连接到 sink 复制链接链接已复制到粘贴板!
您可以将触发器连接到 sink,以便在将代理的事件发送到 sink 前过滤代理的事件。在 Trigger 对象的资源规格中,连接到触发器的 sink 会配置为 订阅者。
连接到 Kafka sink 的 Trigger 对象示例
5.6. 事件交付 复制链接链接已复制到粘贴板!
您可以配置事件交付参数,当事件无法发送到事件 sink 时。配置事件交付参数,包括死信接收器,可确保重试任何无法发送到事件接收器的事件。否则,未验证的事件将被丢弃。
5.6.1. 频道和代理的事件交付行为模式 复制链接链接已复制到粘贴板!
不同的频道和代理类型都有自己的行为模式,用于事件交付。
5.6.1.1. Knative Kafka 频道和代理 复制链接链接已复制到粘贴板!
如果事件成功传送到 Kafka 频道或代理接收器,接收器会使用一个 202 状态代码进行响应,这意味着该事件已被安全地存储在 Kafka 主题中且不会丢失。
如果接收器使用任何其他状态代码响应,则事件不会被安全地存储,用户必须执行步骤来解决这个问题。
5.6.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>。
5.6.3. 配置事件交付参数示例 复制链接链接已复制到粘贴板!
您可以为 Broker、Trigger、Channel 和 Subscription 对象配置事件交付参数。如果您为代理或频道配置事件交付参数,这些参数会传播到为这些对象创建的触发器或订阅。您还可以为触发器或订阅设置事件交付参数,以覆盖代理或频道的设置。
Broker 对象示例
Trigger 对象示例
Channel 对象示例
Subscription 对象示例
5.6.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 支持的消费者交付保证有:
未排序- 不排序的消费者是一种非阻塞消费者,它能以未排序的方式提供消息,同时保持正确的偏移管理。
排序的一个订购的消费者是一个按分区阻止消费者,在提供分区的下一个消息前等待来自 CloudEvent 订阅者成功响应。
默认排序保证是
未排序的。
应用
Trigger对象:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7. 列出事件源和事件源类型 复制链接链接已复制到粘贴板!
可以查看存在的事件源或事件源类型的列表,也可以在 OpenShift Container Platform 集群中使用。您可以使用 OpenShift Container Platform Web 控制台中的 Knative (kn) CLI 或 Developer 视角列出可用事件源或事件源类型。
5.7.1. 使用 Knative CLI 列出可用事件源类型 复制链接链接已复制到粘贴板!
使用 Knative (kn) 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 可选:您也可以以 YAML 格式列出可用事件源类型:
kn source list-types -o yaml
$ kn source list-types -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.2. 在 Developer 视角中查看可用事件源类型 复制链接链接已复制到粘贴板!
您可以查看集群中所有可用事件源类型的列表。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面,可用事件源类型。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 访问 Developer 视角。
- 点 +Add。
- 点 Event source。
- 查看可用的事件源类型。
5.7.3. 使用 Knative CLI 列出可用事件源 复制链接链接已复制到粘贴板!
使用 Knative(kn)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
5.8. 创建 API 服务器源 复制链接链接已复制到粘贴板!
API 服务器源是一个事件源,可用于将事件接收器(sink),如 Knative 服务,连接到 Kubernetes API 服务器。API 服务器源监视 Kubernetes 事件并将其转发到 Knative Eventing 代理。
5.8.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。
5.8.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
5.8.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。
5.8.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
5.9. 创建 ping 源 复制链接链接已复制到粘贴板!
ping 源是一个事件源,可用于定期向事件消费者发送带有恒定有效负载的 ping 事件。ping 源可以用来调度发送事件,类似于计时器。
5.9.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。
5.9.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
5.9.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。
5.9.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
5.10. 自定义事件源 复制链接链接已复制到粘贴板!
如果您需要从 Knative 中没有包含在 Knative 的事件制作者或发出没有 CloudEvent 格式的事件的制作者中入站事件,您可以通过创建自定义事件源来实现此目标。您可以使用以下方法之一创建自定义事件源:
-
通过创建接收器绑定,将
PodSpecable对象用作事件源。 - 通过创建容器源,将容器用作事件源。
5.10.1. 接收器(sink)绑定 复制链接链接已复制到粘贴板!
SinkBinding 对象支持将事件产品与交付寻址分离。接收器绑定用于将 事件制作者 连接到事件消费者(sink)。event producer 是一个 Kubernetes 资源,用于嵌入 PodSpec 模板并生成事件。sink 是一个可寻址的 Kubernetes 对象,可以接收事件。
SinkBinding 对象将环境变量注入到 sink 的 PodTemplateSpec 中,这意味着应用程序代码不需要直接与 Kubernetes API 交互来定位事件目的地。这些环境变量如下:
K_SINK- 解析 sink 的 URL。
K_CE_OVERRIDES- 指定出站事件覆盖的 JSON 对象。
5.10.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
5.10.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
5.10.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。
5.10.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 作业生成的事件。
5.10.1.4. 接收器绑定引用 复制链接链接已复制到粘贴板!
您可以通过创建接收器绑定,将 PodSpecable 对象用作事件源。您可以在创建 SinkBinding 对象时配置多个参数。
SinkBinding 对象支持以下参数:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定 API 版本,如 | 必填 |
|
|
将此资源对象标识为 | 必填 |
|
|
指定唯一标识 | 必填 |
|
|
指定此 | 必填 |
|
| 对解析为 URI 作为 sink 的对象的引用。 | 必填 |
|
| 提及通过绑定实施来增强运行时合同的资源。 | 必填 |
|
| 定义覆盖来控制发送到 sink 的事件的输出格式和修改。 | 选填 |
5.10.1.4.1. 主题参数 复制链接链接已复制到粘贴板!
Subject 参数引用通过绑定实施来增强运行时合同的资源。您可以为 Subject 定义配置多个字段。
Subject 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
| 引用的 API 版本。 | 必填 |
|
| 引用的类型。 | 必填 |
|
| 引用的命名空间。如果省略,则默认为对象的命名空间。 | 选填 |
|
| 引用的名称。 |
如果配置 |
|
| 引用的选择器。 |
如果配置 |
|
| 标签选择器要求列表。 |
仅使用 |
|
| 选择器应用到的标签键。 |
使用 |
|
|
代表键与一组值的关系。有效的运算符为 |
使用 |
|
|
字符串值数组。如果 |
使用 |
|
|
键值对映射. |
仅使用 |
主题参数示例
根据以下 YAML,选择 default 命名空间中名为 mysubject 的 Deployment 对象:
根据以下 YAML,可以选择在 default 命名空间中带有 working=example 标签的 Job 对象:
根据以下 YAML,可以选择在 default 命名空间中带有标签 working=example 或 working=sample 的 Pod 对象:
5.10.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" } }
5.10.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
5.10.2. 容器源 复制链接链接已复制到粘贴板!
容器源创建容器镜像来生成事件并将事件发送到 sink。您可以通过创建容器镜像和使用您的镜像 URI 的 ContainerSource 对象,使用容器源创建自定义事件源。
5.10.2.1. 创建容器镜像的指南 复制链接链接已复制到粘贴板!
两个环境变量由容器源控制器注入:K_SINK 和 K_CE_OVERRIDES。这些变量分别从 sink 和 andceOverrides spec 解析。事件发送到 K_SINK 环境变量中指定的 sink URI。该消息必须使用 CloudEvent HTTP 格式作为 POST 发送。
容器镜像示例
以下是心跳容器镜像的示例:
以下是引用先前心跳容器镜像的容器源示例:
5.10.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>
5.10.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。
5.10.2.4. 容器源参考 复制链接链接已复制到粘贴板!
您可以通过创建 ContainerSource 对象来使用容器作为事件源。您可以在创建 ContainerSource 对象时配置多个参数。
ContainerSource 对象支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定 API 版本,如 | 必填 |
|
|
将此资源对象标识为 | 必填 |
|
|
指定唯一标识 | 必填 |
|
|
指定此 | 必填 |
|
| 对解析为 URI 作为 sink 的对象的引用。 | 必填 |
|
|
| 必填 |
|
| 定义覆盖来控制发送到 sink 的事件的输出格式和修改。 | 选填 |
模板参数示例
5.10.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" } }
5.11. 创建频道 复制链接链接已复制到粘贴板!
频道是定义单一事件转发和持久层的自定义资源。事件源或生成程序将事件发送到频道后,可使用订阅将这些事件发送到多个 Knative 服务或其他 sink。
您可以通过实例化受支持的 Channel 对象来创建频道,并通过修改 Subscription 对象中的 delivery 规格来配置重新发送尝试。
5.11.1. 使用 Web 控制台创建频道 复制链接链接已复制到粘贴板!
使用 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 页面确认频道现在存在。
5.11.2. 使用 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
5.11.3. 使用 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
5.11.4. 使用 YAML 创建 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 文件: