关于 OpenShift Serverless


Red Hat OpenShift Serverless 1.35

OpenShift Serverless 简介

Red Hat OpenShift Documentation Team

摘要

本文档概述 OpenShift Serverless 功能,包括 Functions、Serving 和 Eventing。它还包括发行注记和有关如何获取支持的详细信息。

第 1 章 发行注记

注意

如需有关 OpenShift Serverless 生命周期和支持的平台的更多信息,请参阅 OpenShift Operator 生命周期

发行注记包含有关新的和已弃用的功能、破坏更改以及已知问题的信息。以下发行注记适用于 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)功能

正式发布(GA)的功能被完全支持,并适用于生产环境。技术预览功能为实验性功能,不适用于生产环境。有关 TP 功能的更多信息,请参阅红帽客户门户网站中的技术支持范围

下表提供了有关哪些 OpenShift Serverless 功能是 GA 以及 TP 的信息:

Expand
表 1.1. 正式发布的功能和技术预览功能
功能1.331.341.35

Eventing Transport encryption

-

TP

TP

服务传输加密

-

TP

TP

OpenShift Serverless Logic

GA

GA

GA

ARM64 支持

TP

TP

TP

自定义 Metrics Autoscaler Operator (KEDA)

TP

TP

TP

kn event 插件

TP

TP

TP

pipelines-as-code

TP

TP

TP

new-trigger-filters

TP

TP

TP

使用 S2I 构建器的 go 功能

TP

TP

GA

在单节点 OpenShift 上安装和使用 Serverless

GA

GA

GA

使用 Service Mesh 在 Serverless 中隔离网络流量

TP

TP

TP

覆盖功能中的 存活度就绪度

GA

GA

GA

kn func

GA

GA

GA

Quarkus 功能

GA

GA

GA

Node.js 功能

GA

GA

GA

TypeScript 功能

GA

GA

GA

Python 功能

TP

TP

TP

Service Mesh mTLS

GA

GA

GA

emptyDir

GA

GA

GA

HTTPS 重定向

GA

GA

GA

Kafka 代理

GA

GA

GA

Kafka 接收器

GA

GA

GA

init 容器支持 Knative 服务

GA

GA

GA

Knative 服务的 PVC 支持

GA

GA

GA

命名空间范围的代理

TP

TP

TP

多容器支持

GA

GA

GA

1.3. 弃用和删除的功能

一些在以前发行本中正式发布 (GA) 或技术预览 (TP) 的功能已被弃用或删除。弃用的功能仍然包含在 OpenShift Serverless 中,并且仍然被支持。但是,弃用的功能可能会在以后的发行版本中被删除,且不建议在新的部署中使用。

有关 OpenShift Serverless 中已弃用并删除的主要功能的最新列表,请参考下表:

Expand
表 1.2. 弃用和删除的功能
功能1.301.311.321.331.341.35

Knative client https://mirror.openshift.com/pub/openshift-v4/clients/serverless/ URL

-

-

-

-

-

已弃用

EventTypes v1beta1 API

-

-

已弃用

已弃用

已弃用

已弃用

domain-mappingdomain-mapping-webhook 部署

-

-

删除

删除

删除

删除

启用 Kourier 时带有 Serverless 的 Red Hat OpenShift Service Mesh

-

-

已弃用

已弃用

已弃用

已弃用

NamespacedKafka 注解

已弃用

已弃用

已弃用

已弃用

已弃用

已弃用

enable-secret-informer-filtering 注解

已弃用

已弃用

已弃用

已弃用

已弃用

已弃用

Serving 和 Eventing v1alpha1 API

删除

删除

删除

删除

删除

删除

kn func emit (kn func invoke 在 1.21+ 中)

删除

删除

删除

删除

删除

删除

KafkaBinding API

删除

删除

删除

删除

删除

删除

1.4. Red Hat OpenShift Serverless 1.35.1

OpenShift Serverless 1.35.1 现已正式发布。此 OpenShift Serverless 地址发行版本确定了 CVE 报告的安全漏洞问题,以增强安全性和可靠性。修复了在 OpenShift Container Platform 中与 OpenShift Serverless 相关的已知问题和已知问题:

1.4.1. 修复的问题

  • 在以前的版本中,如果未启用 KafkaChannel 功能,在安装 KnativeKafkakafka-controller-post-install-1.35 作业会失败。这个问题已被解决。post-install 作业现在可以成功完成,即使 KafkaChannels 被禁用。
  • 在以前的版本中,KnativeEventing 聚合集群角色中缺少 sinks.knative.dev API 组。因此,如果您是一个非管理员用户,oc get all 命令会失败,并显示以下错误消息:

    jobsinks.sinks.knative.dev is forbidden: User "user" cannot list resource "jobsinks" in API group "sinks.knative.dev" in the namespace "test"
    Copy to Clipboard Toggle word wrap

    这个问题已解决。sinks.knative.dev API 组现在包括在 knative-eventing-namespaced 聚合集群角色中。现在,如果您有一个 查看编辑admin 角色,您可以在自己的命名空间中读取和列出 sink。

1.4.2. 已知问题

  • 目前,您无法删除集群范围的资源,如 Webhook 配置,在卸载、重新安装或升级 KnativeServing 或 OpenShift Serverless Operator 后可能会保留。这些左侧资源可能会阻止协调过程,并阻止 KnativeServing 正确安装。当出现这个问题时,您可能会看到类似如下的错误:

    failed to apply non rbac manifest: Internal error occurred: failed calling webhook \"webhook.serving.knative.dev\": failed to call webhook: Post \"https://webhook.knative-serving.svc:443/?timeout=10s\": no endpoints available for service \"webhook\"
    Copy to Clipboard Toggle word wrap

    作为临时解决方案,您可以手动删除卡住的 Webhook 配置,以便协调可以继续:

    $ oc delete mutatingwebhookconfiguration webhook.serving.knative.dev
    Copy to Clipboard Toggle word wrap
    $ oc delete validatingwebhookconfiguration config.webhook.serving.knative.dev validation.webhook.serving.knative.dev
    Copy to Clipboard Toggle word wrap

1.5. Red Hat OpenShift Serverless 1.35

OpenShift Serverless 1.35 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中:

1.5.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.15。
  • OpenShift Serverless 现在使用 Knative Eventing 1.15。
  • OpenShift Serverless 现在使用 Kourier 1.15。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.15。
  • OpenShift Serverless 现在使用 Knative 用于 Apache Kafka 1.15。
  • kn func CLI 插件现在使用 func 1.16。
  • mirror.openshift.com 上的 Knative (kn)客户端的当前下载路径已弃用,且不再可用于下一个版本。不会发生自动重定向。如果您的项目或 CI/CD 管道依赖这个 URL 来安装 OpenShift Serverless CLI,您必须相应地更新您的配置。另外,会提供迁移详情,包括新的下载位置。

  • Knative Eventing Catalog 插件现在包括在 Backstage 插件列表中,您也可以在 Red Hat Developer Hub 上安装它。此功能作为开发者预览提供。
  • 使用 S2I 构建器的 Go 功能现在作为 Linux 和 Mac 开发人员正式发布(GA)功能提供,允许他们在这些平台上实施和构建 Go 功能。
  • 现在,可以根据传入事件的结构自动发现和注册 EventTypes,简化了 EventTypes 的整体配置和管理。
  • Knative 事件目录现在包括在 OpenShift Developer Console (ODC)中。您可以浏览目录来发现不同的事件类型,以及它们的描述和相关元数据,从而更轻松地了解系统的功能和功能。
  • Knative Eventing 现在支持长时间运行的后台作业。此功能将资源密集型或耗时的任务与主要事件处理流分离,从而提高了应用程序响应性和可扩展性。
  • 现在,通过 Kubernetes Event-Driven Autoscaling (KEDA)作为技术预览(TP)功能改进了 Knative Kafka 订阅的自动扩展。使用 CMA/KEDA 自动扩展可优化 Kafka 触发器和 KafkaSource 对象的资源分配,通过启用 Kafka 消费者资源的动态扩展来提高事件驱动的工作负载的性能。
  • OpenShift Serverless Logic 现在与 Prometheus 和 Grafana 集成,以提供增强的监控支持。
  • 现在,使用 devpreview 配置集部署的 OpenShift Serverless Logic 工作流会自动配置为为 Prometheus 生成监控指标。
  • 现在,通过配置 SonataFlowPlatform 自定义资源(CR)中的 spec.services.jobService.podTemplate.replicas 字段,可以将 Jobs Service 扩展到零。
  • 现在,使用 previewgitops 配置集部署的 OpenShift Serverless Logic 工作流会自动配置为将分组的事件发送到 Data Index,从而优化事件流量。
  • 现在,提供了工作流定义中更全面的错误列表,而不是仅显示第一个检测到的错误。
  • OpenShift Serverless Logic 现在认证可用于 PostgreSQL 版本 15.9
  • OpenShift Serverless Logic 工作流和 Data Index 之间的事件性能现在改进了事件分组和压缩。
  • 现在,当工作流中止时,会调用 compensation 状态。
  • OpenShift Serverless Logic 现在支持配置 Knative Eventing 系统来为工作流和支持服务生成和使用事件。
  • Broker 和 KafkaChannel (Apache Kafka)的 secret 配置已被统一。

1.5.2. 修复的问题

  • 在以前的版本中,Horizontal Pod Autoscaler (HPA)会预先缩减 Activator 组件,从而导致对 Knative Service 的长时间运行请求被终止。这个问题现已解决。terminationGracePeriodSeconds 值会根据 Knative 修订版本的 max-revision-timeout-seconds 配置自动设置。
  • 在以前的版本中,对带有较慢的后端的 Knative Service 的请求可能会超时,因为默认的 Red Hat OpenShift Serverless 路由超时太短。现在,您可以通过在 OpenShift Serverless 的 Operator Subscription 对象中指定环境变量来配置路由 HAProxy 超时,如下所示:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      # ...
    spec:
      channel: stable
      config:
        env:
          - name: ROUTE_HAPROXY_TIMEOUT
            value: '900'
    Copy to Clipboard Toggle word wrap

1.6. Red Hat OpenShift Serverless 1.34.1

OpenShift Serverless 1.34.1 现已正式发布。此 OpenShift Serverless 地址发行版本确定了 CVE 报告的安全漏洞问题。修复了在 OpenShift Container Platform 上与 OpenShift Serverless 相关的问题,请参阅以下备注:

1.6.1. 修复的问题

  • 在以前的版本中,因为默认的 OpenShift Route 超时太短,对带有较慢的后端响应的请求可能会失败。这个问题已通过使 haproxy.router.openshift.io/timeout 设置针对自动创建的路由进行配置来解决。

    现在,您可以通过在 OpenShift Serverless Operator Subscription 配置中设置 ROUTE_HAPROXY_TIMEOUT 环境变量来调整超时,如下所示:

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      ...
    spec:
      channel: stable
      config:
        env:
          - name: ROUTE_HAPROXY_TIMEOUT
            value: '900'
    Copy to Clipboard Toggle word wrap
  • 在以前的版本中,如果使用 HorizontalPodAutoscaler 字段缩减 Activator 组件,则对 Knative Services 的长时间运行请求可能会被预先终止。这个问题已解决。Activator 的 terminationGracePeriodSeconds 字段现在与为 Knative 修订版本配置的 max-revision-timeout-seconds 设置自动保持一致。

1.7. Red Hat OpenShift Serverless 1.34

OpenShift Serverless 1.34 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中:

