This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.7.5. 允许容器消耗 API 对象
Downward API 是一种允许容器消耗 API 对象的相关信息且不与 OpenShift Container Platform 耦合的机制。此类信息包括 pod 的名称、命名空间和资源值。容器可以使用环境变量或卷插件来消耗来自 Downward API 的信息。
7.5.1. 使用 Downward API 向容器公开 Pod 信息 复制链接链接已复制到粘贴板!
Downward API 包含 pod 的名称、项目和资源值等信息。容器可以使用环境变量或卷插件来消耗来自 Downward API 的信息。
pod 中的字段通过 FieldRef
API 类型来选择。FieldRef
有两个字段:
字段 | 描述 |
---|---|
| 要选择的字段的路径,这相对于 pod。 |
|
要在其中解释 |
目前,v1 API 中的有效选择器包括:
选择器 | 描述 |
---|---|
| pod 的名称。在环境变量和卷中均受支持。 |
| pod 的命名空间。在环境变量和卷中均受支持。 |
| pod 的标签。仅在卷中支持,环境变量中不支持。 |
| pod 的注解。仅在卷中支持,环境变量中不支持。 |
| pod 的 IP。仅在环境变量中支持,卷中不支持。 |
若未指定 apiVersion
字段,则默认为所属 pod 模板的 API 版本。
7.5.2. 了解如何通过 Downward API 消耗容器值 复制链接链接已复制到粘贴板!
容器可以使用环境变量或卷插件来消耗 API 值。根据您选择的方法,容器可以消耗:
- Pod 名称
- Pod 项目/命名空间
- Pod 注解
- Pod 标签
注解和标签只能通过卷插件来使用。
7.5.2.1. 使用环境变量消耗容器值 复制链接链接已复制到粘贴板!
在使用容器的环境变量时,请使用 EnvVar
类型的 valueFrom
字段(类型为 EnvVarSource
)来指定变量的值应来自 FieldRef
源,而非 value
字段指定的字面值。
只有 pod 常量属性可以这种方式消耗,因为一旦进程启动并且将变量值已更改的通知发送给进程,就无法更新环境变量。使用环境变量支持的字段包括:
- Pod 名称
- Pod 项目/命名空间
流程
创建一个新的 pod spec,其中包含您希望容器使用的环境变量:
创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
pod.yaml
文件创建 pod:oc create -f pod.yaml
$ oc create -f pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查容器的日志,以查看
MY_POD_NAME
和MY_POD_NAMESPACE
值:oc logs -p dapi-env-test-pod
$ oc logs -p dapi-env-test-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.2.2. 使用卷插件消耗容器值 复制链接链接已复制到粘贴板!
容器可以使用卷插件来消耗 API 值。
容器可以消耗:
- Pod 名称
- Pod 项目/命名空间
- Pod 注解
- Pod 标签
流程
使用卷插件:
创建一个新的 pod spec,其中包含您希望容器使用的环境变量:
创建一个类似如下的
volume-pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
volume-pod.yaml
文件创建 pod:oc create -f volume-pod.yaml
$ oc create -f volume-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查容器的日志,并验证配置的字段是否存在:
oc logs -p dapi-volume-test-pod
$ oc logs -p dapi-volume-test-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.3. 了解如何使用 Downward API 消耗容器资源 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以使用 Downward API 注入关于计算资源请求和限制的信息,以便镜像和应用程序作者能够正确地为特定环境创建镜像。
您可以使用环境变量或卷插件进行此操作。
7.5.3.1. 使用环境变量消耗容器资源 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以利用环境变量来使用 Downward API 注入有关计算资源请求和限制的信息。
在创建 pod 配置时,在 spec.container
字段中指定与 resources
字段的内容对应的环境变量。
如果容器配置中没有包含资源限制,Downward API 会默认使用节点的 CPU 和内存可分配量。
流程
创建一个新的 pod 规格,其中包含您要注入的资源:
创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
pod.yaml
文件创建 pod:oc create -f pod.yaml
$ oc create -f pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.3.2. 使用卷插件消耗容器资源 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以利用卷插件来使用 Downward API 注入有关计算资源请求和限制的信息。
在创建 pod 配置时,使用 spec.volumes.downwardAPI.items
字段来描述与 spec.resources
字段对应的所需资源:
如果容器配置中没有包含资源限制,Downward API 会默认使用节点的 CPU 和内存可分配量。
流程
创建一个新的 pod 规格,其中包含您要注入的资源:
创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
volume-pod.yaml
文件创建 pod:oc create -f volume-pod.yaml
$ oc create -f volume-pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.4. 使用 Downward API 消耗 secret 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以使用 Downward API 注入 Secret,以便镜像和应用程序作者能够为特定环境创建镜像。
流程
创建要注入的 secret:
创建一个类似如下的
secret.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
secret.yaml
文件创建 secret 对象:oc create -f secret.yaml
$ oc create -f secret.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建引用上述
Secret
对象中的username
字段的 pod:创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
pod.yaml
文件创建 pod:oc create -f pod.yaml
$ oc create -f pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查容器日志中的
MY_SECRET_USERNAME
值:oc logs -p dapi-env-test-pod
$ oc logs -p dapi-env-test-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.5. 使用 Downward API 消耗配置映射 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以使用 Downward API 注入配置映射值,以便镜像和应用程序作者能够为特定环境创建镜像。
流程
使用要注入的值创建配置映射:
创建类似如下的
configmap.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
configmap.yaml
文件创建配置映射:oc create -f configmap.yaml
$ oc create -f configmap.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建引用上述配置映射的 pod:
创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
pod.yaml
文件创建 pod:oc create -f pod.yaml
$ oc create -f pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查容器日志中的
MY_CONFIGMAP_VALUE
值:oc logs -p dapi-env-test-pod
$ oc logs -p dapi-env-test-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.6. 引用环境变量 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以使用 $()
语法引用之前定义的环境变量的值。如果无法解析环境变量引用,则该值将保留为提供的字符串。
流程
创建引用现有环境变量的 pod:
创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
pod.yaml
文件创建 pod:oc create -f pod.yaml
$ oc create -f pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查容器日志中的
MY_ENV_VAR_REF_ENV
值:oc logs -p dapi-env-test-pod
$ oc logs -p dapi-env-test-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.7. 转义环境变量引用 复制链接链接已复制到粘贴板!
在创建 pod 时,您可以使用双美元符号来转义环境变量引用。然后,其值将设为所提供值的单美元符号版本。
流程
创建引用现有环境变量的 pod:
创建类似以下示例的
pod.yaml
文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
pod.yaml
文件创建 pod:oc create -f pod.yaml
$ oc create -f pod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查容器日志中的
MY_NEW_ENV
值:oc logs -p dapi-env-test-pod
$ oc logs -p dapi-env-test-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow