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"サービス定義の
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
注記リビジョンタイムアウトを 600 秒 (10 分) を超える値に設定するには、デフォルトの OpenShift Container Platform ルートタイムアウトと最大リビジョンタイムアウトを増やす必要があります。
デフォルトの 600 秒 (10 分) を超えるリクエストのタイムアウトを設定する方法は、「長時間実行されるリクエスト」を参照してください。
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"注記最大リビジョンタイムアウトを 600 秒 (10 分) を超える値に設定するには、デフォルトの OpenShift Container Platform ルートタイムアウトを増やす必要があります。
デフォルトの 600 秒 (10 分) を超えるリクエストのタイムアウトを設定する方法は、「長時間実行されるリクエスト」を参照してください。
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"リビジョンごとにタイムアウトを設定するには、サービス定義の
responseStartTimeoutSecondsフィールドを設定します。必要な応答開始タイムアウトがリビジョンタイムアウトを超える場合は、それに応じてtimeoutSecondsフィールドも調整します。リビジョン応答開始タイムアウトを 300 秒 (5 分) に設定したサービス定義の例
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns spec: template: spec: timeoutSeconds: 600 responseStartTimeoutSeconds: 300 containers: # ...
注記リビジョン応答開始タイムアウトとリビジョンタイムアウトを 600 秒 (10 分) を超える値に設定するには、デフォルトの OpenShift Container Platform ルートタイムアウトと最大リビジョンタイムアウトを増やす必要があります。
デフォルトの 600 秒 (10 分) を超えるリクエストのタイムアウトを設定する方法は、「長時間実行されるリクエスト」を参照してください。
4.10.4. リビジョンアイドルタイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
リビジョンアイドルタイムアウトを設定すると、アプリケーションからデータを受信せずにリクエストを開いたままにできる最大期間を秒単位で指定できます。デフォルトの期間は 0 (無限) です。
前提条件
- 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"リビジョンごとにタイムアウトを設定するには、サービス定義で
idleTimeoutSecondsフィールドを設定します。リビジョンアイドルタイムアウトを 300 秒 (5 分) に設定したサービス定義の例
apiVersion: serving.knative.dev/v1 kind: Service metadata: namespace: my-ns spec: template: spec: idleTimeoutSeconds: 300 containers: # ...
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-serverlessnamespace 内の 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"}]}}}'または、サブスクリプションで
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' #...注記ルートを手動で作成し、
serving.knative.openshift.io/disableRouteアノテーションを使用して自動生成を無効にした場合は、ルート定義でタイムアウトを直接設定できます。KnativeServingCR で最大リビジョンタイムアウトを設定します。max-revision-timeout-secondsが 900 秒に設定されたKnativeServingCRapiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: defaults: max-revision-timeout-seconds: "900" #...Serverless Operator は、アクティベーター Pod 自体が終了される場合にリクエストが終了しないように、アクティベーターの
terminationGracePeriod値を設定された最大リビジョンタイムアウト値に自動的に調整します。オプション: 次のコマンドを実行して、タイムアウトが設定されていることを確認します。
$ oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}"クラウドプロバイダーで必要な場合は、次のコマンドを実行してロードバランサーのタイムアウトを調整します。
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"}}}}}}}'必要なタイムアウトが
max-revision-timeout-seconds変数以下の Knative サービスをデプロイします。タイムアウトを 800 秒に設定したサービス定義
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service-name spec: template: spec: timeoutSeconds: 800 responseStartTimeoutSeconds: 800重要Service Mesh を使用する場合、長時間実行リクエストが処理中にアクティベーター Pod が停止すると、リクエストは中断されます。リクエストの中断を回避するには、
ServiceMeshControlPlaneCR のterminationDrainDurationフィールドの値を調整する必要があります。apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane #... spec: techPreview: meshConfig: defaultConfig: terminationDrainDuration: 1000s1 #...- 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
4.10.5.2. デフォルトルートのタイムアウトをリビジョンごとに設定する リンクのコピーリンクがクリップボードにコピーされました!
リビジョンごとにルートタイムアウトを設定することで、他のサービスのグローバルタイムアウト設定に影響を与えることなく、AI やデータ処理アプリケーションなどの固有の要件を持つワークロードのタイムアウトを微調整できます。KnativeServing カスタムリソース (CR)、Service 定義を更新し、serving.knative.openshift.io/setRouteTimeout アノテーションを使用して OpenShift Container Platform ルートタイムアウトを調整することで、特定のリビジョンのタイムアウトを設定できます。
手順
必要に応じて、
KnativeServingCR にmax-revision-timeoutアノテーションを設定します。apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving spec: config: defaults: max-revision-timeout-seconds: "900"オプション: 次のコマンドを実行して、アクティベーターの終了猶予期間を確認します。
$ oc get deployment activator -n knative-serving -o jsonpath="{.spec.template.spec.terminationGracePeriodSeconds}" 900クラウドプロバイダーで必要な場合は、次のコマンドを実行してロードバランサーのタイムアウトを調整します。
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"}}}}}}}'特定のサービスのタイムアウトを設定します。
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: 8002 responseStartTimeoutSeconds: 8003 重要Service Mesh を使用する場合、長時間実行リクエストが処理中にアクティベーター Pod が停止すると、リクエストは中断されます。リクエストの中断を回避するには、
ServiceMeshControlPlaneCR のterminationDrainDurationフィールドの値を調整する必要があります。apiVersion: maistra.io/v2 kind: ServiceMeshControlPlane #... spec: techPreview: meshConfig: defaultConfig: terminationDrainDuration: 1000s1 #...- 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