1.7.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.14。
  • OpenShift Serverless 现在使用 Knative Eventing 1.14。
  • OpenShift Serverless 现在使用 Kourier 1.14。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.14。
  • OpenShift Serverless 现在使用 Knative 用于 Apache Kafka 1.14。
  • kn func CLI 插件现在使用 func 1.15。
  • OpenShift Serverless Logic 现在支持在同一命名空间中为 OpenAPI 的多个配置。
  • OpenShift Serverless Logic 的管理控制台现在作为技术预览提供(TP)功能,用于简化开发流程。
  • OpenShift Serverless Logic 1.34 引入了一项新功能,它允许工作流通过配置来访问不同的 OpenShift Container Platform 集群。此功能允许用户在工作流中定义 REST 调用,以便与多个集群无缝交互。
  • 在 OpenShift Serverless Logic 中,作业服务存活度检查现已改进,以限制检索领导状态所需的时间。引入了一个新的系统属性 kogito.jobs-service.management.leader-check.expiration-in-seconds,允许您配置领导状态检查允许的最大时间。
  • 自动 EventType 注册是一个 Eventing 功能,现在作为技术预览提供(TP)。它根据代理入口和内存频道上处理的事件自动创建 EventTypes 对象,改进了使用和创建 EventTypes 的体验。
  • 加密 Serving 现在作为技术预览提供(TP)功能。
  • 现在,支持启动探测,有助于缩短冷启动时间,从而加快应用程序启动速度并提高性能。这些探测对于具有缓慢启动进程的容器特别有用。
  • OpenShift Serverless Serving 传输加密功能允许使用 TLS 通过安全和加密的 HTTPS 连接传输数据。现在,它作为一个技术预览(TP)功能提供。
  • 使用 S2I 构建器的 Go 功能现在作为 Linux 和 Mac 开发人员的一个技术预览(TP)功能提供,允许他们在这些平台上实施和构建 Go 功能。
  • 通过对 Knative Serving 的多容器支持,您可以使用单个 Knative 服务来部署多容器 pod。它还支持多个容器 的就绪度和存活度探测 值。
  • 现在,通过 KEDA (Kubernetes Event-Driven Autoscaling)作为技术预览(TP)改进了 Knative Kafka 触发的自动扩展。使用 CMA/KEDA 自动扩展通过优化 Kafka 触发器和 KafkaSource 对象的资源分配来进一步增强性能,从而确保事件驱动的工作负载中的可扩展性。
  • Knative Eventing 现在支持传输加密(Eventing TLS)中的数据作为技术预览(TP)功能。您可以将 Knative Eventing 组件配置为公开 HTTPS 地址,并将用户提供的 CA 信任捆绑包添加到客户端。

1.7.2. 修复的问题

  • 在以前的版本中,即使 KafkaSource.spec.net.tls.key 无法加载,KafkaSource 对象也会错误地处于 Ready 状态。这个问题已解决。现在,在创建 Kafka Broker,KafkaChannel,KafkaSource, KafkaSource , 或带有不支持的 TLS 证书的 KafkaSink 对象时,会报告一个错误,以确保正确处理和通知配置问题。
  • Eventing 控制器错误地重新排队错误的对象类型(Namespace),从而导致 "resource not found" 日志错误。这个问题现已解决,控制器现在可以处理对象重新排队,确保更准确的日志记录和资源管理。

1.8. Red Hat OpenShift Serverless 1.33.3

OpenShift Serverless 1.33.3 现已正式发布,解决了识别的常见漏洞和暴露(CVE),以增强安全性和可靠性。

1.9. Red Hat OpenShift Serverless 1.33.2

OpenShift Serverless 1.33.2 现已正式发布。修复了在 OpenShift Container Platform 上与 OpenShift Serverless 相关的问题,请参阅以下备注:

1.9.1. 修复的问题

  • 在以前的版本中,在用户命名空间中创建 Knative 安装资源,如 KnativeServingKnativeEventing,会在 OpenShift Serverless Operator 中创建无限协调循环。这个问题已通过重新引入准入 Webhook 来解决,它可防止在 knative-servingknative-eventing 以外的任何命名空间中创建 Knative 安装资源。
  • 在以前的版本中,在一定时间段内删除安装后批处理作业,保留特权服务帐户 unbound。这会导致合规系统标记问题。这个问题已通过保留已完成的作业来解决,确保服务帐户保持绑定。

1.10. Red Hat OpenShift Serverless 1.33

OpenShift Serverless 1.33 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中:

1.10.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.12。
  • OpenShift Serverless 现在使用 Knative Eventing 1.12。
  • OpenShift Serverless 现在使用 Kourier 1.12。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.12。
  • OpenShift Serverless 现在使用 Knative 用于 Apache Kafka 1.12。
  • kn func CLI 插件现在使用 func 1.14。
  • OpenShift Serverless Logic 现已正式发布(GA)。此发行版本包括 OpenShift Serverless Logic 的概述;有关创建、运行和部署工作流的说明;以及安装和卸载 OpenShift Serverless Logic Operator 的指南。此外,还包括配置 OpenAPI 服务和端点的步骤,以及用于对服务进行故障排除的技巧。如需更多信息,请参阅 OpenShift Serverless 日志概述

    您还可以参考其他文档。如需了解更多详细信息 ,请参阅 Serverless Logic 文档

  • ARM64 上的 OpenShift Serverless 现在作为技术预览提供。
  • NamespacedKafka 注解现已弃用。在没有 data plane 隔离的情况下使用标准 Kafka 代理。
  • 在启用自动 EventType 自动创建时,您现在可以轻松发现集群中可用的事件。此功能作为开发者预览提供。
  • 现在,您可以在 OpenShift Developer 控制台的 Developer 控制台的 Observe 选项卡中直接探索 Knative Eventing 监控仪表板。
  • 现在,您可以使用 Custom Metrics Autoscaler Operator 为 Apache Kafka 源自动扩展 Knative Eventing 源,由 KafkaSource 对象定义。此功能作为技术预览功能提供,为 Knative Eventing 中的基于 Kafka 的事件源提供增强的可扩展性和效率。
  • 现在,在使用 Kafka 实现创建 Knative Broker 时,您可以自定义内部 Kafka 主题属性。这提高了效率,简化管理。
  • 新的触发器过滤器功能现在作为技术预览提供。这些过滤器默认是启用的,允许用户指定一组过滤器表达式,每个表达式评估为每个事件评估为 true 或 false。

1.10.2. 已知问题

  • 由于不同的挂载点权限,集群构建上的直接上传不适用于 IBM zSystems (s390x)和 IBM Power (ppc64le)。
  • 使用 Podman 版本 4.6 构建和部署功能会失败,并显示 无效的 pull policy "1" 错误。

    要临时解决这个问题,请使用 Podman 版本 4.5。

1.11. Red Hat OpenShift Serverless 1.32.2

OpenShift Serverless 1.32.2 现已正式发布。修复了在 OpenShift Container Platform 上与 OpenShift Serverless 相关的问题,请参阅以下备注:

1.11.1. 修复的问题

  • 在以前的版本中,在一定时间段内删除安装后批处理作业,保留特权服务帐户 unbound。这会导致合规系统标记问题。这个问题已通过保留已完成的作业来解决,确保服务帐户保持绑定。

1.12. Red Hat OpenShift Serverless 1.32

OpenShift Serverless 1.32 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.12.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.11。
  • OpenShift Serverless 现在使用 Knative Eventing 1.11。
  • OpenShift Serverless 现在使用 Kourier 1.11。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.11。
  • OpenShift Serverless 现在使用 Knative 用于 Apache Kafka 1.11。
  • kn func CLI 插件现在使用 func 1.13。
  • Serverless Logic (作为技术预览提供)功能已更新。

    有关使用说明 ,请参阅 Serverless Logic 文档

  • 您可以为用户容器和 queue-proxy 容器配置 OpenShift Serverless 功能就绪度和存活度探测设置。
  • OpenShift Serverless 功能现在支持从 1.10 till 1.14 (latest)中的 OpenShift Pipelines 版本。旧版本 OpenShift Pipelines 不再与 OpenShift Serverless 功能兼容。
  • 目前,在 OpenShift Data Foundation 存储上的 IBM zSystems (s390x)和 IBM Power (ppc64le)上支持使用 Pipelines 作为代码的 on-cluster 功能构建。
  • 现在,您可以使用 func subscribe 命令订阅一组事件。这会将您的功能链接到您的过滤器定义的 CloudEvent 对象,并启用自动响应。
  • 内部流量的 Knative Serving TLS 加密功能现已弃用。它是一个技术预览功能。带有 internal-encryption 配置标志的功能不再可用,它将在以后的版本中被新的配置标志替代。
  • OpenShift Serverless Operator 端默认启用 secret 过滤。默认向 net-istionet-kourier 控制器 pod 添加环境变量 ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID=true
  • knative-serving 命名空间中的 domain-mappingdomain-mapping-webhook 部署功能现已被删除。现在,它们与 Serving Webhook 和 Serving Controller 集成。
  • 如果您在 KnativeServing 自定义资源(CR)中设置 spec.config.domain 字段,则默认外部域将不再自动填充 knative-serving 命名空间中的 config-domain 配置映射。现在,您必须手动配置 config-domain 配置映射,以确保准确的域设置。
  • 现在,您可以将 gRPC 健康探测用于 net-kourier 部署。Kourier Controller 现在为就绪度和存活度使用标准 Kubernetes gRPC 健康探测,替换之前 exec 和自定义命令的使用。timeoutSeconds 值已从 100 毫秒调整为 1 秒,以确保更可靠的探测响应。
  • 新的触发器过滤器功能现在作为技术预览提供。新的触发器过滤器现在默认启用。它允许用户指定一组过滤器表达式,其中每个表达式都会为每个事件评估为 true 或 false。
  • Knative Eventing 现在支持以开发者预览的形式传输加密(Eventing TLS)中的数据。您可以将 Knative Eventing 组件配置为公开 HTTPS 地址,并将用户提供的 CA 信任捆绑包添加到客户端。
  • OpenShift Serverless 现在支持系统组件的自定义 OpenShift CA 捆绑包注入。如需更多信息,请参阅 配置自定义 PKI
  • 现在,您可以使用自定义 Metrics Autoscaler Operator 为 Apache Kafka 源自动扩展 Knative Eventing 源。此功能作为开发人员预览提供,为 Knative Eventing 中的基于 Kafka 的事件源提供了增强的可扩展性和效率。
  • 现在,您可以在 OpenShift Developer 控制台的 Developer 视图的 Observe 选项卡中直接探索 Knative Eventing 监控仪表板。
  • OpenShift Serverless 1.32 中已弃用对 Knative 提供的 EventTypes v1beta1 的支持。在 OpenShift Serverless 1.32 中,Knative CLI 使用 EventType v1beta2 API 来促进新的参考模型。在以前的版本中,kn CLI 不向后兼容 EventType API v1beta1,仅限于 kn eventtypes 子子命令组。因此,建议您使用匹配的 kn 版本获得最佳用户体验。

1.12.2. 修复的问题

  • 现在,3scale-kourier-gateways500m 增加到 1s 默认 CPU 限制。创建 500 多个 Knative Service 实例时,可能会导致 3scale-kourier-gateways pod 中的就绪度和存活度探测失败,因为 CPU 资源耗尽。这个调整旨在减少这样的故障,并确保在负载过重时可以平稳操作。

