×

使用 Knative CLI 创建函数

您可以将函数的路径、运行时、模板和镜像注册表指定为命令行标志,或者使用-c标志在终端启动交互式体验。

先决条件
  • 集群上已安装 OpenShift Serverless Operator 和 Knative Serving。

  • 您已安装 Knative (kn) CLI。

步骤
  • 创建一个函数项目

    $ kn func create -r <repository> -l <runtime> -t <template> <path>
    • 可接受的运行时值包括quarkusnodetypescriptgopythonspringbootrust

    • 可接受的模板值包括httpcloudevents

      示例命令
      $ 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标志强制在运行函数之前重新构建现有镜像,即使项目文件没有更改。

使用 build 标志的示例运行命令
$ kn func run --build

如果将build标志设置为false,则会禁用镜像的构建,并使用先前构建的镜像运行函数。

使用 build 标志的示例运行命令
$ 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) 技术创建容器镜像。

使用 Red Hat Source-to-Image (S2I) 的示例构建命令
$ kn func build

镜像注册表类型

默认情况下,OpenShift Container Registry 用作存储函数镜像的镜像注册表。

使用 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作为默认镜像注册表。

覆盖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

Push标志

您可以将--push标志添加到kn func build命令中,以便在成功构建函数镜像后自动推送它。

使用 OpenShift Container Registry 的示例构建命令
$ kn func build --push

帮助命令

您可以使用帮助命令来了解有关kn func build命令选项的更多信息。

构建帮助命令
$ kn func help build

部署函数

您可以使用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 可选参数

您可以使用以下kn func invoke CLI命令标志为请求指定可选参数。

标志 描述

-t, --target

指定被调用函数的目标实例,例如localremotehttps://staging.example.com/。默认目标是local

-f, --format

指定消息的格式,例如cloudeventhttp

--id

为请求指定唯一的字符串标识符。

-n, --namespace

指定集群上的命名空间。

--source

指定请求的发件人名称。这对应于CloudEvent的source属性。

--type

指定请求的类型,例如boson.fn。这对应于CloudEvent的type属性。

--data

指定请求的内容。对于CloudEvent请求,这是CloudEvent的data属性。

--file

指定包含要发送数据的本地文件的路径。

--content-type

指定请求的MIME内容类型。

-p, --path

指定项目目录的路径。

-c, --confirm

启用提示以交互方式确认所有选项。

-v, --verbose

启用打印详细输出。

-h, --help

打印有关kn func invoke用法的的信息。

主要参数

以下参数定义了kn func invoke命令的主要属性。

事件目标 (-t, --target)

被调用函数的目标实例。接受本地部署函数的local值,远程部署函数的remote值,或部署到任意端点的函数的URL。如果未指定目标,则默认为local

事件消息格式 (-f, --format)

事件的消息格式,例如httpcloudevent。这默认为创建函数时使用的模板的格式。

事件类型 (--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创建的事件不包含任何数据。

已部署到集群的函数可以响应来自现有事件源的事件,该事件源为sourcetype等属性提供值。这些事件通常具有JSON格式的data值,它捕获事件的特定于域的上下文。通过使用本文档中提到的CLI标志,开发人员可以模拟这些事件进行本地测试。

您还可以使用--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

删除函数

您可以使用kn func delete命令删除函数。当不再需要某个函数时,这很有用,可以帮助节省集群资源。

步骤
  • 删除函数

    $ kn func delete [<function_name> -n <namespace> -p <path>]
    • 如果未指定要删除的函数的名称或路径,则会搜索当前目录中的func.yaml文件,以确定要删除的函数。

    • 如果未指定命名空间,则默认为func.yaml文件中的namespace值。