首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Kubernetes镜像
Kubernetes容器环境
Kubernetes容器运行时类
Kubernetes容器生命周期回调
KubernetesPod 的生命周期
Kubernetes中的Init 容器
Kubernetes干扰(Disruptions)
Kubernetes临时容器
Kubernetes中的Downward API
Kubernetes中的Deployments
Kubernetes中的ReplicaSet
Kubernetes中的StatefulSet
Kubernetes中的DaemonSet
Kubernetes中的Job
Kubernetes中的Job 的自动清理
Kubernetes中的CronJob
Kubernetes中的ReplicationController
Kubernetes服务
Kubernetes拓扑感知的流量路由
Kubernetes中的Ingress
Kubernetes中的Ingress 控制器
Kubernetes中的Service连接到应用
Kubernetes中的EndpointSlice
Kubernetes网络策略
Kubernetes拓扑感知提示
Kubernetes中的Windows网络
Kubernetes服务内部流量策略
Kubernetes中的Service与Pod的DNS
Kubernetes中的IPv4/IPv6双协议栈
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(二)
小册名称:Kubernetes中文教程(二)
对于容器来说,在不与 Kubernetes 过度耦合的情况下,拥有关于自身的信息有时是很有用的。 **Downward API** 允许容器在不使用 Kubernetes 客户端或 API 服务器的情况下获得自己或集群的信息。 例如,现有应用程序假设某特定的周知的环境变量是存在的,其中包含唯一标识符。 一种方法是对应用程序进行封装,但这很繁琐且容易出错,并且违背了低耦合的目标。 更好的选择是使用 Pod 名称作为标识符,并将 Pod 名称注入到周知的环境变量中。 在 Kubernetes 中,有两种方法可以将 Pod 和容器字段暴露给运行中的容器: * 作为[环境变量] * 作为 [`downwardAPI` 卷中的文件] 这两种暴露 Pod 和容器字段的方式统称为 **Downward API**。 ## 可用字段 只有部分 Kubernetes API 字段可以通过 Downward API 使用。本节列出了你可以使用的字段。 你可以使用 `fieldRef` 传递来自可用的 Pod 级字段的信息。在 API 层面,一个 Pod 的 `spec` 总是定义了至少一个 [Container]。 你可以使用 `resourceFieldRef` 传递来自可用的 Container 级字段的信息。 ### 可通过 `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.podIP` : Pod 的主 IP 地址(通常是其 IPv4 地址) 以下信息可以通过 `downwardAPI` 卷 `fieldRef` 获得,但**不能作为环境变量**获得: `metadata.labels` : Pod 的所有标签,格式为 `标签键名="转义后的标签值"`,每行一个标签 `metadata.annotations` : Pod 的全部注解,格式为 `注解键名="转义后的注解值"`,每行一个注解 ### 可通过 `resourceFieldRef` 获得的信息 `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 级别的信息: * 作为[环境变量] * 作为 [`downwardAPI` 卷中的文件]
上一篇:
Kubernetes临时容器
下一篇:
Kubernetes中的Deployments
该分类下的相关小册推荐:
Kubernets合辑2-部署Ingress
Kubernets合辑14-日志收集
Kubernets合辑11-持续集成
Kubernets合辑9-资源约束
Kubernets合辑3-kubernetes介绍
Kubernets合辑8-权限控制
Kubernetes中文教程(一)
Kubernets合辑5-Pod控制器
Kubernets合辑4-kubernetes入门
Kubernets合辑15-持续部署
Kubernets合辑7-存储
Kubernets合辑13-集群监控