6.3. On-cluster 功能构建和部署

您可以直接在集群中构建功能,而不是在本地构建功能。在本地开发机器上使用此工作流时,您只需要使用功能源代码。例如,当您无法在集群功能构建工具(如 docker 或 podman)安装时,这非常有用。

6.3.1. 在集群中构建和部署功能

您可以使用 Knative (kn) CLI 启动功能项目构建,然后直接将功能部署到集群中。若要以这种方式构建功能项目,您的功能项目的源代码必须存在于可供集群访问的 Git 存储库分支中。

先决条件

  • 在集群中必须安装 Red Hat OpenShift Pipelines。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 Knative (kn) CLI。

流程

  1. 在您要运行 Pipelines 和部署功能的每个命名空间中,您必须创建以下资源:

    1. 创建 s2i Tekton 任务,以便在管道中使用 Source-to-Image:

      $ oc apply -f https://raw.githubusercontent.com/openshift-knative/kn-plugin-func/serverless-1.28.0/pipelines/resources/tekton/task/func-s2i/0.1/func-s2i.yaml
    2. 创建 kn func 部署 Tekton 任务,以便在管道中部署该功能:

      $ oc apply -f https://raw.githubusercontent.com/openshift-knative/kn-plugin-func/serverless-1.28.0/pipelines/resources/tekton/task/func-deploy/0.1/func-deploy.yaml
  2. 创建功能:

    $ kn func create <function_name> -l <runtime>
  3. 在创建了新的功能项目后,您必须将项目添加到 Git 存储库,并确保该存储库可供集群使用。关于此 Git 存储库的信息用于在下一步中更新 func.yaml 文件。
  4. 更新功能项目的 func.yaml 文件中的配置,以便为 Git 仓库启用 on-cluster 构建:

    ...
    git:
      url: <git_repository_url> 1
      revision: main 2
      contextDir: <directory_path> 3
    ...
    1
    必需。指定包含功能源代码的 Git 存储库。
    2
    可选。指定要使用的 Git 存储库修订。这可以是分支、标签或提交。
    3
    可选。如果函数没有位于 Git 存储库根文件夹中,请指定函数的目录的路径。
  5. 实施您功能的业务逻辑。然后,使用 Git 提交并推送更改。
  6. 部署功能:

    $ kn func deploy --remote

    如果您没有登录到功能配置中引用的容器 registry,系统会提示您为托管功能镜像的远程容器 registry 提供凭证:

    输出和提示示例

    🕕 Creating Pipeline resources
    Please provide credentials for image registry used by Pipeline.
    ? Server: https://index.docker.io/v1/
    ? Username: my-repo
    ? Password: ********
       Function deployed at URL: http://test-function.default.svc.cluster.local

  7. 要更新您的功能,使用 Git 提交并推送新的更改,然后再次运行 kn func deploy --remote 命令。

6.3.2. 指定功能修订

在集群中构建和部署功能时,您必须通过指定存储库中的 Git 存储库、分支和子目录来指定功能代码的位置。如果使用 main 分支,则不需要指定分支。同样,如果功能位于存储库的根目录,则不需要指定子目录。您可以在 func.yaml 配置文件中指定这些参数,或使用带有 kn func deploy 命令的标志。

先决条件

  • 在集群中必须安装 Red Hat OpenShift Pipelines。
  • 已安装 OpenShift (oc) CLI。
  • 已安装 Knative (kn) CLI。

流程

  • 部署功能:

    $ kn func deploy --remote \ 1
                     --git-url <repo-url> \ 2
                     [--git-branch <branch>] \ 3
                     [--git-dir <function-dir>] 4
    1
    使用 --remote 标志时,构建远程运行。
    2
    <repo-url> 替换为 Git 存储库的 URL。
    3
    <branch> 替换为 Git 分支、标签或提交。如果使用 main 分支的最新提交,您可以跳过此标志。
    4
    如果 <function-dir> 与存储库根目录不同,请将 <function-dir> 替换为包含该函数的目录。

    例如:

    $ kn func deploy --remote \
                     --git-url https://example.com/alice/myfunc.git \
                     --git-branch my-feature \
                     --git-dir functions/example-func/