4.10. 配置修订超时


您可以在全局范围内或单独为修订版本配置超时持续时间,以控制请求上的时间。

4.10.1. 配置修订超时

您可以根据请求配置修订超时的默认秒数。

先决条件

  • 安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 有集群所需的权限:

    • OpenShift Container Platform 上的集群管理员权限
    • Red Hat OpenShift Service on AWS 上的集群管理员或专用管理员权限
    • OpenShift Dedicated 上的集群管理员或专用管理员权限

流程

  • 选择配置修订超时的适当方法:

    • 要在全局范围内配置修订超时,请在 KnativeServing 自定义资源(CR)中设置 revision-timeout-seconds 字段:

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      spec:
        config:
          defaults:
            revision-timeout-seconds: "300"
      Copy to Clipboard
    • 通过在服务定义中设置 timeoutSeconds 字段来配置每个修订版本的超时:

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        namespace: my-ns
      spec:
        template:
          spec:
            timeoutSeconds: 300
            containers:
            - image: ghcr.io/knative/helloworld-go:latest
      Copy to Clipboard
    注意

    要将修订超时设置为 600 秒以上的值(10 分钟),您必须提高默认的 OpenShift Container Platform 路由超时和最大修订版本超时。

    有关如何为超过默认 600 秒(10 分钟)的请求配置超时的说明,请参阅 "Long-running requests"。

4.10.2. 配置最大修订超时

通过设置最大修订超时,您可以确保任何修订版本不会超过特定限制。您的最大修订超时的值不能超过激活器的 terminationGracePeriodSeconds 值,以防止中断动态请求。

先决条件

  • 安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 有集群所需的权限:

    • OpenShift Container Platform 上的集群管理员权限
    • Red Hat OpenShift Service on AWS 上的集群管理员或专用管理员权限
    • OpenShift Dedicated 上的集群管理员或专用管理员权限

流程

  • 要配置最大修订超时,请在 KnativeServing 自定义资源(CR)中设置 max-revision-timeout-seconds 字段:

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      config:
        defaults:
          max-revision-timeout-seconds: "600"
    Copy to Clipboard
    注意

    要将最大修订超时设置为 600 秒以上的值(10 分钟),您必须提高默认的 OpenShift Container Platform 路由超时。

    有关如何为超过默认 600 秒(10 分钟)的请求配置超时的说明,请参阅 "Long-running requests"。

4.10.3. 配置修订响应启动超时

通过设置修订响应启动超时,您可以指定 Serving 等待修订版本在请求路由到它后启动网络流量的最长持续时间(以秒为单位)。修订响应启动超时不能超过修订超时。默认持续时间为 300 秒(5 分钟)。

先决条件

  • 安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 有集群所需的权限:

    • OpenShift Container Platform 上的集群管理员权限
    • Red Hat OpenShift Service on AWS 上的集群管理员或专用管理员权限
    • OpenShift Dedicated 上的集群管理员或专用管理员权限

流程

  • 选择配置修订响应启动超时的适当方法:

    • 要在全局范围内配置超时,请在 KnativeServing 自定义资源(CR)中设置 revision-response-start-timeout-seconds 字段。如果您的所需的响应启动超时超过修订版本超时,请相应地调整 revision-timeout-seconds 字段:

      修订响应启动超时示例设置为全局设置为 300 秒(5 分钟)

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      spec:
        config:
          defaults:
            revision-timeout-seconds: "600"
            revision-response-start-timeout-seconds: "300"
      Copy to Clipboard

    • 要配置每个修订版本的超时,请在服务定义中设置 responseStartTimeoutSeconds 字段。如果您的所需的响应启动超时超过修订版本超时,请相应地调整 timeoutSeconds 字段:

      修订响应启动超时的服务定义示例,设为 300 秒(5 分钟)

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        namespace: my-ns
      spec:
        template:
          spec:
            timeoutSeconds: 600
            responseStartTimeoutSeconds: 300
            containers:
      # ...
      Copy to Clipboard

    注意

    要将修订响应启动超时和修订超时设置为 600 秒(10 分钟)的值,您必须提高默认的 OpenShift Container Platform 路由超时和最大修订超时。

    有关如何为超过默认 600 秒(10 分钟)的请求配置超时的说明,请参阅 "Long-running requests"。

