12.2. 使用 func.yaml 文件配置功能项目

func.yaml 文件包含功能项目的配置。执行 kn func 命令时使用 func.yaml 中指定的值。例如,当运行 kn func build 命令时,会使用 build 字段中的值。在某些情况下,您可以使用命令行标志或环境变量覆盖这些值。

12.2.1. 从 func.yaml 字段引用本地环境变量

如果要避免在功能配置中存储敏感信息,如 API 密钥,您可以添加对本地环境中可用的环境变量的引用。您可以通过修改 func.yaml 文件中的 envs 字段来完成此操作。

先决条件

  • 您需要创建 function 项目。
  • 本地环境需要包含您要引用的变量。

流程

  • 要引用本地环境变量,请使用以下语法:

    {{ env:ENV_VAR }}

    ENV_VAR 替换为您要用于本地环境中的变量名称。

    例如,您可能在本地环境中提供 API_KEY 变量。您可以将其值分配给 MY_API_KEY 变量,然后您可以在功能内直接使用该变量:

    功能示例

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: MY_API_KEY
      value: '{{ env:API_KEY }}'
    ...

12.2.2. 在功能中添加注解

您可以将 Kubernetes 注解添加到部署的 Serverless 功能中。注解可让您将任意元数据附加到函数,例如,关于功能目的的备注。注解添加到 func.yaml 配置文件的 annotations 部分。

功能注解功能有两个限制:

  • 当功能注解传播到集群中的对应 Knative 服务后,无法通过从 func.yaml 文件中删除该服务来将其从服务中删除。您必须通过直接修改服务的 YAML 文件或使用 OpenShift Container Platform Web 控制台从 Knative 服务中删除注解。
  • 您无法设置 Knative 设置的注解,例如 autoscaling 注解。

12.2.3. 在功能中添加注解

您可以在功能中添加注解。与标签类似,注解被定义为键值映射。例如,注解可用于提供与功能相关的元数据,如函数的作者。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要添加的每个注解,将以下 YAML 添加到 annotations 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    annotations:
      <annotation_name>: "<annotation_value>" 1
    1
    <annotation_name>: "<annotation_value>" 替换为您的注解。

    例如,要指明某个函数由 Alice 编写,您可以包含以下注解:

    name: test
    namespace: ""
    runtime: go
    ...
    annotations:
      author: "alice@example.com"
  3. 保存配置。

下次将功能部署到集群中时,注解会添加到对应的 Knative 服务中。

12.2.4. 其他资源

12.2.5. 手动添加对 secret 和配置映射的功能访问

您可以将用于访问 secret 和配置映射的配置手动添加到您的功能中。这可能最好使用 kn func config 交互式实用程序和命令,例如您已有配置片段时。

12.2.5.1. 将 secret 挂载为卷

您可以将 secret 挂载为卷。挂载 secret 后,您可以作为常规文件从函数访问它。这可让您存储在功能所需的集群数据中,例如,函数需要访问的 URI 列表。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要挂载为卷的每个 secret,将以下 YAML 添加到 volumes 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - secret: mysecret
      path: /workspace/secret
    • mysecret 替换为目标 secret 的名称。
    • /workspace/secret 替换为您要挂载 secret 的路径。

      例如,要挂载 addresses secret,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/secret-addresses
  3. 保存配置。

12.2.5.2. 将配置映射挂载为卷

您可以将配置映射挂载为卷。挂载配置映射后,您可以作为常规文件从函数访问它。这可让您存储在功能所需的集群数据中,例如,函数需要访问的 URI 列表。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要挂载为卷的每个配置映射,请将以下 YAML 添加到 volumes 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    volumes:
    - configMap: myconfigmap
      path: /workspace/configmap
    • myconfigmap 替换为目标配置映射的名称。
    • 使用您要挂载配置映射的路径替换 /workspace/configmap

      例如,要挂载 addresses 配置映射,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      volumes:
      - configMap: addresses
        path: /workspace/configmap-addresses
  3. 保存配置。

12.2.5.3. 从 secret 中定义的键值设置环境变量

您可以从定义为 secret 的键值设置环境变量。然后,之前存储在 secret 中的值可以被函数在运行时作为环境变量访问。这有助于获取存储在 secret 中的值,如用户的 ID。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要分配给环境变量的 secret 键值对的每个值,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ secret:mysecret:key }}'
    • EXAMPLE 替换为环境变量的名称。
    • mysecret 替换为目标 secret 的名称。
    • 使用映射到目标值的键替换 key

      例如,要访问存储在 userdetailssecret 中的用户 ID,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailssecret:userid }}'
  3. 保存配置。

12.2.5.4. 从配置映射中定义的键值设置环境变量

您可以从定义为配置映射的键值设置环境变量。然后,之前存储在配置映射中的值可以被函数在运行时作为环境变量访问。这对于获取配置映射中存储的值(如用户的 ID)非常有用。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要分配给环境变量的配置映射键值对中的每个值,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: EXAMPLE
      value: '{{ configMap:myconfigmap:key }}'
    • EXAMPLE 替换为环境变量的名称。
    • myconfigmap 替换为目标配置映射的名称。
    • 使用映射到目标值的键替换 key

      例如,要访问存储在 userdetailsmap 中的用户 ID,请使用以下 YAML:

      name: test
      namespace: ""
      runtime: go
      ...
      envs:
      - value: '{{ configMap:userdetailsmap:userid }}'
  3. 保存配置。

12.2.5.5. 从 secret 中定义的所有值设置环境变量

您可以从 secret 中定义的所有值设置环境变量。然后,之前存储在 secret 中的值可以被函数在运行时作为环境变量访问。这可用于同时访问存储在 secret 中的一组值,例如,一组与用户相关的数据。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要导入所有键值对作为环境变量的每个 secret,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ secret:mysecret }}' 1
    1
    mysecret 替换为目标 secret 的名称。

    例如,要访问存储在 userdetailssecret 中的所有用户数据,请使用以下 YAML:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailssecret }}'
  3. 保存配置。

12.2.5.6. 从配置映射中定义的所有值设置环境变量

您可以从配置映射中定义的所有值设置环境变量。然后,之前存储在配置映射中的值可以被函数在运行时作为环境变量访问。这可用于同时访问配置映射中存储的值集合,例如,一组与用户相关的数据。

先决条件

  • 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
  • 已安装 Knative (kn) CLI。
  • 您已创建了一个功能。

流程

  1. 为您的功能打开 func.yaml 文件。
  2. 对于您要导入所有键值对作为环境变量的每个配置映射,请将以下 YAML 添加到 envs 部分:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:myconfigmap }}' 1
    1
    myconfigmap 替换为目标配置映射的名称。

    例如,要访问存储在 userdetailsmap 中的所有用户数据,请使用以下 YAML:

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - value: '{{ configMap:userdetailsmap }}'
  3. 保存该文件。