第 9 章 Knative Serving


9.1. 使用 kn 完成 Knative Serving 任务

Knative kn CLI 会扩展 ockubectl CLI 工具的功能,以集成与 OpenShift Container Platform 上的 Knative 组件的交互。kn 允许开发人员在不直接编辑 YAML 文件的情况下部署和管理应用程序。

9.1.1. 使用 kn 的基本工作流

以下基本流程部署了一个简单的 hello 服务,它会读环境变量 RESPONSE 并打印它的输出。

您可以使用本指南作为在服务中执行创建、读取、更新和删除(CRUD)操作的参考。

流程

  1. 通过一个镜像,在 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

  2. 列出服务:

    $ 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

  3. 使用 curl 服务端点命令检查该服务是否正在工作:

    $ curl http://hello-default.apps-crc.testing

    输出示例

    Hello Serverless!

  4. 更新服务:

    $ 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!"。

  5. 描述该服务。

    $ 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

  6. 删除服务:

    $ kn service delete hello

    输出示例

    Service 'hello' successfully deleted in namespace 'default'.

  7. 通过列出 hello 服务来验证 hello 服务是否已被删除:

    $ kn service list hello

    输出示例

    No services found.

9.1.2. 使用 kn 自动扩展工作流

您可使用 kn 修改 Knative 服务来访问自动扩展功能,而无需直接编辑 YAML 文件。

使用带有适当标志的 service createservice update 命令来配置自动扩展行为。

标志描述

--concurrency-limit int

单个副本处理的并发请求的硬性限制。

--concurrency-target int

根据传入请求的并发数量建议扩展时间。默认为 --concurrency-limit

--max-scale int

最大副本数。

--min-scale int

最小副本数。

9.1.3. 使用 kn 进行流量分割

您可以使用 kn 来控制哪些修订版本获取 Knative 服务上的路由流量。

Knative 服务支持流量映射,服务的修订版本映射到流量的分配部分。它提供了为特定修订版本创建唯一 URL 的选项,且能够为最新修订版本分配流量。

每次更新服务配置时,都会创建一个新修订版本,服务路由默认会将所有流量指向最新可用的修订版本。您可通过定义哪个修订版本可获得部分流量来更改此行为。

流程

  • 使用带有 --traffic 标志的 kn service update 命令来更新流量。

    例如,在将所有流量放置到新修订版本前,要将 10% 的流量路由到新修订版本:

    $ kn service update svc --traffic @latest=10 --traffic svc-vwxyz=90

    --traffic RevisionName=Percent 使用以下语法:

    • --traffic 标志需要用等号 (=) 分隔的两个值。
    • RevisionName 字符串表示修订版本的名称。
    • Percent 整数表示分配给修订版本的流量部分。
    • 将标识符 @latest 用于 RevisionName,以表示服务的最新的可用修订版本。此标识符仅可与 --traffic 标志一起使用一次。
    • 如果 service update 命令更新该服务的配置值和流量标志,则 @latest 引用将指向更新应用到的所创建修订版本。
    • --traffic 标志可多次指定,且仅在所有标志的 Percent 值总和达到 100 时才有效。

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 命令为修订版本取消分配标签:

    $ kn service update svc --untag candidate

    --untag Tag 使用以下语法:

    • --untag 标志需要一个值。
    • tag 字符串表示服务流量块中的唯一标签需要取消分配。这也会移除对应的自定义 URL。
    • --untag 标志可多次指定。

9.1.3.3. 流量标志操作优先级

所有流量相关标志均可使用单一 kn service update 命令指定。kn 定义这些标志的优先级。不考虑使用命令时指定的标志顺序。

通过 kn 评估标志时,标志的优先级如下:

  1. --untag:带有此标志的所有引用修订版本均将从流量块中移除。
  2. --tag:修订版本将按照流量块中的指定进行标记。
  3. --traffic:为引用的修订版本分配一部分流量分割。

9.1.3.4. 流量分割标志

kn 作为 kn service update 命令的一部分,支持在服务的流量块上进行流量操作。

下表显示流量分割标志、值格式和标志执行的操作汇总。Repetition 列表示在 kn service update 命令中是否允许重复标志的特定值。

标记操作重复

--traffic

RevisionName=Percent

RevisionName 提供 Percent 的流量

--traffic

Tag=Percent

为带有 Tag的修订版本提供 Percent 的流量

--traffic

@latest=Percent

为最新可用的修订版本提供 Percent 的流量

--tag

RevisionName=Tag

RevisionName 提供 Tag

--tag

@latest=Tag

为最新可用的修订版本提供 Tag

--untag

Tag

从修订中删除 Tag

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.