3.12 访问Pod元数据

2024-05-16 06:48
文章标签 数据 访问 pod 3.12

本文主要是介绍3.12 访问Pod元数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、通过环境变量形式传递元数据
  • 二、通过Downward API传递元数据
  • 三、Downward API比环境变量优势

在 ConfigMap和 Secret章节中可知,可以通过ConfigMap和Secret向应用中传递Pod创建前可预先知道的数据,但不能传递Pod创建后未知的一些元数据,比如pod的名字,pod的ip,因为这些信息都是pod创建后才会知道,在创建pod时不可以通过ConfigMap和Secret传递数据,可以通过下列方式传递pod的一些元数据信息:环境变量和Downward API。
Pod中可传递的元数据包括如下数据:

  • pod的名称
  • pod的IP
  • pod所在的命名空间
  • pod运行节点的名称
  • pod运行所归属的服务账户的名称
  • 每个容器请求的CPU和内存的使用量
  • 每个容器可以使用的CPU和内存的限制
  • pod的标签
  • pod的注解

一、通过环境变量形式传递元数据

可以通过环境变量方式把pod和容器的一些元数据信息传递到pod中的容器,在下面资源清单中通过环境变量形式向容器中传递元数据。

apiVersion: v1
kind: Pod
metadata:name: pod-env
spec:containers:- name: busyboximage: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]resources:requests:cpu: 30mmemory: 1Milimits:cpu: 100mmemory: 5Mienv:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: SERVICE_ACCOUNTvalueFrom:fieldRef:fieldPath: spec.serviceAccountName- name: REQUEST_CPUvalueFrom:resourceFieldRef:resource: requests.cpudivisor: 1m- name: REQUEST_MEMORYvalueFrom:resourceFieldRef:resource: requests.memorydivisor: 1Mi- name: CPUT_LIMITvalueFrom:resourceFieldRef:resource: limits.cpudivisor: 1m- name: MEMORY_LIMITvalueFrom:resourceFieldRef:resource: limits.memorydivisor: 1Mi

其中,1m表示1 millicore,即千分之一内核,30m表示千分之30内核;1Mi表示1兆

 requests:cpu: 30mmemory: 1Mi

通过上面创建pod后,进入pod中容器可以查看传入的元数据信息,如下所示

[root@k8s-master01 downward]# kubectl exec pod-env env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=pod-env
MEMORY_LIMIT=5
POD_IP=10.244.2.189
NODE_NAME=k8s-node02
REQUEST_MEMORY=1
REQUEST_CPU=30
CPUT_LIMIT=100
POD_NAME=pod-env
POD_NAMESPACE=default
SERVICE_ACCOUNT=default
MYSERVICE_PORT_8080_TCP_PORT=8080
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT_443_TCP_PORT=443
MYSERVICE_SERVICE_HOST=10.106.129.199
MYSERVICE_SERVICE_PORT=8080
MYSERVICE_PORT_8080_TCP=tcp://10.106.129.199:8080
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_PORT_443_TCP_PROTO=tcp
MYSERVICE_SERVICE_PORT_HTTP=8080
MYSERVICE_PORT_8080_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
MYSERVICE_PORT=tcp://10.106.129.199:8080
MYSERVICE_PORT_8080_TCP_ADDR=10.106.129.199
HOME=/root

二、通过Downward API传递元数据

上述方式是通过环境变量形式把元数据传递到容器中,也可以通过文件卷的方式把元数据传递到容器中,即本节讲的Down可以ward API方式,把Downward API卷挂载到容器中。Downward API可以给Pod中运行的容器暴露pod的元数据,如下所示

apiVersion: v1
kind: Pod
metadata:name: mydownwardlabels:prod: devannotations:description: this is description for downwarddate: 2020-10-18
spec:containers:- name: busyboximage: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]resources:requests:cpu: 30m memory: 1Mi limits:cpu: 100mmemory: 5Mi volumeMounts:- name: downwardmountPath: /etc/downwardvolumes:- name: downwarddownwardAPI:items:- path: podNamefieldRef:fieldPath: metadata.name- path: podNamespacefieldRef:fieldPath: metadata.namespace- path: labelsfieldRef:fieldPath: metadata.labels- path: annotationsfieldRef:fieldPath: metadata.annotations- path: requst-cpuresourceFieldRef:containerName: busyboxresource: requests.cpudivisor: 1m- path: limits-memoryresourceFieldRef:containerName: busyboxresource: limits.memorydivisor: 1Mi

通过上述资源清单创建pod后,可以进入容器内部查看downward API挂在卷,发现annotations、labels等对象已经挂载到了容器中。

[root@k8s-master01 downward]# kubectl exec mydownward -it -- /bin/sh
/ # cd /etc/
/etc # ls
downward     group        hostname     hosts        localtime    mtab         network      passwd       resolv.conf  shadow
/etc # cd downward
/etc/downward # ls
annotations    labels         limits-memory  podName        podNamespace   requst-cpu

三、Downward API比环境变量优势

1、环境变量方式不可以暴露labels和annotations两种元数据,而Downward API可以;
2、运行的pod修改标签和注解后,Downward API可以更新挂载卷中内容,获取最新修改的元数据,而环境变量的方式,标签和注解修改后,无法把新修改的值暴露到容器内部,所以环境变量方式不能传递标签和注解两种元数据。


  • 参考《kubenetes in action》

这篇关于3.12 访问Pod元数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/994173

相关文章

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除