1.12.3. 已知问题

  • 由于不同的挂载点权限,集群构建上的直接上传不适用于 IBM zSystems (s390x)和 IBM Power (ppc64le)。
  • 使用 Podman 版本 4.6 构建和部署功能会失败,并显示 无效的 pull policy "1" 错误。

    要临时解决这个问题,请使用 Podman 版本 4.5。

1.13. Red Hat OpenShift Serverless 1.31

OpenShift Serverless 1.31 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.13.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.10。
  • OpenShift Serverless 现在使用 Knative Eventing 1.10。
  • OpenShift Serverless 现在使用 Kourier 1.10。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.10。
  • OpenShift Serverless 现在使用 Knative for Apache Kafka 1.10。
  • kn func CLI 插件现在使用 func 1.11。
  • 带有 Service Mesh 的 OpenShift Serverless 多租户现在作为技术预览提供(TP)功能。
  • Serverless Logic (作为技术预览提供)功能已更新。

    有关使用说明 ,请参阅 Serverless Logic 文档

  • OpenShift Serverless 现在可以在单节点 OpenShift 上安装和使用。
  • 现在,您可以为现有 PersistentVolume 对象配置持久性卷声明(PVC)以用于 Serverless 功能。
  • 当为 Ingress 指定 Kourier 并使用 DomainMapping 时,OpenShift Route 的 TLS 被设置为 passthrough,并且 Kourier 网关处理 TLS。从 Serverless 1.31 开始,可以在 Kourier 网关一侧指定启用的密码套件。
  • 当启用了 Kourier 时,将 Red Hat OpenShift Service Mesh 与 Serverless 集成现已弃用。在 Service Mesh 集成中使用 net-istio 而不是 net-kourier

    详情请参阅"将 Red Hat OpenShift Service Mesh 与 Serverless 集成"部分。

  • 3scale-kourier-gateway 部署添加了 PodDistruptionBudgetHorizontalPodAutoscaler 对象。

    • PodDistruptionBudget 用于定义部署中 pod 的最低可用性要求。
    • HorizontalPodAutoscaler 用于根据需求或自定义指标自动扩展部署中的 pod 数量。
  • 现在,您可以更改 Knative 代理和 Apache Kafka 频道使用的 Apache Kafka 主题名称模式。
  • DomainMapping v1alpha1 自定义资源定义(CRD)现已弃用。使用 v1beta1 CRD 替代。
  • NamespacedKafka 注解(技术预览)功能(TP)功能现已弃用,现在使用没有 data plane 隔离的标准 Kafka 代理。

1.13.2. 修复的问题

  • 在以前的版本中,当使用完整的 Red Hat OpenShift Service Mesh 集成和 STRICT peer 身份验证部署 Knative Eventing 时,PingSource 适配器指标不可用。

    这个问题已被解决,PingSource 适配器指标现在可以使用不同的 作业 和服务 标签值来收集。以上值为 pingsource-mt-adapter,新值为 pingsource-mt-adapter-sm-service

1.14. Red Hat OpenShift Serverless 1.30.2

OpenShift Serverless 1.30.2 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

此 OpenShift Serverless 发行版本解决了 CVE 报告的安全漏洞问题(CVE),包含程序错误修复,并受 OpenShift Container Platform 4.11 及更新的版本的支持。值得注意的是,这个更新通过禁用 Serving、Eventing Webhook 和 RBAC 代理容器上的 HTTP/2 传输来解决 CVE-2023-44487 - HTTP/2 快速流重置的问题。

1.15. Red Hat OpenShift Serverless 1.30.1

OpenShift Serverless 1.30.1 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

此 OpenShift Serverless 发行版本解决了 CVE 报告的安全漏洞问题(CVE),包含程序错误修复,并受 OpenShift Container Platform 4.11 及更新的版本的支持。

1.16. Red Hat OpenShift Serverless 1.30

OpenShift Serverless 1.30 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括:

重要

OpenShift Container Platform 4.13 基于 Red Hat Enterprise Linux (RHEL) 9.2。RHEL 9.2 尚未提交联邦信息处理标准(FIPS)验证。虽然红帽无法提交到特定的时间线,但我们预期为 RHEL 9.0 和 RHEL 9.2 模块获取 FIPS 验证,即使 RHEL 9.x 的次版本也是如此。有关更新的信息,请参阅 合规性活动和政府标准知识库文章

1.16.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.9。
  • OpenShift Serverless 现在使用 Knative Eventing 1.9。
  • OpenShift Serverless 现在使用 Kourier 1.9。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.9。
  • OpenShift Serverless 现在使用 Knative for Apache Kafka 1.9。
  • kn func CLI 插件现在使用 func 1.10.1。
  • OpenShift Serverless 现在在 HyperShift 托管集群中运行。
  • OpenShift Serverless 现在在单节点 OpenShift 中运行。
  • OpenShift Serverless 的开发人员体验现在可以通过 OpenShift Toolkit 获取,它是 Visual Studio Code (VSCode)的 OpenShift IDE 扩展。扩展可以从 VSCode Extension Tab 和 VSCode Marketplace 安装。请参阅 Visual Studio Code OpenShift Toolkit 扩展的 Marketplace 页面
  • OpenShift Serverless 功能现在支持 Red Hat OpenShift Pipelines 版本 1.10 和 1.11。旧版本的 Red Hat OpenShift Pipelines 不再与 OpenShift Serverless 功能兼容。
  • Serverless Logic 现在作为技术预览提供(TP)功能。

    详情请查看 Serverless Logic 文档

  • 从 OpenShift Serverless 1.30.0 开始,使用 s2i 构建器在 IBM zSystems 上支持以下运行时环境:

    • NodeJS
    • Python
    • TypeScript
    • Quarkus
  • Eventing 与 Red Hat OpenShift Service Mesh 集成现在作为技术预览提供(TP)功能。

    集成包括以下内容:

    • PingSource
    • ApiServerSource
    • Apache Kafka 的 Knative 源
    • Apache Kafka 的 Knative Broker
    • Apache Kafka 的 Knative Sink
    • ContainerSource
    • SinkBinding
    • InMemoryChannel
    • KafkaChannel
    • 基于频道的 Knative Broker
  • OpenShift Serverless 功能的 pipelines-as-code 现在作为技术预览提供(TP)。
  • 现在,您可以为 net-kourier 配置每秒的 burst 和 query 值(QPS)。
  • OpenShift Serverless Functions 用户现在可以为单个 Quarkus 功能覆盖 func.yaml 文件中的 readinessliveness 探测值。

    有关 Quarkus、typetype 和 Node.js 功能的指导,请参阅"功能开发参考指南"。

  • 从 OpenShift Serverless 1.30.0 开始,Kourier 控制器和网关清单默认具有以下限制和请求:

    • requests:

      • CPU: 200m
      • 内存:200Mi
    • limits:

      • cpu: 500m
      • 内存:500Mi

        请参阅 OpenShift Serverless 文档中的"覆盖 Knative Serving 系统部署配置"部分。

  • NamespacedKafka 注解(技术预览)功能(TP)功能现已弃用,现在使用没有 data plane 隔离的标准 Kafka 代理。

1.16.2. 修复的问题

  • 在以前的版本中,3scale-kourier-gateway pod 每天发送数千个 net-kourier-controller DNS 查询。正在为每个 NXDOMAIN 回复发送新查询。这会继续,直到生成了正确的 DNS 查询。

    查询现在默认具有 net-kourier-controller.knative-serving-ingress.svc.<cluster domain > 的完全限定域名(FQDN),从而解决了这个问题。

1.16.3. 已知问题

  • 使用 Podman 版本 4.6 构建和部署功能会失败,并显示 无效的 pull policy "1" 错误。

    要临时解决这个问题,请使用 Podman 版本 4.5。

  • IBM zSystems 和 IBM Power 不支持 on-cluster 功能构建,包括使用 Pipelines-as-code。
  • IBM zSystem 和 IBM Power 不支持 Buildpack 构建器。

1.17. Red Hat OpenShift Serverless 1.29.1

OpenShift Serverless 1.29.1 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

此 OpenShift Serverless 发行版本解决了 CVE 报告的安全漏洞问题(CVE),包含程序错误修复,并受 OpenShift Container Platform 4.10 及更新的版本的支持。

1.17.1. 修复的问题

  • 在以前的版本中,net-kourier-controller 有时因为存活度探测错误而无法启动。该问题已解决。

1.18. Red Hat OpenShift Serverless 1.29

OpenShift Serverless 1.29 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

重要

OpenShift Container Platform 4.13 基于 Red Hat Enterprise Linux (RHEL) 9.2。RHEL 9.2 尚未提交联邦信息处理标准(FIPS)验证。虽然红帽无法提交到特定的时间线,但我们预期为 RHEL 9.0 和 RHEL 9.2 模块获取 FIPS 验证,即使 RHEL 9.x 的次版本也是如此。有关更新的信息,请参阅 合规性活动和政府标准知识库文章

1.18.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.8。
  • OpenShift Serverless 现在使用 Knative Eventing 1.8。
  • OpenShift Serverless 现在使用 Kourier 1.8。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.8。
  • OpenShift Serverless 现在使用 Knative 用于 Apache Kafka 1.8。
  • kn func CLI 插件现在使用 func 1.10。
  • 从 OpenShift Serverless 1.29 开始,提供了不同的产品版本,如下所示:

    • 最新版本可通过 stable 频道获得。
    • 早于最新的版本可以通过基于版本的频道获得。

      要使用这些,请将订阅对象 YAML 文件中的 channel 参数从 stable 更新到对应的基于版本的频道,如 stable-1.29

      此更改允许您只接收针对最新版本的更新,也适用于维护阶段的版本。

      另外,您可以锁定 Knative (kn) CLI 的版本。详情请参阅"安装 Knative CLI"部分。

  • 现在,您可以使用 OpenShift Container Platform Pipelines 通过开发人员控制台创建 OpenShift Serverless 功能。
  • 对 Knative Serving 的多容器支持现已正式发布(GA)。此功能允许您使用单个 Knative 服务来部署多容器 pod。
  • OpenShift Serverless 功能现在可以为单独的 Node.js 和 TypeScript 功能覆盖 func.yaml 文件中的 readinessliveness 探测值。
  • 现在,当 GitHub 存储库中的源代码发生变化时,您可以将功能配置为自动部署到集群中。这允许更加无缝的 CI/CD 集成。
  • Eventing 与 Service Mesh 集成现在作为开发人员预览功能提供。集成包括: PingSourceApiServerSource、Apache Kafka 的 Knative Source、Apache Kafka 的 Knative Broker、Apache Kafka 的 Knative Sink、ContainerSourceSinkBinding
  • 此发行版本包括 OpenShift Serverless Logic 的升级开发人员预览。
  • Knative Operator Serving 和 Eventings CRD 的 API 版本 v1alpha1 已被删除。您需要使用 v1beta1 版本。这不会影响现有安装,因为在升级 Serverless Operator 时 CRD 会被自动更新。

1.18.2. 已知问题

  • 当更新 DomainMapping 中指定的 secret 时,只更新 secret 不会触发协调循环。您需要重命名 secret 或删除 Knative Ingress 资源,以触发协调循环。
  • OpenShift Serverless Operator 覆盖 Webhook Horizontal Pod Autoscaler (HPA)设置。因此,对于更高的工作负载,它无法扩展。要临时解决这个问题,请手动设置与您的工作负载对应的初始副本值。
  • 在 Red Hat OpenShift Serverless 1.27 删除前创建的 KafkaSource 资源会卡住。要临时解决这个问题,在开始删除 KafkaSource 后,从资源中删除终结器。
  • net-kourier-controller 可能会因为存活度探测错误而无法启动。您可以使用知识库解决方案临时解决这个问题。