4.10.4. 配置修订闲置超时

通过设置修订空闲超时,您可以指定允许请求保持打开的最长持续时间(以秒为单位)。默认持续时间为 0 (infinite)。

先决条件

  • 安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 有集群所需的权限:

    • OpenShift Container Platform 上的集群管理员权限
    • Red Hat OpenShift Service on AWS 上的集群管理员或专用管理员权限
    • OpenShift Dedicated 上的集群管理员或专用管理员权限

流程

  • 选择配置修订闲置超时的适当方法:

    • 要在全局范围内配置超时,请在 KnativeServing 自定义资源(CR)中设置 revision-idle-timeout-seconds 字段:

      修订版本空闲超时示例全局设置为 300 秒(5 分钟)

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      spec:
        config:
          defaults:
            revision-idle-timeout-seconds: "300"
      Copy to Clipboard

    • 要配置每个修订版本的超时,请在服务定义中设置 idleTimeoutSeconds 字段:

      修订版本空闲超时设置为 300 秒的服务定义示例(5 分钟)

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        namespace: my-ns
      spec:
        template:
          spec:
            idleTimeoutSeconds: 300
            containers:
      # ...
      Copy to Clipboard

4.10.5. 长时间运行的请求

为确保超过 Knative 设置的默认 600 秒超时的请求不会持续终止,您需要在以下组件中调整超时:

  • OpenShift Container Platform 路由
  • OpenShift Serverless Serving
  • 负载均衡器,具体取决于云供应商

您可以在全局或每个修订版本中配置超时。如果您在所有需要扩展持续时间的 Knative 服务间有请求,或每个需要不同超时值(如 AI 部署)的修订版本,则可以全局配置超时。

4.10.5.1. 在全局范围内配置默认路由超时

通过全局配置路由超时,您可以确保所有服务中的一致超时设置,简化对具有类似超时需求的工作负载的管理,并减少对单独调整的需求。

您可以通过更新 serverless-operator 订阅中 ROUTE_HAPROXY_TIMEOUT 环境值并更新 KnativeServing 自定义资源(CR)中的 max-revision-timeout-seconds 字段来全局配置路由超时。这会在所有 Knative 服务间应用超时更改,您可以使用特定超时部署服务,最多设置为最大值。

ROUTE_HAPROXY_TIMEOUT 是 Serverless Operator 管理的环境变量,默认情况下设置为 600

流程

  1. 运行以下命令,将订阅中的 ROUTE_HAPROXY_TIMEOUT 的值设置为所需的超时时间(以秒为单位)。请注意,这会导致重新部署 openshift-serverless 命名空间中的 pod。

    ROUTE_HAPROXY_TIMEOUT 值设置为 900 秒

    $ oc patch subscription.operators.coreos.com serverless-operator -n openshift-serverless --type='merge' -p '{"spec": {"config": {"env": [{"name": "ROUTE_HAPROXY_TIMEOUT", "value": "900"}]}}}'
    Copy to Clipboard

    或者,您可以直接在订阅中设置 ROUTE_HAPROXY_TIMEOUT 的值:

    ROUTE_HAPROXY_TIMEOUT 设置为 900 秒的订阅定义

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

    注意

    如果您使用 service.knative.openshift.io/disableRoute 注解手动创建路由并禁用自动生成,您可以在路由定义中直接配置超时。

  2. KnativeServing CR 中设置最大修订超时:

    max-revision-timeout-seconds 设置为 900 秒的 KnativeServing CR

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
    spec:
      config:
        defaults:
          max-revision-timeout-seconds: "900"
    #...
    Copy to Clipboard

    Serverless Operator 会自动将激活器的 terminationGracePeriod 值调整为设定的最大修订超时值,以避免在激活器 pod 被终止时请求终止。

  3. 可选:运行以下命令来验证超时是否已设置:

    $ oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}"
    Copy to Clipboard
  4. 如果云供应商需要,请运行以下命令来调整负载均衡器超时:

    AWS Classic LB 的负载均衡器超时调整

    $ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge --patch=' \
      {"spec":{"endpointPublishingStrategy":  \
      {"type":"LoadBalancerService", "loadBalancer":  \
      {"scope":"External", "providerParameters":{"type":"AWS", "aws":  \
      {"type":"Classic", "classicLoadBalancer":  \
      {"connectionIdleTimeout":"20m"}}}}}}}'
    Copy to Clipboard

  5. 使用所需的超时部署 Knative 服务,或等于 max-revision-timeout-seconds 变量:

    将超时设置为 800 秒的服务定义

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: example-service-name
    spec:
      template:
        spec:
          timeoutSeconds: 800
          responseStartTimeoutSeconds: 800
    Copy to Clipboard

    重要

    使用 Service Mesh 时,如果在长时间运行的请求处于动态状态时停止 activator pod,则请求会中断。为了避免请求中断,您必须调整 ServiceMeshControlPlane CR 中的 terminationDrainDuration 字段的值:

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    #...
    spec:
      techPreview:
          meshConfig:
            defaultConfig:
              terminationDrainDuration: 1000s 
    1
    
    #...
    Copy to Clipboard
    1
    确保该值超过请求持续时间,以避免 Istio 代理关闭,这会中断请求。

