第 9 章 Knative Serving
9.1. 使用 kn 完成 Serving 任务
Knative CLI (kn
) 会扩展 oc
或 kubectl
工具的功能,以支持在 OpenShift Container Platform 上与 Knative 组件交互。kn
允许开发人员在不直接编辑 YAML 文件的情况下部署和管理应用程序。
9.1.1. 使用 kn
的基本工作流
以下基本流程部署了一个简单的 hello
服务,它会读环境变量 RESPONSE
并打印它的输出。
您可以使用本指南作为在服务中执行创建、读取、更新和删除(CRUD)操作的参考。
流程
通过一个镜像,在
default
命名空间内创建一个服务:$ kn service create hello --image docker.io/openshift/hello-openshift --env RESPONSE="Hello Serverless!"
Creating service 'hello' in namespace 'default': 0.085s The Route is still working to reflect the latest desired specification. 0.101s Configuration "hello" is waiting for a Revision to become ready. 11.590s ... 11.650s Ingress has not yet been reconciled. 11.726s Ready to serve. Service 'hello' created with latest revision 'hello-gsdks-1' and URL: http://hello-default.apps-crc.testing
列出服务:
$ kn service list
NAME URL LATEST AGE CONDITIONS READY REASON hello http://hello-default.apps-crc.testing hello-gsdks-1 8m35s 3 OK / 3 True
使用
curl
服务端点命令检查该服务是否正在工作:$ curl http://hello-default.apps-crc.testing
Hello Serverless!
更新服务:
$ kn service update hello --env RESPONSE="Hello OpenShift!"
Updating Service 'hello' in namespace 'default': 10.136s Traffic is not yet migrated to the latest revision. 10.175s Ingress has not yet been reconciled. 10.348s Ready to serve. Service 'hello' updated with latest revision 'hello-dghll-2' and URL: http://hello-default.apps-crc.testing
该服务的环境变量
RESPONSE
现在设置为 "Hello OpenShift!"。描述该服务。
$ kn service describe hello
Name: hello Namespace: default Age: 13m URL: http://hello-default.apps-crc.testing Revisions: 100% @latest (hello-dghll-2) [2] (1m) Image: docker.io/openshift/hello-openshift (pinned to 5ea96b) Conditions: OK TYPE AGE REASON ++ Ready 1m ++ ConfigurationsReady 1m ++ RoutesReady 1m
删除服务:
$ kn service delete hello
Service 'hello' successfully deleted in namespace 'default'.
使用
list
命令来验证hello
服务是否已被删除。$ kn service list hello
No services found.
9.1.2. 使用 kn
自动扩展工作流
您可使用 kn
修改 Knative 服务来访问自动扩展功能,而无需直接编辑 YAML 文件。
使用带有适当标志的 service create
和 service update
命令来配置自动扩展行为。
标志 | 描述 |
---|---|
| 单个副本处理的并发请求的硬性限制。 |
|
根据传入请求的并发数量建议扩展时间。默认为 |
| 最大副本数。 |
| 最小副本数。 |
9.1.3. 使用 kn
进行流量分割
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.1.3.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.1.3.2. 取消分配标签修订版本
已分配至流量块中修订版本的标签可取消分配。取消分配标签将会移除自定义 URL。
如果修订版本未标记,也没有为其分配流量,则会从流量块中完全移除该修订版本。
流程
取消分配标签:
$ kn service update svc --untag candidate
--untag Tag
使用以下语法:
-
--untag
标志需要一个值。 -
tag
字符串表示服务流量块中的唯一标签需要取消分配。这也会移除对应的自定义 URL。 -
--untag
标志可多次指定。
9.1.3.3. 流量标志操作优先级
所有流量相关标志均可使用一条 kn service update
命令指定。kn
定义这些标志的优先级。不考虑使用命令时指定的标志顺序。
通过 kn
评估标志时,标志的优先级如下:
-
--untag
:带有此标志的所有引用修订版本均将从流量块中移除。 -
--tag
:修订版本将按照流量块中的指定进行标记。 -
--traffic
:为引用的修订版本分配一部分流量分割。
9.1.3.4. 流量分割标志
kn
作为 kn service update
命令的一部分,支持在服务的流量块上进行流量操作。
下表显示流量分割标志、值格式和标志执行的操作汇总。“重复”列表示在 kn service update
命令中可否重复标志特定值。
标志 | 值 | 操作 | 重复 |
---|---|---|---|
|
|
为 | 是 |
|
|
为具有 | 是 |
|
|
为最新可用的修订版本提供 | 否 |
|
|
为 | 是 |
|
|
为最新可用的修订版本提供 | 否 |
|
|
从修订版本中移除 | 是 |