1.19. Red Hat OpenShift Serverless 1.28

OpenShift Serverless 1.28 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

重要

OpenShift Container Platform 4.13 基于 Red Hat Enterprise Linux (RHEL) 9.2。RHEL 9.2 尚未提交联邦信息处理标准(FIPS)验证。虽然红帽无法提交到特定的时间线,但我们预期为 RHEL 9.0 和 RHEL 9.2 模块获取 FIPS 验证,即使 RHEL 9.x 的次版本也是如此。有关更新的信息,请参阅 合规性活动和政府标准知识库文章

1.19.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.7。
  • OpenShift Serverless 现在使用 Knative Eventing 1.7。
  • OpenShift Serverless 现在使用 Kourier 1.7。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.7。
  • OpenShift Serverless 现在为 Apache Kafka 1.7 使用 Knative 代理实现。
  • kn func CLI 插件现在使用 func 1.9.1 版本。
  • Node.js 和 TypeScript 运行时现在正式发布 (GA)。
  • OpenShift Serverless 功能的 Python 运行时现在作为技术预览提供。
  • Knative Serving 的多容器支持现在作为技术预览提供。此功能允许您使用单个 Knative 服务来部署多容器 pod。
  • 在 OpenShift Serverless 1.29 或更高版本中,Knative Eventing 的以下组件将从两个 pod 缩减为一个:

    • imc-controller
    • imc-dispatcher
    • mt-broker-controller
    • mt-broker-filter
    • mt-broker-ingress
  • Serving CR 的 serverless.openshift.io/enable-secret-informer-filtering 注解现已弃用。该注解仅适用于 Istio,不适用于 Kourier。

    在 OpenShift Serverless 1.28 中,OpenShift Serverless Operator 允许注入 net-istionet-kourier 的环境变量 ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID

    如果启用 secret 过滤,则所有 secret 都需要使用 networking.internal.knative.dev/certificate-uid: "<id>"。否则,Knative Serving 不会检测到它们,这会导致失败。您必须标记新的和现有的 secret。

    在以下 OpenShift Serverless 版本中,secret 过滤将默认启用。要防止失败,请预先标记您的 secret。

1.19.2. 已知问题

  • 目前,IBM Power、IBM zSystems 和 IBM® LinuxONE 上的 OpenShift Serverless 功能不支持 Python 的运行时。

    Node.js、typetype 和 Quarkus 功能在这些架构中被支持。

  • 在 Windows 平台上,因为 app.sh 文件权限,无法使用 Source-to-Image 构建器在本地构建、运行或部署 Python 功能。

    要临时解决这个问题,对 Linux 使用 Windows 子系统。

  • 在 Red Hat OpenShift Serverless 1.27 删除前创建的 KafkaSource 资源会卡住。要临时解决这个问题,在开始删除 KafkaSource 后,从资源中删除终结器。

1.20. Red Hat OpenShift Serverless 1.27

OpenShift Serverless 1.27 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

重要

OpenShift Serverless 1.26 是 OpenShift Container Platform 4.12 完全支持的最早版本。OpenShift Serverless 1.25 和更早的版本不会在 OpenShift Container Platform 4.12 上部署。

因此,在将 OpenShift Container Platform 升级到 4.12 之前,首先将 OpenShift Serverless 升级到 1.26 或 1.27。

1.20.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.6。
  • OpenShift Serverless 现在使用 Knative Eventing 1.6。
  • OpenShift Serverless 现在使用 Kourier 1.6。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.6。
  • OpenShift Serverless 现在使用 Knative Kafka 1.6。
  • kn func CLI 插件现在使用 func 1.8.1。
  • 命名空间范围的代理现在作为技术预览提供。例如,此类代理可用于实施基于角色的访问控制 (RBAC) 策略。
  • KafkaSink 现在使用 CloudEvent 二进制内容模式。二进制内容模式比结构化模式更高效,因为它使用其正文中的标头而不是 CloudEvent。例如,对于 HTTP 协议,它使用 HTTP 标头。
  • 现在,您可以使用 OpenShift Container Platform 4.10 及更新的版本中的 OpenShift Route 通过 HTTP/2 协议使用 gRPC 框架。这提高了客户端和服务器间的通信效率和速度。
  • Knative Operator Serving 和 Eventings CRD 的 API 版本 v1alpha1 在 1.27 中弃用。它将在以后的版本中删除。红帽强烈建议使用 v1beta1 版本。这不会影响现有安装,因为在升级 Serverless Operator 时 CRD 会被自动更新。
  • 现在默认启用交付超时功能。它允许您指定每个发送的 HTTP 请求的超时时间。这个功能仍是一个技术预览。

1.20.2. 修复的问题

  • 在以前的版本中,Knative 服务有时没有处于 Ready 状态,报告等待负载均衡器就绪。这个问题已被解决。

1.20.3. 已知问题

  • 当集群中存在太多 secret 时,将 OpenShift Serverless 与 Red Hat OpenShift Service Mesh 集成会导致 net-kourier pod 在启动时耗尽内存。
  • 命名空间范围的代理可能会在用户命名空间中保留 ClusterRoleBindings,即使删除了命名空间范围的代理。

    如果发生这种情况,删除用户命名空间中名为 rbac-proxy-reviews-prom-rb-knative-kafka-broker-data-plane-{{.Namespace}}ClusterRoleBinding

1.21. Red Hat OpenShift Serverless 1.26

OpenShift Serverless 1.26 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.21.1. 新功能

  • 带有 Quarkus 的 OpenShift Serverless 功能现在是 GA。
  • OpenShift Serverless 现在使用 Knative Serving 1.5。
  • OpenShift Serverless 现在使用 Knative Eventing 1.5。
  • OpenShift Serverless 现在使用 Kourier 1.5。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.5。
  • OpenShift Serverless 现在使用 Knative Kafka 1.5。
  • OpenShift Serverless 现在使用 Knative Operator 1.3。
  • kn func CLI 插件现在使用 func 1.8.1。
  • 持久性卷声明 (PVC) 现在为 GA。PVC 为 Knative 服务提供持久性数据存储。
  • 新的触发器过滤器功能现在作为技术预览提供。它允许用户指定一组过滤器表达式,其中每个表达式都会为每个事件评估为 true 或 false。

    要启用新的触发器过滤器,请在 operator 配置映射中 KnativeEventing 类型的部分中添加 new-trigger-filters: enabled 条目:

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    ...
    ...
    spec:
      config:
        features:
          new-trigger-filters: enabled
    ...
    Copy to Clipboard Toggle word wrap
  • Knative Operator 1.3 为 operator.knative.dev 添加了 API 的更新 v1beta1 版本。

    要从 KnativeServingKnativeEventing 自定义资源配置映射中的 v1alpha1 更新至 v1beta1,请编辑 apiVersion 键:

    KnativeServing 自定义资源配置映射示例

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    ...
    Copy to Clipboard Toggle word wrap

    KnativeEventing 自定义资源配置映射示例

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    ...
    Copy to Clipboard Toggle word wrap

1.21.2. 修复的问题

  • 在以前的版本中,Kafka 代理、Kafka 源和 Kafka sink 禁用联邦信息处理标准 (FIPS) 模式。这个问题已被解决,现在 FIPS 模式可用。

1.22. Red Hat OpenShift Serverless 1.25.0

OpenShift Serverless 1.25.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.22.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.4。
  • OpenShift Serverless 现在使用 Knative Eventing 1.4。
  • OpenShift Serverless 现在使用 Kourier 1.4。
  • OpenShift Serverless 现在使用 Knative (kn) CLI 1.4。
  • OpenShift Serverless 现在使用 Knative Kafka 1.4。
  • kn func CLI 插件现在使用 func 1.7.0。
  • 用于创建和部署功能的集成开发环境(IDE)插件现在可用于 Visual Studio CodeIntelliJ
  • Knative Kafka 代理现在是 GA。Knative Kafka 代理是 Knative 代理 API 的高性能实现,直接以 Apache Kafka 为目标。

    建议您不要使用 MT-Channel-Broker,而是使用 Knative Kafka 代理。

  • Knative Kafka sink 现在为 GA。KafkaSink 使用 CloudEvent,并将其发送到 Apache Kafka 主题。事件可以在结构化或二进制内容模式中指定。
  • 为内部流量启用 TLS 现在作为技术预览提供。

1.22.2. 修复的问题

  • 在以前的版本中,如果在存活度探测失败后重启容器,Knative Serving 会出现一个就绪度探测失败。这个问题已被解决。

1.22.3. 已知问题

  • Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards (FIPS) 模式。
  • SinkBinding 对象不支持服务的自定义修订名称。
  • Knative Serving Controller pod 添加了一个新的 informer 来监视集群中的 secret。informer 在缓存中包含 secret,这会增加控制器 pod 的内存消耗。

    如果 pod 内存不足,您可以通过增加部署的内存限值来解决此问题。

1.23. Red Hat OpenShift Serverless 1.24.0

OpenShift Serverless 1.24.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.23.1. 新功能

  • OpenShift Serverless 现在使用 Knative Serving 1.3。
  • OpenShift Serverless 现在使用 Knative Eventing 1.3。
  • OpenShift Serverless 现在使用 Kourier 1.3。
  • OpenShift Serverless 现在使用 Knative kn CLI 1.3。
  • OpenShift Serverless 现在使用 Knative Kafka 1.3。
  • kn func CLI 插件现在使用 func 0.24。
  • 现在,提供了对 Knative 服务的 init 容器支持 (GA)。
  • OpenShift Serverless 逻辑现在作为技术预览提供。它启用了定义声明工作流模型来管理无服务器应用程序。
  • 对于 OpenShift Container Platform,您现在可以在 OpenShift Serverless 中使用成本管理服务。

1.23.2. 修复的问题

  • 当集群中存在太多 secret 时,将 OpenShift Serverless 与 Red Hat OpenShift Service Mesh 集成会导致 net-istio-controller pod 在启动时耗尽内存。

    现在,可以启用 secret 过滤,这会导致 net-istio-controller 只考虑带有 networking.internal.knative.dev/certificate-uid 标签的 secret,从而减少所需的内存量。

  • OpenShift Serverless 功能技术预览现在默认使用 Cloud Native Buildpacks 构建容器镜像。

1.23.3. 已知问题

  • Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards (FIPS) 模式。
  • 在 OpenShift Serverless 1.23 中,删除了 KafkaBindings 和 kafka-binding Webhook 的支持。但是,现有 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
    Copy to Clipboard Toggle word wrap

1.24. Red Hat OpenShift Serverless 1.23.0

OpenShift Serverless 1.23.0 现已发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.24.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 func CLI 插件现在使用 func 0.24。
  • 现在,可以在 Kafka 代理中使用 kafka.eventing.knative.dev/external.topic 注解。此注解可以使用现有的外部管理主题,而不是代理自行创建内部主题。
  • kafka-ch-controllerkafka-webhook Kafka 组件不再存在。这些组件已被 kafka-webhook-eventing 组件替代。
  • OpenShift Serverless 功能技术预览现在默认使用 Source-to-Image (S2I) 来构建容器镜像。