验证

  • 如果使用 Kourier,您可以运行以下命令来验证 OpenShift Container Platform 路由中超时的当前值:

    $ oc get route <route_name> -n knative-serving-ingress ess -o jsonpath="{.metadata.annotations.haproxy\.router\.openshift\.io/timeout}"
    800s
    Copy to Clipboard

4.10.5.2. 为每个修订版本配置默认路由超时

通过为每个修订版本配置路由超时,您可以对具有唯一要求的工作负载(如 AI 或数据处理应用程序)微调超时,而不影响其他服务的全局超时设置。您可以通过更新 KnativeServing 自定义资源(CR)、Service 定义并使用 service.knative.openshift.io/setRouteTimeout 注解来配置特定修订版本的超时,以调整 OpenShift Container Platform 路由超时。

流程

  1. 根据需要,在 KnativeServing CR 中设置 max-revision-timeout 注解:

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
    spec:
      config:
        defaults:
          max-revision-timeout-seconds: "900"
    Copy to Clipboard
  2. 可选:运行以下命令来验证激活器的终止宽限期:

    $ oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}"
    
    900
    Copy to Clipboard
  3. 如果云供应商需要,请运行以下命令来调整负载均衡器超时:

    AWS Classic LB 的负载均衡器超时调整

    $ oc -n openshift-ingress-operator patch ingresscontroller/default \
      --type=merge --patch='{"spec":{"endpointPublishingStrategy":  \
      {"type":"LoadBalancerService", "loadBalancer":  \
      {"scope":"External", "providerParameters":{"type":"AWS", "aws":  \
      {"type":"Classic", "classicLoadBalancer":  \
      {"connectionIdleTimeout":"20m"}}}}}}}'
    Copy to Clipboard

  4. 为特定服务设置超时:

    apiVersion: serving.knative.dev/v1f
    kind: Service
    metadata:
      name: <your_service_name>
      annotations:
        serving.knative.openshift.io/setRouteTimeout: "800" 
    1
    
    spec:
      template:
        metadata:
          annotations:
    #...
        spec:
          timeoutSeconds: 800 
    2
    
          responseStartTimeoutSeconds: 800 
    3
    Copy to Clipboard
    1
    此注解为 OpenShift Container Platform 路由设置超时。您可以为每个服务微调,而不是设置全局最大值。
    2
    这样可确保请求不会超过特定值。
    3
    这样可确保在达到最大阈值前不会触发响应启动超时。默认值为 300
    重要

    使用 Service Mesh 时,如果在长时间运行的请求处于动态状态时停止 activator pod,则请求会中断。为了避免请求中断,您必须调整 ServiceMeshControlPlane CR 中的 terminationDrainDuration 字段的值:

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    #...
    spec:
      techPreview:
          meshConfig:
            defaultConfig:
              terminationDrainDuration: 1000s 
    1
    
    #...
    Copy to Clipboard
    1
    确保该值超过请求持续时间,以避免 Istio 代理关闭,这会中断请求。

验证

  • 如果使用 Kourier,您可以运行以下命令来验证 OpenShift Container Platform 路由中超时的当前值:

    $ oc get route <route-name> -n knative-serving-ingress ess -o jsonpath="{.metadata.annotations.haproxy\.router\.openshift\.io/timeout}"
    800s
    Copy to Clipboard
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat