9.5. 使用 Knative Client 进行流量分割
kn
可帮助您控制哪些修订版本可获取您的 Knative 服务上的路由流量。
Knative 服务支持流量映射,可将服务的修订版本映射到流量的分配部分。它提供了为特定修订版本创建唯一 URL 的选项,且能够为最新修订版本分配流量。
每次更新服务配置时,都会创建一个新修订版本,服务路由默认会将所有流量指向最新可用的修订版本。
您可通过定义哪个修订版本可获得部分流量来更改此行为。
流程
-
使用带有
--traffic
标志的kn service update
命令来更新流量。
--traffic RevisionName=Percent
使用以下语法:
-
--traffic
标志需要用等号 (=
) 分隔的两个值。 -
RevisionName
字符串表示修订版本的名称。 -
Percent
整数表示分配给修订版本的流量部分。 -
将标识符
@latest
用于 RevisionName,以表示服务的最新的可用修订版本。此标识符仅可与--traffic
标志一起使用一次。 -
如果
service update
命令更新该服务的配置值和流量标志,则@latest
引用将指向更新应用到的所创建修订版本。 -
--traffic
标志可多次指定,且仅在所有标志的Percent
值总和达到 100 时才有效。
例如,要在放置所有流量前将 10% 的流量路由至您的新修订版本,请使用以下命令:
$ kn service update svc --traffic @latest=10 --traffic svc-vwxyz=90
9.5.1. 分配标签修订
服务流量块中的标签会创建自定义 URL,指向引用的修订版本。用户可为服务的可用修订版本定义唯一标签,该标签通过使用 http(s)://TAG-SERVICE.DOMAIN
格式创建自定义 URL。
给定标签对于该服务的流量块来说必须唯一。kn
作为 kn service update
命令的一部分,支持为服务修订版本分配和取消分配自定义标签。
如果您为特定修订版本分配了标签,用户便可通过 --traffic
标志中作为 --traffic Tag=Percent
的标签来引用修订版本。
流程
使用以下命令:
$ kn service update svc --tag @latest=candidate --tag svc-vwxyz=current
--tag RevisionName=Tag
使用以下语法:
-
--tag
标志需要两个以=
分隔的值。 -
RevisionName
字符串表示Revision
的名称。 -
Tag
字符串表示要为此修订版本提供的自定义标签。 -
将标识符
@latest
用于 RevisionName,以表示服务的最新的可用修订版本。此标识符仅可与--tag
标志一起使用一次。 -
如果
service update
命令更新该服务的配置值(以及标签标志),则@latest
引用将在应用更新后指向所创建修订版本。 -
--tag
标志可多次指定。 -
--tag
标志可为同一修订版本分配不同标签。
9.5.2. 取消分配标签修订版本
已分配至流量块中修订版本的标签可取消分配。取消分配标签将会移除自定义 URL。
如果修订版本未标记,也没有为其分配流量,则会从流量块中完全移除该修订版本。
流程
用户可以使用
kn service update
命令为修订版本取消分配标签。$ kn service update svc --untag candidate
--untag Tag
使用以下语法:
-
--untag
标志需要一个值。 -
tag
字符串表示服务流量块中的唯一标签需要取消分配。这也会移除对应的自定义 URL。 -
--untag
标志可多次指定。
9.5.3. 流量标志操作优先级
所有流量相关标志均可使用一条 kn service update
命令指定。kn
定义这些标志的优先级。不考虑使用命令时指定的标志顺序。
通过 kn
评估标志时,标志的优先级如下:
-
--untag
:带有此标志的所有引用修订版本均将从流量块中移除。 -
--tag
:修订版本将按照流量块中的指定进行标记。 -
--traffic
:为引用的修订版本分配一部分流量分割。
9.5.4. 流量分割标志
kn
作为 kn service update
命令的一部分,支持在服务的流量块上进行流量操作。
下表显示流量分割标志、值格式和标志执行的操作汇总。“重复”列表示在 kn service update
命令中可否重复标志特定值。
标志 | 值 | 操作 | 重复 |
---|---|---|---|
|
|
为 | 是 |
|
|
为具有 | 是 |
|
|
为最新可用的修订版本提供 | 否 |
|
|
为 | 是 |
|
|
为最新可用的修订版本提供 | 否 |
|
|
从修订版本中移除 | 是 |