1.24.2. 已知问题

  • Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards (FIPS) 模式。
  • 如果您要删除包括 Kafka 代理的命名空间,当 auth.secret.ref.name secret 在代理被删除之前被删除,则命名空间终结器(finalizer)可能无法删除。
  • 使用大量 Knative 服务运行 OpenShift Serverless 时,可能会导致运行的 Knativeivator pod 接近其默认的内存限值 600MB。如果使用的内存达到这个限值,则这些 pod 可能会重启。通过修改 KnativeServing 自定义资源,可以配置激活器部署的请求和限值:

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      deployments:
      - name: activator
        resources:
        - container: activator
          requests:
            cpu: 300m
            memory: 60Mi
          limits:
            cpu: 1000m
            memory: 1000Mi
    Copy to Clipboard Toggle word wrap
  • 如果您使用 Cloud Native Buildpacks 作为一个函数的本地构建策略,kn func 将无法自动启动 podman,或使用 SSH 隧道到远程守护进程。这些问题的解决方法是,在部署函数前,在本地开发计算机上已在运行 Docker 或 podman 守护进程。
  • On-cluster 函数构建当前针对 Quarkus 和 Golang 运行时会失败。它们适用于 Node、Typescript、Python 和 Springboot 运行时。

1.25. Red Hat OpenShift Serverless 1.22.0

OpenShift Serverless 1.22.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.25.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 func CLI 插件现在使用 func 0.23。
  • init 容器支持 Knative 服务现在作为技术预览提供。
  • 持久性卷声明 (PVC) 对 Knative 服务的支持现在作为技术预览提供。
  • knative-servingknative-serving-ingressknative-eventingknative-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 - 基于频道的代理/触发器
  • knative.openshift.io/part-of: "openshift-serverless" 标签已替换 knative.openshift.io/system-namespace 标签。
  • Knative Serving YAML 配置文件中的命名样式从 camel 格式(ExampleName)改为连字符格式 (example-name) 。从这个版本开始,在创建或编辑 Knative Serving YAML 配置文件时使用连字符格式表示法。

1.25.2. 已知问题

  • Kafka 代理、Kafka 源和 Kafka sink 禁用 Federal Information Processing Standards (FIPS) 模式。

1.26. Red Hat OpenShift Serverless 1.21.0

OpenShift Serverless 1.21.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.26.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 func CLI 插件现在使用 func 0.21。
  • Kafka sink 现在作为技术预览提供。
  • Knative 开源项目已开始弃用发现配置密钥,而是统一使用 kebab-cased 键。因此,OpenShift Serverless 1.18.0 发行注记中提到的 defaultExternalScheme 键现已弃用,并被 default-external-scheme 键替代。键的使用说明保持不变。

1.26.2. 修复的问题

  • 在 OpenShift Serverless 1.20.0 中,存在一个与发送事件相关的问题,会影响使用 kn event send 向服务发送事件。这个问题现已解决。
  • 在 OpenShift Serverless 1.20.0 (func 0.20) 中,使用 http 模板创建的 TypeScript 功能无法在集群中部署。这个问题现已解决。
  • 在 OpenShift Serverless 1.20.0 (func 0.20) 中,使用 gcr.io registry 部署功能会失败,并出现错误。这个问题现已解决。
  • 在 OpenShift Serverless 1.20.0 (func 0.20) 中,使用 kn func create 命令创建 Springboot 功能项目目录,然后运行 kn func build 命令失败并显示错误消息。这个问题现已解决。
  • 在 OpenShift Serverless 1.19.0 (func 0.19) 中,一些运行时无法使用 podman 来构建功能。这个问题现已解决。

1.26.3. 已知问题

  • 目前,域映射控制器无法处理包含当前不支持的路径的代理 URI。

    这意味着,如果要使用 DomainMapping 自定义资源 (CR) 将自定义域映射到代理,则必须使用代理的 ingress 服务配置 DomainMapping CR,并将代理的确切路径附加到自定义域:

    DomainMapping CR 示例

    apiVersion: serving.knative.dev/v1alpha1
    kind: DomainMapping
    metadata:
      name: <domain-name>
      namespace: knative-eventing
    spec:
      ref:
        name: broker-ingress
        kind: Service
        apiVersion: v1
    Copy to Clipboard Toggle word wrap

    代理的 URI 为 <domain-name>/<broker-namespace>/<broker-name>

1.27. Red Hat OpenShift Serverless 1.20.0

OpenShift Serverless 1.20.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.27.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 func CLI 插件现在使用 func 0.20。
  • Kafka 代理现在作为技术预览提供。

    重要

    FIPS 不支持 Kafka 代理(当前为技术预览)。

  • kn event 插件现在作为技术预览提供。
  • kn service create 命令的 --min-scale--max-scale 标志已弃用。使用 --scale-min--scale-max 标志。

1.27.2. 已知问题

  • OpenShift Serverless 使用 HTTPS 的默认地址部署 Knative 服务。将事件发送到集群中的资源时,发件人不会配置集群证书颁发机构 (CA) 。这会导致事件交付失败,除非集群使用全局接受的证书。

    例如,向公开访问的地址发送事件可正常工作:

    $ kn event send --to-url https://ce-api.foo.example.com/
    Copy to Clipboard Toggle word wrap

    另一方面,如果服务使用由自定义 CA 发布的 HTTPS 证书的公共地址,则此交付会失败:

    $ kn event send --to Service:serving.knative.dev/v1:event-display
    Copy to Clipboard Toggle word wrap

    将事件发送到其他可寻址的对象(如代理或频道)不受此问题的影响,并可以正常工作。

  • 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
    Copy to Clipboard Toggle word wrap

    作为临时解决方案,您可以在函数配置文件 func.yaml 中将 builder 属性更改为 gcr.io/paketo-buildpacks/builder:base

  • 使用 gcr.io registry 部署函数会失败并显示以下错误消息:

    Error: failed to get credentials: failed to verify credentials: status code: 404
    Copy to Clipboard Toggle word wrap

    作为临时解决方案,请使用与 gcr.io 不同的 registry,如 quay.iodocker.io

  • 使用 http 模板创建的 TypeScript 函数无法在集群中部署。

    作为临时解决方案,在 func.yaml 文件中替换以下部分:

    buildEnvs: []
    Copy to Clipboard Toggle word wrap

    使用这个:

    buildEnvs:
    - name: BP_NODE_RUN_SCRIPTS
      value: build
    Copy to Clipboard Toggle word wrap
  • func 版本 0.20 中,一些运行时可能无法使用 podman 构建函数。您可能会看到类似如下的错误消息:

    ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
    Copy to Clipboard Toggle word wrap
    • 这个问题存在以下临时解决方案:

      1. 通过在 service ExecStart 定义中添加 --time=0 来更新 podman 服务:

        服务配置示例

        ExecStart=/usr/bin/podman $LOGGING system service --time=0
        Copy to Clipboard Toggle word wrap

      2. 运行以下命令来重启 podman 服务:

        $ systemctl --user daemon-reload
        Copy to Clipboard Toggle word wrap
        $ systemctl restart --user podman.socket
        Copy to Clipboard Toggle word wrap
    • 或者,您可以使用 TCP 公开 podman API:

      $ podman system service --time=0 tcp:127.0.0.1:5534 &
      export DOCKER_HOST=tcp://127.0.0.1:5534
      Copy to Clipboard Toggle word wrap

1.28. Red Hat OpenShift Serverless 1.19.0

OpenShift Serverless 1.19.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.28.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 func CLI 插件现在使用 func 0.19。
  • KafkaBinding API 在 OpenShift Serverless 1.19.0 中已弃用,并将在以后的发行版本中删除。
  • HTTPS 重定向现在被支持,并可以为集群或每个 Knative 服务配置。

1.28.2. 修复的问题

  • 在以前的版本中,Kafka 频道分配程序仅在响应前等待本地提交成功,这可能会在 Apache Kafka 节点失败时导致事件丢失。Kafka 频道分配程序现在会在响应前等待所有同步副本提交。

1.28.3. 已知问题

  • func 版本 0.19 中,一些运行时可能无法使用 podman 构建函数。您可能会看到类似如下的错误消息:

    ERROR: failed to image: error during connect: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info": EOF
    Copy to Clipboard Toggle word wrap
    • 这个问题存在以下临时解决方案:

      1. 通过在 service ExecStart 定义中添加 --time=0 来更新 podman 服务:

        服务配置示例

        ExecStart=/usr/bin/podman $LOGGING system service --time=0
        Copy to Clipboard Toggle word wrap

      2. 运行以下命令来重启 podman 服务:

        $ systemctl --user daemon-reload
        Copy to Clipboard Toggle word wrap
        $ systemctl restart --user podman.socket
        Copy to Clipboard Toggle word wrap
    • 或者,您可以使用 TCP 公开 podman API:

      $ podman system service --time=0 tcp:127.0.0.1:5534 &
      export DOCKER_HOST=tcp://127.0.0.1:5534
      Copy to Clipboard Toggle word wrap

1.29. Red Hat OpenShift Serverless 1.18.0

OpenShift Serverless 1.18.0 现已正式发布。OpenShift Container Platform 上的 OpenShift Serverless 的新功能、更新和已知的问题包括在以下备注中。

1.29.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 func CLI 插件现在使用 func 0.18.0。
  • 在即将发布的 OpenShift Serverless 1.19.0 发行版本中,外部路由的 URL 方案将默认为 HTTPS 以增强安全性。

    如果您不希望此更改应用到工作负载,您可以在升级到 1.19.0 前覆盖默认设置,方法是将以下 YAML 添加到 KnativeServing 自定义资源 (CR) :

    ...
    spec:
      config:
        network:
          defaultExternalScheme: "http"
    ...
    Copy to Clipboard Toggle word wrap

    如果您想在 1.18.0 中应用更改,请添加以下 YAML:

    ...
    spec:
      config:
        network:
          defaultExternalScheme: "https"
    ...
    Copy to Clipboard Toggle word wrap
  • 在接下来的 OpenShift Serverless 1.19.0 发行版本中,公开 Kourier 网关的默认服务类型将是 ClusterIP,而不是 LoadBalancer

    如果您不希望此更改应用到工作负载,您可以在升级到 1.19.0 前覆盖默认设置,方法是将以下 YAML 添加到 KnativeServing 自定义资源 (CR) :

    ...
    spec:
      ingress:
        kourier:
          service-type: LoadBalancer
    ...
    Copy to Clipboard Toggle word wrap
  • 现在,您可以在 OpenShift Serverless 中使用 emptyDir 卷。详情请参阅 OpenShift Serverless 文档中的 Knative Serving 文档。
  • 现在,当您使用 kn func 创建函数时,可以使用 Rust 模板。

1.29.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.29.3. 已知问题

  • 较旧版本的 Knative kn CLI 可能会使用较旧版本的 Knative Serving 和 Knative Eventing API。例如,kn CLI 版本 0.23.2 使用 v1alpha1 API 版本。

    另一方面,较新的 OpenShift Serverless 发行版本可能不再支持旧的 API 版本。例如,OpenShift Serverless 1.18.0 不再支持 kafkasources.sources.knative.dev API 的版本 v1alpha1

    因此,使用带有较新的 OpenShift Serverless 的 Knative kn CLI 的旧版本可能会产生错误,因为 kn 无法找到过时的 API。例如,kn CLI 的 0.23.2 版本无法用于 OpenShift Serverless 1.18.0。

    为避免出现问题,请使用适用于 OpenShift Serverless 发行版本的最新 kn CLI 版本。对于 OpenShift Serverless 1.18.0,使用 Knative kn CLI 0.24.0。

第 2 章 OpenShift Serverless 概述

