文章目录

  • 01 引言
  • 02 容器获取pod信息方式
    • 2.1 环境变量方式
      • 2.1.1 设置Pod信息为容器内的环境变量
      • 2.1.2 设置Container信息为容器内的环境变量
    • 2.2 volume挂载方式
      • 2.2.1 挂载Pod信息为容器内的文件
      • 2.2.2 挂载Containert信息为容器内的文件
  • 03 Downward API 总结
    • 3.1 支持设置的元数据
    • 3.2 在volume subPath中的应用
  • 04 文末

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)也需要使用PodContainer的元数据信息。

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

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

  1. 爬虫系列教程二:如何获取网页信息并定位信息所处位置

    在爬虫中如何获取并定位网页的信息 由于我们获取网页的类型的不同,我们希望爬取的信息的定位方法也有很大差别,但总体来说我们想要爬取的网页可以分为静态和动态,下面讲述在不同的情况下如何爬取这些信息: 网页 ...

  2. 小程序通过API获取位置信息 微信API 百度地图API

    博客简介 本篇博客介绍如何调用微信API获取经纬度,如何调用百度地图API获取实物位置 微信API获取经纬度信息 百度地图API获取实物位置 微信小程序获取经纬度 微信提供了获取当前设备经纬度的API ...

  3. 查询用户所有信息后只需要两个字段的信息_Excel VBA+ADO+SQL入门教程023:OpenSchema获取表信息...

    点上方关注我们,每日1练,每天进步一点点  1. 我们在使用SQL语言对数据库数据进行查询之前,有时需要获取每张表的表名,甚至获取每张表每个字段的名称等:比如,当我们进行跨工作簿数据查询及汇总时,在不 ...

  4. php通过api获取天气信息,调用API获取城市天气信息

    Code: /* 调用API获取指定城市的天气数据,并输出 */ echo ""; $url="http://m.weather.com.cn/data/10121010 ...

  5. 【kubernetes系列】Pod篇实战操作

    目录 一.命令终端 创建Pod 查看Pod 访问Pod中容器 进入Pod内部 删除Pod 配置文件yaml创建 二.Dashboard 创建Pod 创建多容器的Pod 进入容器 访问容器应用 一.命令 ...

  6. 深入kubernetes之Pod——一pod多容器

    六.深入Pod--一pod多容器 一pod多容器,可以说是kube精华所在,让多个同应用的单一容器可以整合到一个类虚拟机中,使其所有容器共用一个vm的资源,提高耦合度,神来之笔,从而方便副本的复制,提 ...

  7. uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...

    同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...

  8. 通过豆瓣Api,输入ISBN获取图书信息

    在本篇文章中,主要是通过豆瓣API实现获取图书信息的小功能. 一. 豆瓣API能干什么?   参考链接:[url]http://www.douban.com/service/ [/url] 豆瓣API ...

  9. js高德地图获取道路信息

    我通过高德api搜索道路信息发现没有权限,各种网上教程也都是几年前的了,也无法获取道路信息 然后我通过抓包发现了最新的获取道路信息的api https://www.amap.com/service/p ...

  10. 微信开发--获取用户信息中文乱码的解决方案

    为什么80%的码农都做不了架构师?>>>    在微信开发中我们会经常需要获取用户的信息. 微信给我们提供了获取用户信息的api, 地址为 https://api.weixin.qq ...

最新文章

  1. 2012 BI市场(一)
  2. DHCP和DNS的概念—Vecloud微云
  3. go语言中的闭包结构
  4. RPC实现Consumer 远程调用
  5. memset函数具体说明
  6. php.ini文件中的include_path设置
  7. (转)程序员的十层楼11层(上帝)
  8. git版本控制系统常用指令,Xmind笔记整理
  9. 头衔的权威暗示影响力
  10. PHPMailer如何获取企业微信授权码
  11. android字体和可免费商用的字体
  12. 通过lua脚本识别微信,支付宝,龙支付
  13. Android 微信授权登陆
  14. 按洲划分的国家和地区代码整理 包含:中文名 英文名 洲 首字母 两位英文代码 三位英文代码 三位数据代码 洲
  15. 为何数据分析师更容易获得高薪工作?
  16. RE:从零开始的算法之路第六章
  17. jasper 引入字体_MAC下JasperStudio创建及引用字体
  18. 安装 catboost 的正确方式
  19. 记录一次工作中的问题以及解决(POI对于Excel的数据导出覆盖问题)
  20. C#,茅塞顿开的精致好码,通用型科学计算器的源代码

热门文章

  1. Reasoning-RCNN 论文笔记
  2. Tomcat:The server encountered an internal error () that prevented it from fulfilling this request.
  3. sound函数及大调音阶播放
  4. Ubuntu下 百度在线语音合成使用
  5. 靠着这份“葵花宝典”,让我收到了6个大厂的offer(华为+字节+腾讯+京东+网易+滴滴)
  6. [读史思考] 魏王真的被张仪忽悠瘸了吗?
  7. Keras中verbose的作用
  8. arcgis server 无法识别字体原因
  9. java网易云信怎么用_网易云信 SDK
  10. 南京计算机类事业单位,南京市属事业单位公开招聘579人 3月25日起报名