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"
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: config: defaults: revision-timeout-seconds: "300"
Copy to Clipboard Copied! 通过在服务定义中设置
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
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 Copied!
注意要将修订超时设置为 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"
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 Copied! 注意要将最大修订超时设置为 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"
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 Copied! 要配置每个修订版本的超时,请在服务定义中设置
responseStartTimeoutSeconds
字段。如果您的所需的响应启动超时超过修订版本超时,请相应地调整timeoutSeconds
字段:修订响应启动超时的服务定义示例,设为 300 秒(5 分钟)
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns spec: template: spec: timeoutSeconds: 600 responseStartTimeoutSeconds: 300 containers: # ...
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns spec: template: spec: timeoutSeconds: 600 responseStartTimeoutSeconds: 300 containers: # ...
Copy to Clipboard Copied!
注意要将修订响应启动超时和修订超时设置为 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"
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 Copied! 要配置每个修订版本的超时,请在服务定义中设置
idleTimeoutSeconds
字段:修订版本空闲超时设置为 300 秒的服务定义示例(5 分钟)
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns spec: template: spec: idleTimeoutSeconds: 300 containers: # ...
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns spec: template: spec: idleTimeoutSeconds: 300 containers: # ...
Copy to Clipboard Copied!
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
。
流程
运行以下命令,将订阅中的
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"}]}}}'
$ 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 Copied! 或者,您可以直接在订阅中设置
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' #...
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: #... spec: channel: stable config: env: - name: ROUTE_HAPROXY_TIMEOUT value: '900' #...
Copy to Clipboard Copied! 注意如果您使用
service.knative.openshift.io/disableRoute
注解手动创建路由并禁用自动生成,您可以在路由定义中直接配置超时。在
KnativeServing
CR 中设置最大修订超时:将
max-revision-timeout-seconds
设置为 900 秒的KnativeServing
CRapiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: defaults: max-revision-timeout-seconds: "900" #...
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: defaults: max-revision-timeout-seconds: "900" #...
Copy to Clipboard Copied! Serverless Operator 会自动将激活器的
terminationGracePeriod
值调整为设定的最大修订超时值,以避免在激活器 pod 被终止时请求终止。可选:运行以下命令来验证超时是否已设置:
oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}"
$ oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}"
Copy to Clipboard Copied! 如果云供应商需要,请运行以下命令来调整负载均衡器超时:
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"}}}}}}}'
$ 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 Copied! 使用所需的超时部署 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
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service-name spec: template: spec: timeoutSeconds: 800 responseStartTimeoutSeconds: 800
Copy to Clipboard Copied! 重要使用 Service Mesh 时,如果在长时间运行的请求处于动态状态时停止 activator pod,则请求会中断。为了避免请求中断,您必须调整
ServiceMeshControlPlane
CR 中的terminationDrainDuration
字段的值:apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane #... spec: techPreview: meshConfig: defaultConfig: terminationDrainDuration: 1000s #...
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane #... spec: techPreview: meshConfig: defaultConfig: terminationDrainDuration: 1000s
1 #...
Copy to Clipboard Copied! - 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}"
$ oc get route <route_name> -n knative-serving-ingress ess -o jsonpath="{.metadata.annotations.haproxy\.router\.openshift\.io/timeout}" 800s
Copy to Clipboard Copied!
4.10.5.2. 为每个修订版本配置默认路由超时
通过为每个修订版本配置路由超时,您可以对具有唯一要求的工作负载(如 AI 或数据处理应用程序)微调超时,而不影响其他服务的全局超时设置。您可以通过更新 KnativeServing
自定义资源(CR)、Service 定义并使用 service.knative.openshift.io/setRouteTimeout
注解来配置特定修订版本的超时,以调整 OpenShift Container Platform 路由超时。
流程
根据需要,在
KnativeServing
CR 中设置max-revision-timeout
注解:apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: defaults: max-revision-timeout-seconds: "900"
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: defaults: max-revision-timeout-seconds: "900"
Copy to Clipboard Copied! 可选:运行以下命令来验证激活器的终止宽限期:
oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}"
$ oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}" 900
Copy to Clipboard Copied! 如果云供应商需要,请运行以下命令来调整负载均衡器超时:
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"}}}}}}}'
$ 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 Copied! 为特定服务设置超时:
apiVersion: serving.knative.dev/v1f kind: Service metadata: name: <your_service_name> annotations: serving.knative.openshift.io/setRouteTimeout: "800" spec: template: metadata: annotations: #... spec: timeoutSeconds: 800 responseStartTimeoutSeconds: 800
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 Copied! 重要使用 Service Mesh 时,如果在长时间运行的请求处于动态状态时停止 activator pod,则请求会中断。为了避免请求中断,您必须调整
ServiceMeshControlPlane
CR 中的terminationDrainDuration
字段的值:apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane #... spec: techPreview: meshConfig: defaultConfig: terminationDrainDuration: 1000s #...
apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane #... spec: techPreview: meshConfig: defaultConfig: terminationDrainDuration: 1000s
1 #...
Copy to Clipboard Copied! - 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}"
$ oc get route <route-name> -n knative-serving-ingress ess -o jsonpath="{.metadata.annotations.haproxy\.router\.openshift\.io/timeout}" 800s
Copy to Clipboard Copied!