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的信息,希望能帮助到大家,谢谢大家的阅读,本文完!

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
9天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
2天前
|
机器学习/深度学习 人工智能 Serverless
|
10天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。
|
11天前
|
存储 人工智能 安全
如何调用 DeepSeek-R1 API ?图文教程
首先登录 DeepSeek 开放平台,创建并保存 API Key。接着,在 Apifox 中设置环境变量,导入 DeepSeek 提供的 cURL 并配置 Authorization 为 `Bearer {{API_KEY}}`。通过切换至正式环境发送请求,可实现对话功能,支持流式或整体输出。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
27天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
113 23
|
9天前
|
JSON API UED
商品信息API接口的设计与实现
商品信息API接口的设计与实现,遵循RESTful原则以确保高效、可维护和良好的用户体验。API支持获取、查询、创建、更新和删除商品资源,URL模式直观易懂。请求参数通过查询字符串传递,支持分页和过滤。响应体结构化,包含数据、链接和元数据字段,便于解析。错误处理采用HTTP状态码结合JSON错误描述,提供明确反馈。
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
供应链 API 开发者
解锁电商数据的无限可能:探秘京东商品SKU信息API接口
京东商品SKU信息API接口是电商开发与运营中的重要工具,帮助开发者获取商品的详细属性,如库存、价格、规格等。通过该接口,电商平台可以丰富商品展示页面,提升用户体验;商家能实时掌握库存动态,优化销售策略;数据分析人员可深入洞察市场趋势,实现精准营销。使用前需注册京东开放平台账号、创建应用并获取API权限,同时仔细阅读API文档以确保正确调用。代码示例展示了如何用Python调用该接口,并处理返回数据。未来,该接口将在个性化推荐、智能库存管理和数据分析等领域发挥更大作用,助力电商业务创新与发展。
93 14
|
1月前
|
JSON 监控 API
获取1688商品SKU信息API接口及实战应用
在电商蓬勃发展的今天,数据成为宝贵的财富。1688作为国内知名批发采购平台,提供商品SKU信息API接口,可获取库存、价格、规格等关键数据,助力电商运营、市场分析和价格监控。本文介绍如何注册1688开放平台账号、创建应用并获取AppKey/AppSecret,申请API权限,使用Python实现接口调用,处理响应数据,并注意请求频率限制和错误处理。通过该接口,可为电商运营和数据分析提供有力支持。
70 2

热门文章

最新文章