Menu Close

5.3. 流量管理

revision(修订版本)是每次对 Knative 服务进行修改的代码和配置的时间点快照。每次更新服务配置时,都会为该服务创建新的修订版本。修订版本为不可变对象,只要需要或使用,就可以保留。Knative Serving 修订版本可以根据传入的流量自动缩放和缩减。

您可以通过修改服务资源的 traffic spec 来管理到 Knative 服务的不同修订版的流量路由。

Knative 服务架构

5.3.1. 流量路由示例

当您创建 Knative 服务时,它没有任何默认 traffic spec 设置。通过设置 traffic 规格,您可以将流量分割到任何固定修订版本,或将流量发送到最新的修订版本。

5.3.1.1. 多个修订版本间的流量路由

以下示例演示了如何扩展 traffic 规格中的修订版本列表,以便在多个修订版本间分割流量。

这个示例将 50% 的流量发送到标记为 current 修订版本,50% 的流量发送到标记为 candidate 的修订版本:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - tag: current
    revisionName: example-service-1
    percent: 50
  - tag: candidate
    revisionName: example-service-2
    percent: 50
  - tag: latest
    latestRevision: true
    percent: 0

5.3.1.2. 到最新修订版本的流量路由

以下示例显示了一个 traffic 规格,其中 100% 的流量路由到该服务的最新修订版本。在 status 下,您可以看到 latestRevision 解析为的最新修订版本的名称:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - latestRevision: true
    percent: 100
status:
  ...
  traffic:
  - percent: 100
    revisionName: example-service

5.3.1.3. 到当前修订版本的流量路由

以下示例显示了一个 traffic 规格,其中 100% 的流量路由到当前标记为 current 修订版本,并且该修订版本的名称指定为 example-service。标记为 latest 的修订版本会保持可用,即使没有流量路由到它:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: example-service
  namespace: default
spec:
...
  traffic:
  - tag: current
    revisionName: example-service
    percent: 100
  - tag: latest
    latestRevision: true
    percent: 0