6.9. func.yaml 中的功能项目配置

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

6.9.1. func.yaml 中的可配置字段

在创建、构建和部署您的功能时,func.yaml 中的许多字段会自动生成。但是,您也可以手动修改以更改操作,如函数名称或镜像名称。

6.9.1.1. buildEnvs

buildEnvs 字段允许您设置环境变量,供构建您的功能的环境使用。与使用 envs 设置的变量不同,使用 buildEnv 的变量集合在函数运行时不可用。

您可以直接从值设置 buildEnv 变量。在以下示例中,名为 EXAMPLE1buildEnv 变量被直接分配为 one 值:

buildEnvs:
- name: EXAMPLE1
  value: one

您还可以从本地环境变量设置 buildEnv 变量。在以下示例中,名为 EXAMPLE2buildEnv 变量被分配了 LOCAL_ENV_VAR 本地环境变量的值:

buildEnvs:
- name: EXAMPLE1
  value: '{{ env:LOCAL_ENV_VAR }}'

6.9.1.2. envs

envs 字段允许您在运行时设置环境变量供您的功能使用。您可以通过几种不同方式设置环境变量:

  1. 直接来自一个值。
  2. 来自分配给本地环境变量的值)。如需更多信息,请参阅"引用来自 func.yaml 字段中的本地环境变量"。
  3. 从存储在 secret 或配置映射中的键值对。
  4. 您还可以导入存储在 secret 或配置映射中的所有键值对,其键用作所创建的环境变量的名称。

这个示例演示了设置环境变量的不同方法:

name: test
namespace: ""
runtime: go
...
envs:
- name: EXAMPLE1 1
  value: value
- name: EXAMPLE2 2
  value: '{{ env:LOCAL_ENV_VALUE }}'
- name: EXAMPLE3 3
  value: '{{ secret:mysecret:key }}'
- name: EXAMPLE4 4
  value: '{{ configMap:myconfigmap:key }}'
- value: '{{ secret:mysecret2 }}' 5
- value: '{{ configMap:myconfigmap2 }}' 6
1
直接从值设置的环境变量。
2
从分配给本地环境变量的值设置的环境变量。
3
从存储在 secret 中的键值对分配的环境变量。
4
从配置映射中存储的键值对分配的环境变量。
5
从 secret 的键值对导入的一组环境变量。
6
从配置映射的键值对导入的一组环境变量。

6.9.1.3. builder

builder 字段指定函数用于构建镜像的策略。它接受 packs2i 的值。

6.9.1.4. build

build 字段指示如何构建函数。local 值表示该函数在您的机器上本地构建。git 值表示函数使用 git 字段中指定的值来在集群中构建。

6.9.1.5. 卷

volumes 字段允许您将 secret 和配置映射作为可在指定路径的函数访问的卷挂载,如下例所示:

name: test
namespace: ""
runtime: go
...
volumes:
- secret: mysecret 1
  path: /workspace/secret
- configMap: myconfigmap 2
  path: /workspace/configmap
1
mysecret secret 作为驻留于 /workspace/secret 的卷挂载。
2
myconfigmap 配置映射作为驻留于 /workspace/configmap 的卷挂载。

6.9.1.6. 选项

options 字段允许您修改部署的功能的 Knative Service 属性,如自动扩展。如果未设置这些选项,则使用默认的选项。

这些选项可用:

  • scale

    • min:最小副本数。必须是一个非负的整数。默认值为 0。
    • max :最大副本数。必须是一个非负的整数。默认值为 0,这代表没有限制。
    • metric :定义 Autoscaler 监视哪一指标类型。它可以被设置为 concurrency(默认),或 rps
    • target:建议根据同时传入的请求数量,何时向上扩展。target 选项可以是大于 0.01 的浮点值。除非设置了 options.resources.limits.concurrency,否则默认为 100,在这种情况下,目标默认为其值。
    • utilization:向上扩展前允许的并发请求利用率百分比.它可以是 1 到 100 之间的一个浮点值。默认值为 70。
  • 资源

    • requests

      • cpu:具有部署功能的容器的 CPU 资源请求。
      • memory:具有部署功能的容器的内存资源请求。
    • limits

      • cpu:具有部署功能的容器的 CPU 资源限值。
      • memory:具有部署功能的容器的内存资源限制。
      • concurrency:单个副本处理的并发请求的硬限制。它可以是大于或等于 0 的整数值,默认为 0 - 表示无限制。

这是 scale 选项配置示例:

name: test
namespace: ""
runtime: go
...
options:
  scale:
    min: 0
    max: 10
    metric: concurrency
    target: 75
    utilization: 75
  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      cpu: 1000m
      memory: 256Mi
      concurrency: 100

6.9.1.7. image

image 字段在构建后为您的功能设置镜像名称。您可以修改此字段。如果您这样做,在下次运行 kn func buildkn func deploy 时,功能镜像将使用新名称创建。

6.9.1.8. imageDigest

在部署函数时,imageDigest 字段包含镜像清单的 SHA256 哈希。不要修改这个值。

6.9.1.9. labels

labels 字段允许您在部署的功能中设置标签。

您可以直接从值设置标签。在以下示例中,带有 role 键的标签直接被分配了 backend 的值:

labels:
- key: role
  value: backend

您还可以从本地环境变量设置标签。在以下示例中,为带有 author 键的标签分配 USER 本地环境变量的值:

labels:
- key: author
  value: '{{ env:USER }}'

6.9.1.10. name

name 字段定义您的函数的名称。该值在部署时用作 Knative 服务的名称。您可以更改此字段来重命名后续部署中的函数。

6.9.1.11. namespace

namespace 字段指定部署您的功能的命名空间。

6.9.1.12. runtime

runtime 字段指定您的功能的语言运行时,如 python

6.9.2. 从 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 }}'
    ...

6.9.3. 其他资源