OpenShift Serverless 提供 Kubernetes 原生构建块,供开发人员在 OpenShift Container Platform 中创建和部署无服务器、事件驱动的应用程序。无服务器应用程序可按需扩展和缩减(从零),并由多个事件源触发。OpenShift Serverless 基于开源 Knative 项目,通过启用企业级无服务器平台为混合和多云环境提供可移植性和一致性。

注意

因为 OpenShift Serverless 的发行节奏与 OpenShift Container Platform 不同,所以现在 OpenShift Serverless 文档为产品的每个次版本单独提供。

OpenShift Serverless 文档位于 https://docs.openshift.com/serverless/

特定版本的文档可以通过版本选择器下拉菜单获得,或者直接向 URL 添加版本,例如 https://docs.openshift.com/serverless/1.28

另外,OpenShift Serverless 文档也包括在红帽门户网站中,地址为 https://docs.redhat.com/en/documentation/red_hat_openshift_serverless//

如需有关 OpenShift Serverless 生命周期和支持的平台的更多信息,请参阅 Operator 生命周期

2.1. OpenShift Serverless 的组件

2.1.1. Knative Serving

Knative Serving 基于 Kubernetes 构建,支持将应用程序和功能作为无服务器容器进行部署。服务简化了应用程序部署,基于传入的流量动态扩展,并支持通过流量分割来支持自定义推出策略。

Knative Serving 包括以下功能:

  • 简化无服务器容器的部署
  • 基于流量的自动扩展,包括缩减到零
  • 路由和网络编程
  • 时点应用程序快照及其配置

2.1.2. Knative Eventing

Knative Eventing 提供了一个可组合原语的平台,以启用后绑定事件源和事件用户。

Knative Eventing 支持以下架构云原生概念:

  • 服务在独立于生产的开发和部署过程中松散耦合。
  • 生产者可以在消费者侦听前生成事件,消费者可以表达对尚未生成的事件或事件类的兴趣。
  • 服务可以连接在不修改制作者或消费者的情况下创建新应用,并且能够从特定制作者选择特定事件子集。

2.1.3. OpenShift Serverless Functions

OpenShift Serverless 功能允许您编写部署为 Knative Services 的功能,并利用 Knative Serving 和 Eventing。

OpenShift Serverless Functions 包括以下功能:

  • 支持以下构建策略:

    • Source-to-Image(S2I)
    • Buildpacks
  • 多个运行时
  • 通过 Knative (kn) CLI 的本地开发人员体验
  • 项目模板
  • 支持接收 CloudEvents 和普通 HTTP 请求

2.1.4. OpenShift Serverless Logic

OpenShift Serverless Logic 允许您使用 YAML 或 JSON 文件定义声明性工作流模型。声明性工作流模型编配事件驱动的无服务器应用程序。OpenShift Serverless Logic 可让您视觉化工作流的执行,这简化了调试和优化。它还包括内置的错误处理和容错功能,从而更轻松地处理工作流执行期间发生的错误和异常。OpenShift Serverless Logic 实现 CNCF Serverless 工作流规格

2.1.5. Knative CLI

Knative (kn) CLI 允许您从命令行或 Shell 脚本中创建 Knative 资源。通过其广泛的帮助页和自动完成支持,它可让您记住 Knative 资源模式的详细结构。

Knative (kn) CLI 包括以下功能:

  • 支持管理以下 Knative Serving 功能:

    • 服务
    • 修订
    • Routes
  • 支持管理以下 Knative Eventing 实体:

    • 代理(Broker)
    • 触发器
    • Channels
    • 订阅
  • 基于 Kubernetes (kubectl) CLI 工具的设计插件架构
  • Knative 集成到 Tekton 管道中

第 3 章 Knative Serving

Knative Serving 可以帮助需要创建、部署和管理云原生应用程序的开发人员。它以 Kubernetes 自定义资源定义 (CRD) 的形式提供一组对象,用于定义和控制 OpenShift Container Platform 集群上无服务器工作负载的行为。

开发人员使用这些 CRD 创建自定义资源(CR)实例,这些实例可作为构建块用于处理复杂用例。例如:

  • 快速部署无服务器容器。
  • 自动缩放 pod。

3.1. Knative Serving 资源

服务
service.serving.knative.dev CRD 会自动管理工作负载的生命周期,以确保应用程序通过网络部署并可访问。每次用户创建的服务或自定义资源发生变化时,它都会创建一个路由、配置和新修订。Knative 中进行的大多数开发人员交互都是通过修改服务进行的。
Revision(修订)
revision.serving.knative.dev CRD 是每次对工作负载进行修改所涉及代码和配置的时间点快照。所有修订均为不可变对象,可以根据需要保留。
Route(路由)
route.serving.knative.dev CRD 可将网络端点映射到一个或多个修订。您可通过多种方式管理流量,包括部分流量和指定路由。
Configuration(配置)
configuration.serving.knative.dev CRD 可保持部署所需状态。它可在使编程过程和配置配置过程相互分离。修改配置则会创建一个新修订。

第 4 章 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 字段中定义的地址。Kubernetes Service 资源也满足可寻址的接口。
可调用的资源
能够通过 HTTP 接收事件并转换它,并在 HTTP 响应有效负载中返回 01 新事件。这些返回的事件可能会象处理外部事件源中的事件一样进一步处理。

4.1. 为 Apache Kafka 使用 Knative 代理

Apache Kafka 的 Knative 代理实现提供了集成选项,供您在 OpenShift Serverless 中使用支持的 Apache Kafka 消息流平台版本。Kafka 为事件源、频道、代理和事件 sink 功能提供选项。

Apache Kafka 的 Knative 代理提供附加选项,例如:

  • Kafka 源
  • Kafka 频道
  • Kafka 代理
  • Kafka 接收器

第 5 章 关于 OpenShift Serverless Functions

OpenShift Serverless Functions 帮助开发人员在 OpenShift Container Platform 上创建和部署无状态、事件驱动的函数,作为 Knative 服务。kn func CLI 作为 Knative kn CLI 的插件提供。您可以使用 kn func CLI 在集群中创建、构建和部署容器镜像作为 Knative 服务。

5.1. 包括的运行时

OpenShift Serverless Functions 提供了一组模板,可用于为以下运行时创建基本函数:

5.2. 后续步骤

第 6 章 OpenShift Serverless Logic 概述

OpenShift Serverless Logic 允许开发人员定义编配事件驱动的无服务器应用程序的声明工作流模型。

您可以使用 YAML 或 JSON 格式编写工作流模型,这是在云或容器环境中开发和部署无服务器应用程序的理想选择。

要在 OpenShift Container Platform 中部署工作流,您可以使用 OpenShift Serverless Logic Operator。

以下小节概述了 OpenShift Serverless Logic 概念。

6.1. 事件

事件状态由一个或多个事件定义组成。事件定义合并,以指定事件状态侦听的 CloudEvent 类型。您可以在指定的 CloudEvent 接收时,使用事件状态来启动新的工作流实例,或者暂停执行现有工作流实例,直到收到指定的 CloudEvent 实例。

在事件状态定义中,onEvents 属性用于对可能触发相同操作集的 CloudEvent 类型进行分组。事件定义中的 exclusive 属性指示如何计算事件匹配。如果 exclusive 属性的值为 false,则必须收到 eventRefs 数组中的所有 CloudEvent 类型才能发生匹配项。否则,任何引用的 CloudEvent 类型的接收都被视为匹配项。

以下示例显示了由两个 CloudEvent 类型组成的事件定义,包括 noisysilent

事件定义示例

"events": [
    {
      "name": "noisyEvent",
      "source": "",
      "type": "noisy",
      "dataOnly" : "false"
    },
    {
      "name": "silentEvent",
      "source": "",
      "type": "silent"
    }
  ]
Copy to Clipboard Toggle word wrap

为指示当收到 noisysilent CloudEvent 类型时发生事件匹配,并为这两个 CloudEvent 类型执行不同的操作,请定义包含独立 onEvent 项中的事件定义的事件状态,并将 exclusive 属性设置为 false。

带有多个 onEvent 项的事件状态定义示例

{
    "name": "waitForEvent",
    "type": "event",
    "onEvents": [
      {
        "eventRefs": [
          "noisyEvent"
         ],
         "actions": [
           {
             "functionRef": "letsGetLoud"
           }
         ]
      },
      {
        "eventRefs": [
           "silentEvent"
        ],
        "actions": [
          {
            "functionRef": "beQuiet"
          }
        ]
      }
    ]
    ,
    "exclusive": false
  }
Copy to Clipboard Toggle word wrap

6.2. 回调

Callback 状态执行一个操作,并等待作为操作结果生成的事件,然后再恢复工作流。通过回调状态执行的操作是异步外部服务调用。因此,回调状态适合执行 fire&wait-for-result 操作。

从工作流的角度来看,异步服务表示控制立即返回到调用者,而不必等待操作完成。操作完成后,会发布 CloudEvent 来恢复工作流。

JSON 格式的回调状态示例

{
        "name": "CheckCredit",
        "type": "callback",
        "action": {
            "functionRef": {
                "refName": "callCreditCheckMicroservice",
                "arguments": {
                    "customer": "${ .customer }"
                }
            }
        },
        "eventRef": "CreditCheckCompletedEvent",
        "timeouts": {
          "stateExecTimeout": "PT15M"
        },
        "transition": "EvaluateDecision"
}
Copy to Clipboard Toggle word wrap

YAML 格式的回调状态示例

name: CheckCredit
type: callback
action:
  functionRef:
    refName: callCreditCheckMicroservice
    arguments:
      customer: "${ .customer }"
eventRef: CreditCheckCompletedEvent
timeouts:
  stateExecTimeout: PT15M
transition: EvaluateDecision
Copy to Clipboard Toggle word wrap

action 属性定义触发外部活动或服务的函数调用。在操作执行后,Callback 状态将等待 CloudEvent,这表示调用的服务完成手动决策。

收到完成回调事件后,Callback 状态完成其执行,并过渡到下一个定义的工作流状态;如果是最终状态,则完成工作流执行。

6.3. JQ 表达式

每个工作流实例都与一个数据模型关联。数据模型由 JSON 对象组成,无论工作流文件是否包含 YAMLJSON。JSON 对象的初始内容取决于工作流的启动方式。如果工作流是使用 CloudEvent 创建的,则工作流内容会从 data 属性获取。如果工作流是通过 HTTP POST 请求启动的,则工作流内容将从请求正文获取。

JQ 表达式用于与数据模型交互。支持的表达式语言包括 JsonPath 和 JQ。JQ 表达式语言是默认的语言。您可以使用 expressionLang 属性将表达式语言更改为 JsonPath。

功能中的 JQ 表达式示例

{
      "name": "max",
      "type": "expression",
      "operation": "{max: .numbers | max_by(.x), min: .numbers | min_by(.y)}"
    }
Copy to Clipboard Toggle word wrap

6.4. 错误处理

OpenShift Serverless Logic 允许您定义 显式 错误处理。您可以在工作流模型中定义,如果发生错误而不是某些通用错误处理实体,则应该发生什么情况。通过显式错误处理,您可以处理在工作流和外部系统交互期间可能出现的错误。发生错误时,它会更改常规工作流序列。在这些情况下,工作流状态过渡到可能处理错误的备选状态,而不是转换到预定义的状态。

每个工作流状态都可以定义错误处理,这仅与执行期间可能出现的错误相关。在一个状态中定义的错误处理无法用于处理在工作流执行过程中发生另一个状态的错误。

在工作流状态执行过程中可能会出现的未知错误,这些错误在工作流定义中没有被显式处理,应该由运行时实现报告并停止工作流执行。

