第 5 章 Knative Functions CLI 命令
5.1. kn 功能命令
5.1.1. 创建功能
在构建和部署功能前,您必须使用 Knative (kn
) CLI 创建功能。您可以在命令行中指定路径、运行时、模板和镜像 registry,也可以使用 -c
标志在终端中启动交互式体验。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。
流程
创建功能项目:
$ kn func create -r <repository> -l <runtime> -t <template> <path>
-
可接受的运行时值包括
quarkus
、node
、typescript
、go
、python
、springboot
和rust
。 可接受的模板值包括
http
和cloudevents
。示例命令
$ kn func create -l typescript -t cloudevents examplefunc
输出示例
Created typescript function in /home/user/demo/examplefunc
或者,您可以指定包含自定义模板的存储库。
示例命令
$ kn func create -r https://github.com/boson-project/templates/ -l node -t hello-world examplefunc
输出示例
Created node function in /home/user/demo/examplefunc
-
可接受的运行时值包括
5.1.2. 在本地运行一个函数
您可以使用 kn func run
命令在当前目录中本地运行函数,或者在 --path
标志指定的目录中运行。如果您运行的函数之前没有被构建,或者项目文件自上次构建以来已修改过,kn func run
命令将在运行它前构建该函数。
在当前目录中运行函数的命令示例
$ kn func run
在指定为路径的目录中运行函数的示例
$ kn func run --path=<directory_path>
您也可以在运行该函数前强制重建现有镜像,即使项目文件没有更改项目文件,则使用 --build
标志:
使用 build 标记的 run 命令示例
$ kn func run --build
如果将 build
标志设置为 false,这将禁用构建镜像,并使用之前构建的镜像运行该功能:
使用 build 标记的 run 命令示例
$ kn func run --build=false
您可以使用 help 命令了解更多有关 kn func run
命令选项的信息:
构建 help 命令
$ kn func help run
5.1.3. 构建函数
在运行功能前,您必须构建 function 项目。如果使用 kn func run
命令,则该函数会自动构建。但是,您可以使用 kn func build
命令在不运行的情况下构建函数,这对于高级用户或调试场景非常有用。
kn func build
命令创建可在您的计算机或 OpenShift Container Platform 集群中运行的 OCI 容器镜像。此命令使用功能项目名称和镜像 registry 名称为您的功能构建完全限定镜像名称。
5.1.3.1. 镜像容器类型
默认情况下,kn func build
使用 Red Hat Source-to-Image (S2I) 技术创建一个容器镜像。
使用 Red Hat Source-to-Image (S2I) 的 build 命令示例.
$ kn func build
5.1.3.2. 镜像 registry 类型
OpenShift Container Registry 默认用作存储功能镜像的镜像 registry。
使用 OpenShift Container Registry 的 build 命令示例
$ kn func build
输出示例
Building function image Function image has been built, image: registry.redhat.io/example/example-function:latest
您可以使用 --registry
标志覆盖使用 OpenShift Container Registry 作为默认镜像 registry:
build 命令覆盖 OpenShift Container Registry 以使用 quay.io
$ kn func build --registry quay.io/username
输出示例
Building function image Function image has been built, image: quay.io/username/example-function:latest
5.1.3.3. push 标记
您可以将 --push
标志添加到 kn func build
命令中,以便在成功构建后自动推送功能镜像:
使用 OpenShift Container Registry 的 build 命令示例
$ kn func build --push
5.1.3.4. help 命令
您可以使用 help 命令了解更多有关 kn func build
命令选项的信息:
构建 help 命令
$ kn func help build
5.1.4. 部署功能
您可以使用 kn func deploy
命令将功能部署到集群中,作为 Knative 服务。如果已经部署了目标功能,则会使用推送到容器镜像 registry 的新容器镜像进行更新,并更新 Knative 服务。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您必须已创建并初始化要部署的功能。
流程
部署功能:
$ kn func deploy [-n <namespace> -p <path> -i <image>]
输出示例
Function deployed at: http://func.example.com
-
如果没有指定
namespace
,则该函数部署到当前命名空间中。 -
此函数从当前目录中部署,除非指定了
path
。 - Knative 服务名称派生自项目名称,无法使用此命令进行更改。
-
如果没有指定
您可以使用 Developer 视角的 +Add 视图中的 Import from Git 或 Create Serverless Function 使用 Git 存储库 URL 创建无服务器功能。
5.1.5. 列出现有功能
您可以使用 kn func list
列出现有功能。如果要列出部署为 Knative 服务的功能,也可以使用 kn service list
。
流程
列出现有功能:
$ kn func list [-n <namespace> -p <path>]
输出示例
NAME NAMESPACE RUNTIME URL READY example-function default node http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com True
列出部署为 Knative 服务的功能:
$ kn service list -n <namespace>
输出示例
NAME URL LATEST AGE CONDITIONS READY REASON example-function http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com example-function-gzl4c 16m 3 OK / 3 True
5.1.6. 描述函数
kn func info
命令输出有关已部署功能的信息,如功能名称、镜像、命名空间、Knative 服务信息、路由信息和事件订阅。
流程
描述函数:
$ kn func info [-f <format> -n <namespace> -p <path>]
示例命令
$ kn func info -p function/example-function
输出示例
Function name: example-function Function is built in image: docker.io/user/example-function:latest Function is deployed as Knative Service: example-function Function is deployed in namespace: default Routes: http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com
5.1.7. 使用测试事件调用部署的功能
您可以使用 kn func invoke
CLI 命令发送测试请求,在本地或 OpenShift Container Platform 集群中调用功能。您可以使用此命令测试功能是否正常工作并且能够正确接收事件。本地调用函数可用于在功能开发期间进行快速测试。在测试与生产环境更接近的测试时,在集群中调用函数非常有用。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您必须已部署了要调用的功能。
流程
调用函数:
$ kn func invoke
-
kn func invoke
命令仅在当前运行本地容器镜像时或在集群中部署功能时才有效。 -
kn func invoke
命令默认在本地目录上执行,并假定此目录是一个功能项目。
-
5.1.7.1. kn func 调用可选参数
您可以使用以下 kn func invoke
CL 命令标记为请求指定可选参数。
标记 | 描述 |
---|---|
|
指定调用函数的目标实例,如 |
|
指定消息的格式,如 |
| 指定请求的唯一字符串标识符。 |
| 指定集群上的命名空间。 |
|
指定请求的发件人名称。这与 CloudEvent |
|
指定请求类型,例如 |
|
指定请求的内容。对于 CloudEvent 请求,这是 CloudEvent |
| 指定包含要发送数据的本地文件的路径。 |
| 指定请求的 MIME 内容类型。 |
| 指定项目目录的路径。 |
| 启用系统提示,以交互方式确认所有选项。 |
| 启用打印详细输出。 |
|
输出有关使用 |
5.1.7.1.1. 主要参数
以下参数定义 kn func invoke
命令的主要属性:
- 事件目标 (
-t
,--target
) -
调用函数的目标实例。接受
local
值用于本地部署的函数、remote
值用于远程部署函数,或一个 URL 用于一个任意的端点。如果没有指定目标,则默认为local
。 - 事件消息格式 (
-f
,--format
) -
事件的消息格式,如
http
或cloudevent
。默认为创建函数时使用的模板格式。 - 事件类型 (
--type
) -
发送的事件类型。您可以查找有关各个事件制作者文档中设置的
type
参数的信息。例如,API 服务器源可能会将生成的事件的type
参数设置为dev.knative.apiserver.resource.update
。 - 事件源 (
--source
) -
生成该事件的唯一事件源。这可能是事件源的 URI,如
https://10.96.0.1/
或事件源的名称。 - 事件 ID (
--id
) - 由事件制作者创建的随机唯一 ID。
- 事件数据 (
--data
) 允许您为
kn func invoke
命令发送的事件指定data
值。例如,您可以指定一个--data
值,如"Hello World"
,以便事件包含此数据字符串。默认情况下,kn func invoke
创建的事件中不包含任何数据。注意已部署到集群的功能可以对现有事件源的事件响应,该源提供属性(如
source
和type
)的值。这些事件通常具有 JSON 格式的data
值,用于捕获事件的特定域上下文。通过使用本文档中介绍的 CLI 标志,开发人员可以模拟这些事件以进行本地测试。您还可以使用
--file
标志发送事件数据,以提供包含事件数据的本地文件。在这种情况下,使用--content-type
指定内容类型。- 数据内容类型 (
--content-type
) -
如果您使用
--data
标志为事件添加数据,您可以使用--content-type
标志指定事件传输的数据类型。在上例中,数据是纯文本,因此您可以指定kn func call --data "Hello world!" --content-type "text/plain
"。
5.1.7.1.2. 示例命令
这是 kn func invoke
命令的一般调用:
$ kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>
例如,要发送 "Hello world!" 事件,您可以运行:
$ kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
5.1.7.1.2.1. 使用数据指定文件
要指定磁盘上包含事件数据的文件,请使用 --file
和 --content-type
标志:
$ kn func invoke --file <path> --content-type <content-type>
例如,要发送存储在 test.json
文件中的 JSON 数据,请使用以下命令:
$ kn func invoke --file ./test.json --content-type application/json
5.1.7.1.2.2. 指定功能项目
您可以使用 --path
标志指定到功能项目的路径:
$ kn func invoke --path <path_to_function>
例如,要使用位于 ./example/example-function
目录中的功能项目,请使用以下命令:
$ kn func invoke --path ./example/example-function
5.1.7.1.2.3. 指定部署目标功能的位置
默认情况下,kn func invoke
作为功能本地部署的目标:
$ kn func invoke
要使用不同的部署,请使用 --target
标志:
$ kn func invoke --target <target>
例如,要使用在集群中部署的功能,请使用 --target remote
标志:
$ kn func invoke --target remote
要使用在任意 URL 中部署的功能,请使用 --target <URL>
标志:
$ kn func invoke --target "https://my-event-broker.example.com"
您可以明确以本地部署为目标。在这种情况下,如果这个功能没有在本地运行,命令会失败:
$ kn func invoke --target local
5.1.8. 删除函数
您可以使用 kn func delete
命令删除功能。当不再需要某个函数时,这很有用,并有助于在集群中保存资源。
流程
删除函数:
$ kn func delete [<function_name> -n <namespace> -p <path>]
-
如果没有指定要删除的功能的名称或路径,则会搜索当前目录以查找用于决定要删除的功能的
func.yaml
文件。 -
如果没有指定命名空间,则默认为
func.yaml
文件中的namespace
值。
-
如果没有指定要删除的功能的名称或路径,则会搜索当前目录以查找用于决定要删除的功能的