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 和内存等资源的请求和限制信息。
注意
Kubernetes v1.33 [beta]
(默认启用:true)容器的 CPU 和内存资源可以在容器运行时调整大小。如果发生这种情况,Downward API 卷将更新,但环境变量不会更新,除非容器重新启动。有关更多详细信息,请参阅调整分配给容器的 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 级信息