6.4.1. 错误定义

工作流中的错误定义由 名称和 代码 参数组成。name 是错误的简短和自然语言描述,如 错误的参数code 参数有助于实施来识别错误。

code 参数是必需的,引擎使用不同的策略将提供的值映射到运行时遇到的异常。可用的策略包括 FQCN、错误消息和状态代码。

在工作流执行过程中,您必须处理工作流顶级错误属性中的已知工作流 错误。此属性可以是 字符串类型,这意味着它可以引用可重复使用的 JSONYAML 定义文件,包括错误定义,或者具有 数组类型,您可以在工作流定义中内联定义这些检查错误。

以下示例显示了两种类型的定义:

引用可重复使用的 JSON 错误定义文件的示例

{
"errors": "file://documents/reusable/errors.json"
}
Copy to Clipboard Toggle word wrap

引用可重复使用的 YAML 错误定义文件的示例

errors: file://documents/reusable/errors.json
Copy to Clipboard Toggle word wrap

使用 JSON 文件内联定义工作流错误的示例

{
"errors": [
  {
    "name": "Service not found error",
    "code": "404",
    "description": "Server has not found anything matching the provided service endpoint information"
  }
]
}
Copy to Clipboard Toggle word wrap

使用 YAML 文件内联定义工作流错误示例

errors:
  - name: Service not found error
    code: '404'
    description: Server has not found anything matching the provided service endpoint
      information
Copy to Clipboard Toggle word wrap

6.5. 架构定义

OpenShift Serverless Logic 支持两种类型的架构定义:输入架构定义和输出架构定义。

6.5.1. 输入模式定义

dataInputSchema 参数根据定义的 JSON 架构验证工作流数据输入。提供数据InputSchema 非常重要,因为它用于在执行任何工作流状态前验证所提供的工作流数据输入是否正确。

您可以按照以下方式定义 数据InputSchema

数据InputSchema 定义示例

"dataInputSchema": {
   "schema": "URL_to_json_schema",
   "failOnValidationErrors": false
}
Copy to Clipboard Toggle word wrap

schema 属性是一个 URI,其中包含用于验证工作流数据输入的 JSON 模式的路径。URI 可以是类路径 URI、文件或 HTTP URL。如果指定了 classpath URI,则 JSON 模式文件必须放在项目的资源部分或 classpath 中包含的任何其他目录中。

failOnValidationErrors 是一个可选标志,表示输入数据与指定的 JSON 模式不匹配时采用的行为。如果没有指定或设置为 true,则抛出异常,流执行会失败。如果设置为 false,则执行流,并输出验证错误的级别 WARN 日志。

6.5.2. 输出架构定义

在工作流执行后应用输出架构定义,以验证输出模型是否具有预期的格式。它也可用于 Swagger 生成目的。

与 Input 模式定义类似,您必须使用 outputSchema 指定到 JSON 模式的 URL,如下所示:

outputSchema 定义示例

"extensions" : [ {
      "extensionid": "workflow-output-schema",
      "outputSchema": {
         "schema" : "URL_to_json_schema",
          "failOnValidationErrors": false
     }
  } ]
Copy to Clipboard Toggle word wrap

dataInputSchema 描述的相同规则适用于 schemafailOnValidationErrors。唯一的区别是在工作流执行后应用后者的标记。

6.6. 自定义功能

OpenShift Serverless Logic 支持自定义功能类型,它允许实现扩展功能定义功能。通过与 操作 字符串结合使用,您可以使用预定义的功能类型列表。

注意

自定义功能类型可能无法在其他运行时实现中可移植。

6.6.1. Sysout 自定义功能

您可以使用 sysout 功能进行日志记录,如下例所示:

sysout 功能定义示例

{
  "functions": [
    {
      "name": "logInfo",
      "type": "custom",
      "operation": "sysout:INFO"
    }
  ]
}
Copy to Clipboard Toggle word wrap

: 后面的字符串是可选的,用于指示日志级别。可能的值有 TRACE,DEBUG,INFO,WARN, 和 ERROR。如果值不存在,则 INFO 是默认值。

状态 定义中,您可以调用相同的 sysout 功能,如下例所示:

状态中的 sysout 功能引用示例

{
  "states": [
    {
      "name": "myState",
      "type": "operation",
      "actions": [
        {
          "name": "printAction",
          "functionRef": {
            "refName": "logInfo",
            "arguments": {
              "message": "\"Workflow model is \\(.)\""
            }
          }
        }
      ]
    }
  ]
}
Copy to Clipboard Toggle word wrap

在上例中,message 参数可以是 jq 表达式,也可以是使用 interpolation 的 jq 字符串。

6.6.2. Java 自定义功能

OpenShift Serverless Logic 支持 Apache Maven 项目中的 java 功能,在其中定义您的工作流服务。

以下示例显示了 java 函数的声明:

java 功能声明示例

{
  "functions": [
    {
      "name": "myFunction", 
1

      "type": "custom", 
2

      "operation": "service:java:com.acme.MyInterfaceOrClass::myMethod" 
3

    }
  ]
}
Copy to Clipboard Toggle word wrap

1
myFunction 是功能名称。
2
custom 是功能类型。
3
service:java:com.acme.MyInterfaceOrClass::myMethod 是自定义操作定义。在自定义操作定义中,service 是 reserved 操作关键字,后跟 java 关键字。com.acme.MyInterfaceOrClass 是接口或实施类的 FQCN (完全限定域名),后跟方法名称 myMethod

6.6.3. Knative 自定义功能

OpenShift Serverless Logic 通过 knative-serving 附加组件提供自定义功能实现,以调用 Knative 服务。它允许您具有静态 URI,定义用于执行 HTTP 请求的 Knative 服务。URI 中定义的 Knative 服务在当前 Knative 集群中查询,并转换为有效的 URL。

以下示例使用部署的 Knative 服务:

$ kn service list
NAME                              URL                                                                      LATEST                                  AGE     CONDITIONS   READY   REASON
custom-function-knative-service   http://custom-function-knative-service.default.10.109.169.193.sslip.io   custom-function-knative-service-00001   3h16m   3 OK / 3     True
Copy to Clipboard Toggle word wrap

您可以使用 Knative 服务名称声明 OpenShift Serverless Logic 自定义功能,如下例所示:

  "functions": [
    {
      "name": "greet", 
1

      "type": "custom", 
2

      "operation": "knative:services.v1.serving.knative.dev/custom-function-knative-service?path=/plainJsonFunction", 
3

    }
  ]
Copy to Clipboard Toggle word wrap
1
greet 是函数名称。
2
custom 是功能类型。
3
操作中,您可以设置 Knative 服务的协调。
注意

此功能发送 POST 请求。如果没有指定路径,OpenShift Serverless Logic 将使用根路径(/)。您还可以通过在操作中设置 method= GET 来发送 GET 请求。在这种情况下,参数通过查询字符串转发。

6.6.4. REST 自定义功能

OpenShift Serverless Logic 提供 REST 自定义类型作为快捷方式。在函数定义中使用自定义 rest 时,您可以指定要调用的 HTTP URI,以及要使用的 HTTP 方法(get、post、patch 或 put)。这可以通过使用 operation 字符串来完成。调用函数时,您可以使用 OpenAPI 功能传递请求参数。

以下示例显示了其他函数 的声明

  {
  "functions": [
    {
      "name": "multiplyAllByAndSum", 
1

      "type": "custom", 
2

      "operation": "rest:post:/numbers/{multiplier}/multiplyByAndSum" 
3

    }
  ]
}
Copy to Clipboard Toggle word wrap
1
multiplyAllAndSum 是功能名称。
2
custom 是功能类型。
3
rest:post:/numbers/{multiplier}/multiplyByAndSum 是自定义操作定义。在自定义操作定义中,其余 是表示此为 REST 调用的 reserved 操作关键字,post 是 HTTP 方法,/numbers/{multiplier}/multiplyByAndSum 是相对端点。

在使用相对端点时,您必须将主机指定为属性。host 属性的格式是 kogito.sw.functions.<function_name>.host。在本例中,kogito.sw.functions.multiplyAllByAndSum.host 是 host 属性键。如果需要,您可以通过指定 kogito.sw.functions.multiplyAllAndSum.port 属性来覆盖默认端口(80)。

此端点充当正文,其字段 编号为 整数数组,将阵列中的每个项目乘以 倍数,并返回所有乘以项目的总和。

6.7. 超时

OpenShift Serverless Logic 定义了几个超时配置,可用于在不同场景中为工作流执行配置最大时间。您可以配置工作流可以等待事件达到给定状态或工作流的最大执行时间。

无论在哪里定义,超时都必须配置为一定的时间或持续时间,它会在引用工作流元素处于活跃状态时开始。超时使用 ISO 8601 数据和时间标准 来指定持续时间,并遵循 PnDTnHnMn.nS 格式,其中天数被视为完全 24 小时。例如,PT15M 配置 15 分钟,P2DT3H4M 定义 2 天、3 小时和 4 分钟。

注意

基于月的超时(如 P2M )或两个月的期限无效,因为月持续时间可能会有所不同。在这种情况下,改为使用 PT60D

6.7.1. 工作流超时

要配置在取消工作流前可以运行的最大时间,您可以使用工作流超时。取消后,工作流将被视为已完成,无法通过 GET 请求访问。因此,它的行为与默认情况下 中断 一样。

工作流超时使用顶级 timeout 属性定义。它可以有两种类型的 字符串 和对象 字符串类型 定义了指向包含工作流超时定义的 JSON 或 YAML 文件的 URI。对象类型 用于定义内联超时定义。

例如,要在执行一小时后取消工作流,请使用以下配置:

工作流超时示例

  {
  "id": "workflow_timeouts",
  "version": "1.0",
  "name": "Workflow Timeouts",
  "description": "Simple workflow to show the workflowExecTimeout working",
  "start": "PrintStartMessage",
  "timeouts": {
    "workflowExecTimeout": "PT1H"
  } ...
}
Copy to Clipboard Toggle word wrap

6.7.2. 事件超时

当您在工作流中定义状态时,您可以使用 timeout 属性配置最大时间来完成此状态。当那时过来时,状态被视为超时,引擎将继续从此状态执行。执行流取决于状态类型,例如,可能会执行过渡到下一状态。

基于事件的状态可以使用 sub-property eventTimeout 来配置等待事件到达的最长时间。这是当前实现中唯一支持的属性。

事件超时支持回调状态超时、交换机状态超时和事件状态超时。

6.7.2.1. 回调状态超时

当您必须正常调用外部服务时,可以使用 Callback 状态,并等待事件形式的异步响应。

在响应事件被消耗后,工作流将继续执行,一般地移至 transition 属性中定义的下一个状态。

由于 Callback 状态在事件被使用前停止执行,因此您可以为它配置 eventTimeout,如果事件没有到达配置的时间持续时间,工作流将继续移至转换中定义的下一个状态。

带有超时 的回调 状态示例

{
 "name": "CallbackState",
 "type": "callback",
 "action": {
   "name": "callbackAction",
   "functionRef": {
     "refName": "callbackFunction",
     "arguments": {
       "input": "${\"callback-state-timeouts: \" + $WORKFLOW.instanceId + \" has executed the callbackFunction.\"}"
     }
   }
 },
 "eventRef": "callbackEvent",
 "transition": "CheckEventArrival",
 "onErrors": [
   {
     "errorRef": "callbackError",
     "transition": "FinalizeWithError"
   }
 ],
 "timeouts": {
   "eventTimeout": "PT30S"
 }
}
Copy to Clipboard Toggle word wrap

