k8s教程(pod篇)-容器获取pod信息(Downward API)

简介: k8s教程(pod篇)-容器获取pod信息(Downward API)

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

为了在容器内获取Pod级别的信息,Kubernetes提供了Downward API机制来将Pod和容器的某些元数据信息注入容器环境内,供容器应用方便地使用。

Downward API可以通过以下两种方式将Pod和容器的元数据信息注入容器内部:

  1. 环境变量:将Pod或Container信息设置为容器内的环境变量;
  2. Volume挂载:将Pod或Container信息以文件的形式挂载到容器内部。

本文来讲解这两种方式。

02 容器获取pod信息方式

2.1 环境变量方式

通过环境变量的方式可以将Pod信息或Container信息注入容器运行环境中,下面举两个例子。

2.1.1 设置Pod信息为容器内的环境变量

下面的例子 通过Downward API将Pod的 IP、名称和所在命名空间 注入容器的环境变量中,Pod的YAML文件内容如下:

yaml设置的环境变量有:

  • spec.nodeName:Pod所在Node的名称;
  • metadata.name:Pod名称;
  • metadata.namespace:Pod所在命名空间的名称;
  • status.podIP:Pod的IP地址;
  • spec.serviceAccountName:Pod使用的ServiceAccount名称。

使用命令创建pod之后,进入容器,可以看到环境变量的配置了:

2.1.2 设置Container信息为容器内的环境变量

下面的例子 通过Downward API将 Container的资源请求 和 资源限制信息 设置为容器内的环境变量,Pod的YAML文件内容如下:

环境变量如下:

  • requests.cpu:容器的CPU请求值;
  • limits.cpu:容器的CPU限制值;
  • requests.memory:容器的内存请求值;
  • limits.memory:容器的内存限制值。

查看日志,从日志中可以看到Containerrequests.cpu、limits.cpu 、 requests.memory、limits.memory等信息都被正确保存到了容器内的环境变量中:

2.2 volume挂载方式

通过Volume挂载方式可以 将Pod信息或Container信息 挂载为容器内的文件。

2.2.1 挂载Pod信息为容器内的文件

下面的例子 通过Downward API将Pod的Label、Annotation信息通过Volume 挂载为容器中的文件:

volumes字段中使用Downward API的方法,通过fieldRef字段设置需要引用Pod的元数据信息,将其设置到volumeitems中。Pod元数据信息如下:

  • metadata.labels:Pod的Labelz列表.
  • metadata.namannotations:Pod的Annotation列表.

然后,通过容器级别volumeMounts的设置,系统会基于volume中各item的 path名称生成文件

根据上面的设置,系统将在容器内的/etc/podinfo目录下生成 labelsannotations两个文件,在labels文件中将包含Pod的全部Label列表,在annotations文件中将包含Pod的全部Annotation列表

进入容器,查看挂载的文件:

查看labels的内容:

2.2.2 挂载Containert信息为容器内的文件

下面的例子通过Downward API将 Container的资源限制信息通过Volume挂载为容器中的文件

在本例中通过Downward API设置将以下Container的资源限制信息设置到
Volume中
,内容如下:

  • requests.cpu:容器的CPU请求值;
  • limits.cpu:容器的CPU限制值;
  • requests.memory:容器的内存请求值;
  • limits…nemory:容器的内存限制值。

进入容器,查看挂载文件:

查看cpu_limit内容:

03 Downward API 总结

3.1 支持设置的元数据

下面讲解 Downward API支持设置的Pod和Container信息

① 可以通过fieldRefi设置的元数据如下:

元数据 描述
metadata.name Pod名称
metadata.namespace Pod所在的命名空间名称
metadata.uid Pod的UID,从Kubernetes1.8.o-alpha.2版本开始支持
metadata.labels[‘<KEY>’] Pod某个Label的值,通过进行引用,从Kubernetes1.9版本开始支持;
metadata.annotations[‘<KEY>’] Pod某个Annotation的值,通过<KEY>进行引用,从Kubernetes1.9版本开始支持

② 可以通过resourceFieldRef设置的数据如下:

  • Container级别的CPU Limit;
  • Container级别的CPU Request;
  • Container级别的Memory Limit;
  • Container级别的Memory Request;
  • Container级别的临时存储空间(ephemeral-storage)Limit,从Kubernetes1.8.0-beta.o版本开始支持;
  • Container级别的临时存储空间(ephemeral-storage)Request,从Kubernetes1.8.0-beta.o版本开始支持。

③ 对以下信息通过fieldRef字段进行设置:

元数据 描述
metadata.labels Pod的Label2列表,每个Labeli都以key为文件名,value为文件内容,每个Label各占一行
metadata.namannotations Pod的Annotation列表,每个Annotation都以key为文件名,value为文件内容,每个Annotation各占一行

④ 以下Pod的元数据信息可以被设置为容器内的环境变量:

元数据 描述
status.podIP Pod的IP地址
spec.serviceAccountName Pod使用的ServiceAccount名称
spec.nodeName Pod所在Node的名称,从Kubernetes1.4.0-alpha.3版本开始支持
status.hostIP Pod所在Node的IP地址,从Kubernetes1.7.0-alpha.l版本开始支持

3.2 在volume subPath中的应用

有时容器内挂载目录的子路径(volumeMounts.subPath)也需要使用Pod Container的元数据信息。

Kubernetes从1.11版本开始支持通过Downward API对子路径的名称进行设置,引入了一个新的subPathExpr字段,到1.17版本达到Stable阶段。

用户可以将Pod或Container信息先使用Downward API设置到环境变量上,再通过subPathExpr将其设置为subPath的名称

通过Kubernetes提供的Downward API机制,只需经过一些简单配置容器内的应用就可以直接使用Pod和容器的某些元数据信息了。

04 文末

本文主要讲解Kubenetes使用Downward API的方式,使容器能通过环境变量及volume的方式来获取pod的信息,希望能帮助到大家,谢谢大家的阅读,本文完!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
836 11
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
Kubernetes 调度 异构计算
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
1148 30
|
数据采集 消息中间件 Kubernetes
容器化爬虫部署:基于K8s的任务调度与自动扩缩容设计
随着业务复杂度提升,传统定时任务和手工扩缩容难以满足高并发与实时性需求。本文对比两种基于 Kubernetes 的爬虫调度与扩缩容方案:CronJob+HPA 和 KEDA。从调度灵活性、扩缩容粒度、实现难度等维度分析,并提供 YAML+Python 示例。方案 A(CronJob+HPA)适合固定定时任务,配置简单;方案 B(KEDA)支持事件驱动,适合高并发与异步触发场景。根据实际需求可混合使用,优化资源利用与效率。
531 4
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
4458 11
|
应用服务中间件 调度 nginx
Kubernetes-项目中pod调度使用法则
前言kubernetes中部署的pod默认根据资源使用情况自动调度到某个节点。可在实际项目的使用场景中都会有更细粒度的调度需求,比如:某些pod调度到指定主机、某几个相关的服务的pod最好调度到一个节点上、Master节点不允许某些pod调度等。
2307 0
|
Kubernetes 应用服务中间件 调度
Kubernetes之Pod调度
Kubernetes调度器根据特定的算法与策略将pod调度到工作节点上。在默认情况下,Kubernetes调度器可以满足绝大多数需求,例如调度pod到资源充足的节点上运行,或调度pod分散到不同节点使集群节点资源均衡等。
1680 0

热门文章

最新文章

推荐镜像

更多