Downward API

有两种方法可以将 Pod 和容器字段暴露给正在运行的容器:环境变量,以及通过特殊卷类型填充的文件。这两种暴露 Pod 和容器字段的方式合称为 Downward API。

有时,容器需要了解自身信息,而又不想过度耦合 Kubernetes。Downward API 允许容器使用关于自身或集群的信息,而无需使用 Kubernetes 客户端或 API 服务器。

一个例子是,现有应用程序假定某个知名的环境变量包含一个唯一标识符。一种可能性是封装应用程序,但这既繁琐又容易出错,并且违反了低耦合的目标。更好的选择是使用 Pod 的名称作为标识符,并将 Pod 的名称注入到知名的环境变量中。

在 Kubernetes 中,有两种方法可以将 Pod 和容器字段暴露给正在运行的容器:

这两种暴露 Pod 和容器字段的方式合称为 **Downward API**。

可用字段

Downward API 只能暴露部分 Kubernetes API 字段。本节列出了你可以暴露的字段。

你可以使用 `fieldRef` 传递可用 Pod 级别字段的信息。在 API 层面,Pod 的 `spec` 总是至少定义一个 容器。你可以使用 `resourceFieldRef` 传递可用容器级别字段的信息。

通过 `fieldRef` 可用的信息

对于某些 Pod 级别的字段,你可以将其作为环境变量提供给容器,或使用 `downwardAPI` 卷。通过这两种机制可用的字段是:

metadata.name
Pod 的名称
metadata.namespace
Pod 的命名空间
metadata.uid
Pod 的唯一 ID
metadata.annotations['<KEY>']
Pod 的名为 `<KEY>` 的注解的值(例如,`metadata.annotations['myannotation']`)
metadata.labels['<KEY>']
Pod 的名为 `<KEY>` 的标签的文本值(例如,`metadata.labels['mylabel']`)

以下信息通过环境变量可用,**但不能作为 downwardAPI 卷的 `fieldRef`**

spec.serviceAccountName
Pod 的服务账户的名称
spec.nodeName
Pod 正在执行的节点的名称
status.hostIP
分配给 Pod 的节点的主 IP 地址
status.hostIPs
`status.hostIP` 的双栈版本,第一个 IP 总是与 `status.hostIP` 相同。
status.podIP
Pod 的主 IP 地址(通常是其 IPv4 地址)
status.podIPs
`status.podIP` 的双栈版本,第一个 IP 总是与 `status.podIP` 相同

以下信息通过 `downwardAPI` 卷的 `fieldRef` 可用,**但不能作为环境变量**

metadata.labels
Pod 的所有标签,格式为 `label-key="escaped-label-value"`,每行一个标签
metadata.annotations
Pod 的所有注解,格式为 `annotation-key="escaped-annotation-value"`,每行一个注解

通过 `resourceFieldRef` 可用的信息

这些容器级字段允许你提供有关 CPU 和内存等资源的请求和限制信息。

resource: limits.cpu
容器的 CPU 限制
resource: requests.cpu
容器的 CPU 请求
resource: limits.memory
容器的内存限制
resource: requests.memory
容器的内存请求
resource: limits.hugepages-*
容器的巨页限制
resource: requests.hugepages-*
容器的巨页请求
resource: limits.ephemeral-storage
容器的临时存储限制
resource: requests.ephemeral-storage
容器的临时存储请求

资源限制的备用信息

如果未为容器指定 CPU 和内存限制,并且你使用 Downward API 尝试暴露该信息,则 kubelet 默认基于节点可分配计算暴露 CPU 和内存的最大可分配值。

下一步

你可以阅读有关`downwardAPI` 卷的信息。

你可以尝试使用 Downward API 暴露容器级或 Pod 级信息

上次修改时间:2025 年 4 月 7 日上午 9:46 (PST):更新 v1.33 beta 的 InPlacePodVerticalScaling 文档 (#50290) (c014f72fbb)