$ kn func create -r <repository> -l <runtime> -t <template> <path>
您可以将函数的路径、运行时、模板和镜像注册表指定为命令行标志,或者使用-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
您可以使用kn func run
命令在当前目录或由--path
标志指定的目录中本地运行函数。如果您正在运行的函数以前从未构建过,或者项目文件自上次构建以来已修改,则kn func run
命令默认会在运行之前构建函数。
$ kn func run
$ kn func run --path=<directory_path>
您还可以使用--build
标志强制在运行函数之前重新构建现有镜像,即使项目文件没有更改。
$ kn func run --build
如果将build
标志设置为false,则会禁用镜像的构建,并使用先前构建的镜像运行函数。
$ kn func run --build=false
您可以使用 help 命令了解有关kn func run
命令选项的更多信息。
$ kn func help run
在运行函数之前,必须构建函数项目。如果您使用的是kn func run
命令,则会自动构建函数。但是,您可以使用kn func build
命令构建函数而不运行它,这对于高级用户或调试场景很有用。
kn func build
命令创建一个OCI容器镜像,可以在本地计算机或OpenShift Container Platform集群上运行。此命令使用函数项目名称和镜像注册表名称来构建函数的完全限定镜像名称。
默认情况下,kn func build
使用 Red Hat Source-to-Image (S2I) 技术创建容器镜像。
$ kn func build
默认情况下,OpenShift Container Registry 用作存储函数镜像的镜像注册表。
$ kn func build
Building function image
Function image has been built, image: registry.redhat.io/example/example-function:latest
您可以使用--registry
标志覆盖使用OpenShift Container Registry作为默认镜像注册表。
$ kn func build --registry quay.io/username
Building function image
Function image has been built, image: quay.io/username/example-function:latest
您可以使用kn func deploy
命令将函数作为Knative服务部署到您的集群。如果目标函数已部署,则会使用已推送到容器镜像注册表的新的容器镜像更新它,并且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服务名称来自项目名称,不能使用此命令更改。
您可以使用**开发人员**透视图的**+添加**视图中的**从Git导入**或**创建无服务器函数**来使用Git存储库URL创建无服务器函数。 |
您可以使用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
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
您可以使用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
命令默认在本地目录上执行,并假设此目录是函数项目。
您可以使用以下kn func invoke
CLI命令标志为请求指定可选参数。
标志 | 描述 |
---|---|
|
指定被调用函数的目标实例,例如 |
|
指定消息的格式,例如 |
|
为请求指定唯一的字符串标识符。 |
|
指定集群上的命名空间。 |
|
指定请求的发件人名称。这对应于CloudEvent的 |
|
指定请求的类型,例如 |
|
指定请求的内容。对于CloudEvent请求,这是CloudEvent的 |
|
指定包含要发送数据的本地文件的路径。 |
|
指定请求的MIME内容类型。 |
|
指定项目目录的路径。 |
|
启用提示以交互方式确认所有选项。 |
|
启用打印详细输出。 |
|
打印有关 |
以下参数定义了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。
--data
)允许您为kn func invoke
命令发送的事件指定data
值。例如,您可以指定--data
值,例如"Hello World"
,以便事件包含此数据字符串。默认情况下,kn func invoke
创建的事件不包含任何数据。
已部署到集群的函数可以响应来自现有事件源的事件,该事件源为 |
您还可以使用--file
标志发送事件数据,以提供包含事件数据的本地文件。在这种情况下,请使用--content-type
指定内容类型。
--content-type
)如果您使用--data
标志为事件添加数据,则可以使用--content-type
标志指定事件携带的数据类型。在前面的示例中,数据是纯文本,因此您可以指定kn func invoke --data "Hello world!" --content-type "text/plain"
。
这是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
要指定包含事件数据的磁盘上的文件,请使用--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
您可以使用--path
标志指定函数项目的路径。
$ kn func invoke --path <path_to_function>
例如,要使用位于./example/example-function
目录中的函数项目,请使用此命令:
$ kn func invoke --path ./example/example-function
默认情况下,kn func invoke
的目标是函数的本地部署。
$ kn func invoke
要使用不同的部署,请使用--target
标志。
$ kn func invoke --target <target>
例如,要使用部署在集群上的函数,请使用--target remote
标志。
$ kn func invoke --target remote
要使用部署在任意URL上的函数,请使用--target
标志。
$ kn func invoke --target "https://my-event-broker.example.com"
您可以显式地指定本地部署。在这种情况下,如果函数未在本地运行,则命令将失败。
$ kn func invoke --target local