設定流量逐步轉移到修訂版本¶
如果您的流量配置指向組態目標而非修訂版本目標,當建立並準備好新的修訂版本時,來自目標的 100% 流量會立即轉移到新的修訂版本。
這可能會使請求佇列在 QP 或啟動器中過長,並導致請求過期或被 QP 拒絕。
Knative 提供一個 rollout-duration
參數,可用於逐步將流量轉移到最新的修訂版本,防止請求被排隊或拒絕。受影響的組態目標會先轉移 1% 的流量,然後在剩餘的指定流量中以相等的增量步驟進行轉移。
注意
rollout-duration
是基於時間的,並且不與自動調整子系統互動。
此功能適用於已標記和未標記的流量目標,針對沒有服務的 Knative 服務或路由進行配置。
程序¶
您可以使用註解來針對每個 Knative 服務或路由配置 rollout-duration
參數。
提示
有關推出持續時間的全局 ConfigMap 配置的信息,請參閱管理指南。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
namespace: default
annotations:
serving.knative.dev/rollout-duration: "380s"
路由狀態更新¶
在推出期間,系統會更新路由和 Knative 服務狀態條件。traffic
和 conditions
狀態參數都會受到影響。
例如,對於以下流量配置
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
...
spec:
...
traffic:
- percent: 55
configurationName: config # Pinned to latest ready Revision
- percent: 45
revisionName: config-00005 # Pinned to a specific Revision.
最初,1% 的流量會轉移到修訂版本
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
...
spec:
...
traffic:
- percent: 54
revisionName: config-00008
- percent: 1
revisionName: config-00009
- percent: 45
revisionName: config-00005 # Pinned to a specific Revision.
然後,剩餘的流量會以 18% 的增量轉移
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
...
spec:
...
traffic:
- percent: 36
revisionName: config-00008
- percent: 19
revisionName: config-00009
- percent: 45
revisionName: config-00005 # Pinned to a specific Revision.
轉移會持續進行,直到達到目標流量配置
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
...
spec:
...
traffic:
- percent: 55
revisionName: config-00009
- percent: 45
revisionName: config-00005 # Pinned to a specific Revision.
在轉移期間,路由和 Knative 服務狀態條件如下
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
...
spec:
...
status:
conditions:
...
- lastTransitionTime: "..."
message: A gradual rollout of the latest revision(s) is in progress.
reason: RolloutInProgress
status: Unknown
type: Ready
多次轉移¶
如果在轉移過程中建立新的修訂版本,系統會立即開始將流量轉移到最新的修訂版本,並從最新到最舊地耗盡不完整的轉移。