11.8. func.yaml 中的功能项目配置
func.yaml
文件包含功能项目的配置。执行 kn func
命令时使用 func.yaml
中指定的值。例如,当运行 kn func build
命令时,会使用 build
字段中的值。在某些情况下,您可以使用命令行标志或环境变量覆盖这些值。
11.8.1. func.yaml 中的可配置字段
在创建、构建和部署您的功能时,func.yaml
中的许多字段会自动生成。但是,您也可以手动修改以更改操作,如函数名称或镜像名称。
11.8.1.1. buildEnvs
buildEnvs
字段允许您设置环境变量,供构建您的功能的环境使用。与使用 envs
设置的变量不同,使用 buildEnv
的变量集合在函数运行时不可用。
您可以直接从值设置 buildEnv
变量。在以下示例中,名为 EXAMPLE1
的 buildEnv
变量被直接分配为 one
值:
buildEnvs: - name: EXAMPLE1 value: one
您还可以从本地环境变量设置 buildEnv
变量。在以下示例中,名为 EXAMPLE2
的 buildEnv
变量被分配了 LOCAL_ENV_VAR
本地环境变量的值:
buildEnvs: - name: EXAMPLE1 value: '{{ env:LOCAL_ENV_VAR }}'
11.8.1.2. envs
envs
字段允许您在运行时设置环境变量供您的功能使用。您可以通过几种不同方式设置环境变量:
- 直接来自一个值。
- 来自分配给本地环境变量的值)。如需更多信息,请参阅"引用来自 func.yaml 字段中的本地环境变量"。
- 从存储在 secret 或配置映射中的键值对。
- 您还可以导入存储在 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
11.8.1.3. builder
builder
字段指定函数用于构建镜像的策略。它接受 pack
或 s2i
的值。
11.8.1.4. build
build
字段指示如何构建函数。local
值表示该函数在您的机器上本地构建。git
值表示函数使用 git
字段中指定的值来在集群中构建。
11.8.1.5. 卷
volumes
字段允许您将 secret 和配置映射作为可在指定路径的函数访问的卷挂载,如下例所示:
name: test namespace: "" runtime: go ... volumes: - secret: mysecret 1 path: /workspace/secret - configMap: myconfigmap 2 path: /workspace/configmap
11.8.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
11.8.1.7. image
image
字段在构建后为您的功能设置镜像名称。您可以修改此字段。如果您这样做,在下次运行 kn func build
或 kn func deploy
时,功能镜像将使用新名称创建。
11.8.1.8. imageDigest
在部署函数时,imageDigest
字段包含镜像清单的 SHA256 哈希。不要修改这个值。
11.8.1.9. labels
labels
字段允许您在部署的功能中设置标签。
您可以直接从值设置标签。在以下示例中,带有 role
键的标签直接被分配了 backend
的值:
labels: - key: role value: backend
您还可以从本地环境变量设置标签。在以下示例中,为带有 author
键的标签分配 USER
本地环境变量的值:
labels: - key: author value: '{{ env:USER }}'
11.8.1.10. name
name
字段定义您的函数的名称。该值在部署时用作 Knative 服务的名称。您可以更改此字段来重命名后续部署中的函数。
11.8.1.11. namespace
namespace
字段指定部署您的功能的命名空间。
11.8.1.12. runtime
runtime
字段指定您的功能的语言运行时,如 python
。
11.8.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 }}' ...