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。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要添加的每个注解,将以下 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"
- 保存配置。
下次将功能部署到集群中时,注解会添加到对应的 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。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要挂载为卷的每个 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
-
将
- 保存配置。
12.2.5.2. 将配置映射挂载为卷
您可以将配置映射挂载为卷。挂载配置映射后,您可以作为常规文件从函数访问它。这可让您存储在功能所需的集群数据中,例如,函数需要访问的 URI 列表。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要挂载为卷的每个配置映射,请将以下 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
-
将
- 保存配置。
12.2.5.3. 从 secret 中定义的键值设置环境变量
您可以从定义为 secret 的键值设置环境变量。然后,之前存储在 secret 中的值可以被函数在运行时作为环境变量访问。这有助于获取存储在 secret 中的值,如用户的 ID。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要分配给环境变量的 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 }}'
-
将
- 保存配置。
12.2.5.4. 从配置映射中定义的键值设置环境变量
您可以从定义为配置映射的键值设置环境变量。然后,之前存储在配置映射中的值可以被函数在运行时作为环境变量访问。这对于获取配置映射中存储的值(如用户的 ID)非常有用。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要分配给环境变量的配置映射键值对中的每个值,请将以下 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 }}'
-
将
- 保存配置。
12.2.5.5. 从 secret 中定义的所有值设置环境变量
您可以从 secret 中定义的所有值设置环境变量。然后,之前存储在 secret 中的值可以被函数在运行时作为环境变量访问。这可用于同时访问存储在 secret 中的一组值,例如,一组与用户相关的数据。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要导入所有键值对作为环境变量的每个 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 }}'
- 保存配置。
12.2.5.6. 从配置映射中定义的所有值设置环境变量
您可以从配置映射中定义的所有值设置环境变量。然后,之前存储在配置映射中的值可以被函数在运行时作为环境变量访问。这可用于同时访问配置映射中存储的值集合,例如,一组与用户相关的数据。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个功能。
流程
-
为您的功能打开
func.yaml
文件。 对于您要导入所有键值对作为环境变量的每个配置映射,请将以下 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 }}'
- 保存该文件。