6.7.2.2. 切换状态超时

当您需要根据特定条件执行操作时,您可以使用 Switch 状态。这些条件可以基于工作流数据、dataConditions 或 events eventConditions

使用 eventConditions 时,工作流执行会等待决定决定,直到任何配置的事件到达并匹配一个条件。在这种情况下,您可以配置一个事件超时,该超时控制事件与条件匹配的最长时间。

如果这个时间过期,工作流将移到 defaultCondition 属性中定义的状态。

带有超时的 Switch 状态示例

{
    "name": "ChooseOnEvent",
    "type": "switch",
    "eventConditions": [
    {
        "eventRef": "visaApprovedEvent",
        "transition": "ApprovedVisa"
    },
    {
        "eventRef": "visaDeniedEvent",
        "transition": "DeniedVisa"
    }
    ],
        "defaultCondition": {
        "transition": "HandleNoVisaDecision"
    },
        "timeouts": {
        "eventTimeout": "PT5S"
    }
}
Copy to Clipboard Toggle word wrap

6.7.2.3. 事件状态超时

Event 状态用于等待工作流接收一个或多个事件,执行一组操作,然后继续执行。如果 Event 状态是启动状态,则会创建一个新的工作流实例。

timeout 属性用于此状态,用于配置工作流应等待配置的事件到达的最长时间。

如果超过这个时间,并且不会收到事件,工作流将移到 transition 属性中定义的状态,或结束工作流实例(如果是 end 状态),而不执行任何操作。

带有超时的事件状态示例

{
  "name": "WaitForEvent",
  "type": "event",
  "onEvents": [
    {
      "eventRefs": [
        "event1"
      ],
      "eventDataFilter": {
        "data": "${ \"The event1 was received.\" }",
        "toStateData": "${ .exitMessage }"
      },
      "actions": [
        {
          "name": "printAfterEvent1",
          "functionRef": {
            "refName": "systemOut",
            "arguments": {
              "message": "${\"event-state-timeouts: \" + $WORKFLOW.instanceId + \" executing actions for event1.\"}"
            }
          }
        }
      ]
    },
    {
      "eventRefs": [
        "event2"
      ],
      "eventDataFilter": {
        "data": "${ \"The event2 was received.\" }",
        "toStateData": "${ .exitMessage }"
      },
      "actions": [
        {
          "name": "printAfterEvent2",
          "functionRef": {
            "refName": "systemOut",
            "arguments": {
              "message": "${\"event-state-timeouts: \" + $WORKFLOW.instanceId + \" executing actions for event2.\"}"
            }
          }
        }
      ]
    }
  ],
  "timeouts": {
    "eventTimeout": "PT30S"
  },
  "transition": "PrintExitMessage"
}
Copy to Clipboard Toggle word wrap

6.8. parallelism

OpenShift Serverless Logic 序列化并行任务的执行。单词 parallel 并不表示同时执行,这意味着分支的执行之间没有逻辑依赖项。如果活跃的分支挂起其执行,则不活跃分支可以启动或停止任务的执行,而无需等待活跃的分支完成。例如,一个活跃的分支可能会在等待事件接收时暂停其执行。

并行状态是一种状态,它将当前工作流实例执行路径分成多个路径,每个分支一个。这些执行路径并行执行,并根据定义的 completionType 参数值重新加入到当前执行路径中。

JSON 格式的并行工作流示例

 {
     "name":"ParallelExec",
     "type":"parallel",
     "completionType": "allOf",
     "branches": [
        {
          "name": "Branch1",
          "actions": [
            {
                "functionRef": {
                    "refName": "functionNameOne",
                    "arguments": {
                        "order": "${ .someParam }"
                    }
                }
            }
        ]
        },
        {
          "name": "Branch2",
          "actions": [
              {
                  "functionRef": {
                      "refName": "functionNameTwo",
                      "arguments": {
                          "order": "${ .someParam }"
                      }
                  }
              }
          ]
        }
     ],
     "end": true
}
Copy to Clipboard Toggle word wrap

YAML 格式的并行工作流示例

name: ParallelExec
type: parallel
completionType: allOf
branches:
- name: Branch1
  actions:
  - functionRef:
      refName: functionNameOne
      arguments:
        order: "${ .someParam }"
- name: Branch2
  actions:
  - functionRef:
      refName: functionNameTwo
      arguments:
        order: "${ .someParam }"
end: true
Copy to Clipboard Toggle word wrap

在上例中,allOf 定义所有分支必须完成,然后状态可以过渡或结束。如果没有设置此参数,则这是默认值。

6.9. 后续步骤

第 7 章 OpenShift Serverless 支持

如果您在执行本文档所述的某个流程时遇到问题,请访问红帽客户门户网站 http://access.redhat.com。您可以使用红帽客户门户网站搜索或浏览有关红帽产品的技术支持文章。您还可以向红帽全球支持服务 (GSS) 提交支持问题单,或者访问其他产品文档。

如果您对本文档有任何改进建议,或发现了任何错误,您可以提交一个与相关文档组件的 Jira 问题。请提供具体信息,如章节号、指南名称和 OpenShift Serverless 版本,以便我们可以快速地找到相关内容。

注意

以下部分定义集群大小要求适用于这些发行版本:

  • OpenShift Container Platform
  • OpenShift Dedicated

7.1. 关于红帽知识库

红帽知识库提供丰富的内容以帮助您最大程度地利用红帽的产品和技术。红帽知识库包括文章、产品文档和视频,概述了安装、配置和使用红帽产品的最佳实践。另外,您还可以搜索已知问题的解决方案,其提供简洁的根原因描述和补救措施。

7.2. 搜索红帽知识库

如果出现 OpenShift Container Platform 问题,您可以先进行搜索,以确定红帽知识库中是否已存在相关的解决方案。

先决条件

  • 您有红帽客户门户网站帐户。

流程

  1. 登录到 红帽客户门户网站
  2. 在主红帽客户门户网站搜索字段中,输入与问题相关的关键字和字符串,包括:

    • OpenShift Container Platform 组件(如 etcd
    • 相关步骤(比如 安装
    • 警告、错误消息和其他与输出与特定的问题相关
  3. Search
  4. 选择 OpenShift Container Platform 产品过滤器。
  5. 在内容类型过滤中选择 Knowledgebase

7.3. 提交支持问题单

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 OpenShift CLI(oc)。
  • 您有红帽客户门户网站帐户。
  • 您有红帽标准订阅或高级订阅。

流程

  1. 登录到 红帽客户门户网站 并选择 SUPPORT CASESOpen a case
  2. 为您的问题选择适当的类别(如 Defect / Bug)、产品(OpenShift Container Platform)和产品版本(如果还没有自动填充则为 )。
  3. 查看推荐的红帽知识库解决方案列表,它们可能会与您要报告的问题相关。如果建议的文章没有解决这个问题,请点 Continue
  4. 输入一个简洁但描述性的问题概述,以及问题症状的详细信息,以及您预期的结果。
  5. 查看更新的推荐红帽知识库解决方案列表,它们可能会与您要报告的问题相关。这个列表的范围会缩小,因为您在创建问题单的过程中提供了更多信息。如果建议的文章没有解决这个问题,请点 Continue
  6. 请确保提供的帐户信息是正确的,如果需要,请相应调整。
  7. 检查自动填充的 OpenShift Container Platform 集群 ID 是否正确。如果不正确,请手动提供集群 ID。

    • 使用 OpenShift Container Platform Web 控制台手动获得集群 ID:

      1. 导航到 HomeDashboardsOverview
      2. 该值包括在 Details 中的 Cluster ID 项中。
    • 另外,也可以通过 OpenShift Container Platform Web 控制台直接创建新的支持问题单,并自动填充集群 ID。

      1. 从工具栏导航至 (?)helpOpen Support Case
      2. Cluster ID 的值会被自动填充 。
    • 要使用 OpenShift CLI(oc)获取集群 ID,请运行以下命令:

      $ oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}'
      Copy to Clipboard Toggle word wrap
  8. 完成以下提示的问题,点 Continue:

    • 您在哪里遇到了这个问题?什么环境?
    • 这个行为在什么时候发生?发生频率?重复发生?是否只在特定时间发生?
    • 请提供这个问题对您的业务的影响及与时间相关的信息?
  9. 上传相关的诊断数据文件并点击 Continue

建议您将使用 oc adm must-gather 命令收集的数据作为起点,并提供这个命令没有收集的与您的具体问题相关的其他数据。

  1. 输入相关问题单管理详情,点 Continue
  2. 预览问题单详情,点 Submit

7.4. 为支持收集诊断信息

在提交问题单时同时提供您的集群信息,可以帮助红帽支持为您进行排除故障。您可使用 must-gather 工具来收集有关 OpenShift Container Platform 集群的诊断信息,包括与 OpenShift Serverless 相关的数据。为了获得快速支持,请提供 OpenShift Container Platform 和 OpenShift Serverless 的诊断信息。

7.4.1. 关于 must-gather 工具

oc adm must-gather CLI 命令可收集最有助于解决问题的集群信息,包括:

  • 资源定义
  • 服务日志

默认情况下,oc adm must-gather 命令使用默认的插件镜像,并写入 ./must-gather.local

另外,您可以使用适当的参数运行命令来收集具体信息,如以下部分所述:

  • 要收集与一个或多个特定功能相关的数据,请使用 --image 参数和镜像,如以下部分所述。

    例如:

    $ oc adm must-gather  --image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel8:v4.13.0
    Copy to Clipboard Toggle word wrap
  • 要收集审计日志,请使用 -- /usr/bin/gather_audit_logs 参数,如以下部分所述。

    例如:

    $ oc adm must-gather -- /usr/bin/gather_audit_logs
    Copy to Clipboard Toggle word wrap
    注意

    作为默认信息集合的一部分,不会收集审计日志来减小文件的大小。

当您运行 oc adm must-gather 时,集群的新项目中会创建一个带有随机名称的新 pod。在该 pod 上收集数据,并保存至以 must-gather.local 开头的一个新目录中。此目录在当前工作目录中创建。

例如:

NAMESPACE                      NAME                 READY   STATUS      RESTARTS      AGE
...
openshift-must-gather-5drcj    must-gather-bklx4    2/2     Running     0             72s
openshift-must-gather-5drcj    must-gather-s8sdh    2/2     Running     0             72s
...
Copy to Clipboard Toggle word wrap

另外,您可以使用 --run-namespace 选项在特定命名空间中运行 oc adm must-gather 命令。

例如:

$ oc adm must-gather --run-namespace <namespace> --image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel8:v4.13.0
Copy to Clipboard Toggle word wrap

7.4.2. 关于收集 OpenShift Serverless 数据

您可使用 oc adm must-gather CLI 命令来收集有关集群的信息,包括与 OpenShift Serverless 相关的功能和对象。要使用 must-gather 来收集 OpenShift Serverless 数据,您必须为已安装的 OpenShift Serverless 版本指定 OpenShift Serverless 镜像和镜像标签。

先决条件

  • 安装 OpenShift CLI (oc) 。

流程

  • 使用 oc adm must-gather 命令收集数据:

    $ oc adm must-gather --image=registry.redhat.io/openshift-serverless-1/serverless-must-gather-rhel8:<image_version_tag>
    Copy to Clipboard Toggle word wrap

    示例命令

    $ oc adm must-gather --image=registry.redhat.io/openshift-serverless-1/serverless-must-gather-rhel8:1.35.0
    Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat