配置将流量逐步推广到修订版¶
如果您的流量配置指向配置目标而不是修订版目标,当创建新的修订版并准备就绪时,来自目标的 100% 流量将立即转移到新的修订版。
这可能会使请求队列过长,无论是 QP 还是 Activator,并导致请求过期或被 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
多次推广¶
如果在推广进行时创建新的修订版,系统会立即开始将流量转移到最新的修订版,并从最新的修订版到最旧的修订版依次清空未完成的推广。