Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
Kubernetes在创建Pod时,会为Pod和容器设置一些额外的信息,比如Pod名称、Pod IP、Node IP、Label、Annotation、资源限制等,我们经常会在应用程序中使用到这些数据,比如利用Pod名称作为应用日志的字段,方便分析日志。为了能在容器内获取这些信息,我们可以使用Downward API机制来实现。

Downward API可以通过环境变量Volume挂载这两种方式将Pod信息注入容器,我们分别来看一下:

一、环境变量方式

我们还是以Busybox为例进行演示,我们将Pod信息和Container信息以环境变量方式注入容器,在容器启动后通过env命令打印出来,我们Yaml文件内容如下:

apiVersion: v1
kind: Pod
metadata:name: busybox-pod
spec:containers:- name: busyboximage: busyboxcommand: ["/bin/sh", "-c", "env | grep VAR\_"]resources:requests:memory: "16Mi"cpu: "125m"limits:memory: "32Mi"cpu: "250m"env:- name: VAR\_NODE\_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: VAR\_POD\_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: VAR\_POD\_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: VAR\_POD\_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: VAR\_SERVICE\_ACCOUNTvalueFrom:fieldRef:fieldPath: spec.serviceAccountName- name: VAR\_CPU\_REQUESTvalueFrom:resourceFieldRef:containerName: busyboxresource: requests.cpu- name: VAR\_CPU\_LIMITvalueFrom:resourceFieldRef:containerName: busyboxresource: limits.cpu- name: VAR\_MEM\_REQUESTvalueFrom:resourceFieldRef:containerName: busyboxresource: requests.memory- name: VAR\_MEM\_LIMITvalueFrom:resourceFieldRef:containerName: busyboxresource: limits.memoryrestartPolicy: Never

我们创建Pod并使用kubtctl logs命令打印下输出:

$ sudo kubectl apply -f busy\_pod.yaml
pod/busybox-pod created
$ sudo kubectl logs busybox-pod
VAR\_MEM\_REQUEST=16777216 # 容器内存请求值
VAR\_NODE\_NAME=ayato # 节点名称
VAR\_SERVICE\_ACCOUNT=default # Pod使用的ServiceAccount名称
VAR\_CPU\_REQUEST=1 # 容器cpu请求值
VAR\_POD\_NAME=busybox-pod # pod名称
VAR\_MEM\_LIMIT=33554432 # 容器内存限制值
VAR\_POD\_NAMESPACE=default # Pod所在命名空间
VAR\_POD\_IP=172.17.0.6 # Pod ip地址
VAR\_CPU\_LIMIT=1               # 容器cpu请求值

二、Volume挂载方式

我们接下来尝试使用Volume挂载方式,将Pod信息注入容器。还是以Busybox为例,由于Pod信息都是以文件方式注入容器,所以我们修改容器启动后执行命令:我们使用cat不断打印注入的文件,修改后的Yaml文件如下:

apiVersion: v1
kind: Pod
metadata:name: busybox-podlabels:cluster: demo-clustertype: tool-podannotations:builder: alalazy
spec:containers:- name: busyboximage: busyboxcommand: ["/bin/sh", "-c"]args:- while true; doif [[ -e /etc/podinfo/labels ]]; thenecho -en '\n\n'; cat /etc/podinfo/labels; fi;if [[ -e /etc/podinfo/annotations ]]; thenecho -en '\n\n'; cat /etc/podinfo/annotations; fi;if [[ -e /etc/podinfo/cpu\_limit ]]; thenecho -en '\n\n'; cat /etc/podinfo/cpu\_limit; fi;if [[ -e /etc/podinfo/cpu\_request ]]; thenecho -en '\n\n'; cat /etc/podinfo/cpu\_request; fi;if [[ -e /etc/podinfo/mem\_limit ]]; thenecho -en '\n\n'; cat /etc/podinfo/mem\_limit; fi;if [[ -e /etc/podinfo/mem\_request ]]; thenecho -en '\n\n'; cat /etc/podinfo/mem\_request; fi;sleep 5;done;volumeMounts:- name: podinfomountPath: /etc/podinforesources:requests:memory: "16Mi"cpu: "125m"limits:memory: "32Mi"cpu: "250m"volumes:- name: podinfodownwardAPI:items:- path: "labels"fieldRef:fieldPath: metadata.labels- path: "annotations"fieldRef:fieldPath: metadata.annotations- path: "cpu\_limit"resourceFieldRef:containerName: busyboxresource: limits.cpudivisor: 1m- path: "cpu\_request"resourceFieldRef:containerName: busyboxresource: requests.cpudivisor: 1m- path: "mem\_limit"resourceFieldRef:containerName: busyboxresource: limits.memorydivisor: 1Mi- path: "mem\_request"resourceFieldRef:containerName: busyboxresource: requests.memorydivisor: 1Mi

我们创建此Pod,并通过kubectl logs查看输出:

$ sudo kubectl apply -f busy\_pod.yaml
pod/busybox-pod created
$ sudo kubectl logs busybox-pod
cluster="demo-cluster"
type="tool-pod"builder="alalazy"
kubectl.kubernetes.io/last-applied-configuration="{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{\"builder\":\"alalazy\"},\"labels\":{\"cluster\":\"demo-cluster\",\"type\":\"tool-pod\"},\"name\":\"busybox-pod\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"args\":[\"while true; do if [[ -e /etc/podinfo/labels ]]; then echo -en '\\\\n\\\\n'; cat /etc/podinfo/labels; fi; if [[ -e /etc/podinfo/annotations ]]; then echo -en '\\\\n\\\\n'; cat /etc/podinfo/annotations; fi; if [[ -e /etc/podinfo/cpu\_limit ]]; then echo -en '\\\\n\\\\n'; cat /etc/podinfo/cpu\_limit; fi; if [[ -e /etc/podinfo/cpu\_request ]]; then echo -en '\\\\n\\\\n'; cat /etc/podinfo/cpu\_request; fi; if [[ -e /etc/podinfo/mem\_limit ]]; then echo -en '\\\\n\\\\n'; cat /etc/podinfo/mem\_limit; fi; if [[ -e /etc/podinfo/mem\_request ]]; then echo -en '\\\\n\\\\n'; cat /etc/podinfo/mem\_request; fi; sleep 5; done;\"],\"command\":[\"/bin/sh\",\"-c\"],\"image\":\"busybox\",\"name\":\"busybox\",\"resources\":{\"limits\":{\"cpu\":\"250m\",\"memory\":\"32Mi\"},\"requests\":{\"cpu\":\"125m\",\"memory\":\"16Mi\"}},\"volumeMounts\":[{\"mountPath\":\"/etc/podinfo\",\"name\":\"podinfo\"}]}],\"volumes\":[{\"downwardAPI\":{\"items\":[{\"fieldRef\":{\"fieldPath\":\"metadata.labels\"},\"path\":\"labels\"},{\"fieldRef\":{\"fieldPath\":\"metadata.annotations\"},\"path\":\"annotations\"},{\"path\":\"cpu\_limit\",\"resourceFieldRef\":{\"containerName\":\"busybox\",\"divisor\":\"1m\",\"resource\":\"limits.cpu\"}},{\"path\":\"cpu\_request\",\"resourceFieldRef\":{\"containerName\":\"busybox\",\"divisor\":\"1m\",\"resource\":\"requests.cpu\"}},{\"path\":\"mem\_limit\",\"resourceFieldRef\":{\"containerName\":\"busybox\",\"divisor\":\"1Mi\",\"resource\":\"limits.memory\"}},{\"path\":\"mem\_request\",\"resourceFieldRef\":{\"containerName\":\"busybox\",\"divisor\":\"1Mi\",\"resource\":\"requests.memory\"}}]},\"name\":\"podinfo\"}]}}\n"
kubernetes.io/config.seen="2022-01-15T05:33:53.379386410Z"
kubernetes.io/config.source="api"2501253216

我们进入容器查看下挂载的文件:

$  sudo kubectl exec -it busybox-pod -- sh
/ # cd /etc/podinfo/
/etc/podinfo # ls
annotations cpu\_limit cpu\_request labels mem\_limit mem\_request

三、Downward API的能力

我们可以通过Downward API向容器注入如下信息:

1)可通过fieldRef获得的信息:

  • metadata.name:Pod 名称
  • metadata.namespace:Pod 名字空间
  • metadata.uid:Pod 的 UID
  • metadata.labels[’’]:Pod标签  的值 (例如, metadata.labels[‘mylabel’])
  • metadata.annotations[’’]:Pod 的注解  的值(例如, metadata.annotations[‘myannotation’])
  • metadata.labels:获取所有标签
  • metadata.annotations:获取所有注解
  • status.podIP:节点 IP
  • spec.serviceAccountName:Pod 服务帐号名称, 版本要求v1.4.0-alpha.3
  • spec.nodeName:节点名称, 版本要求 v1.4.0-alpha.3
  • status.hostIP:节点 IP, 版本要求 v1.7.0-alpha.1

2)可通过 resourceFieldRef 获得的信息:

  • 容器的 CPU 约束值
  • 容器的 CPU 请求值
  • 容器的内存约束值
  • 容器的内存请求值
  • 容器的巨页限制值(前提是启用了DownwardAPIHugePages 特性门控)
  • 容器的巨页请求值(前提是启用了DownwardAPIHugePages 特性门控)
  • 容器的临时存储约束值
  • 容器的临时存储请求值

Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息相关推荐

  1. Docker 与 K8S学习笔记(十八)—— Pod的使用

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  2. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  3. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  4. uniapp 学习笔记二十二 购物车页面结构搭建

    uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...

  5. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  6. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  7. JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇

    二十五.JVM监控及诊断工具-命令行篇 1.概述 性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益. Java作为最流行的编程语言 ...

  8. 立创eda学习笔记二十八:在嘉立创购买pcb板并贴片(smt)

    完整的写一下,分为两部分: 1.下pcb订单 这个可以看之前写的一个博客: 立创eda学习笔记三:pcb购买_Gutie_bartholomew的博客-CSDN博客 补充一下,买pcb可以直接有几个途 ...

  9. 【theano-windows】学习笔记二十——LSTM理论及实现

    前言 上一篇学习了RNN,也知道了在沿着时间线对上下文权重求梯度的时候,可能会导致梯度消失或者梯度爆炸,然后我们就得学习一波比较常见的优化方法之LSTM 国际惯例,参考网址: LSTM Network ...

  10. 立创eda学习笔记二十六:手把手教你使用立创eda的官方教程

    可以通过以下办法找到教程: 1,在软件界面点帮助-使用教程 2,在网站首页-帮助-教程进入 如何使用教程: 这里是一级目录,其实对新手最有用的是前面3个部分,后面的仿真先不看. 常见问题里面不光是讲的 ...

最新文章

  1. 继承的综合运用《Point类派生出Circle类而且进行各种操作》
  2. OPENCV3读取avi,解决返回NULL问题
  3. 【51NOD】1486 大大走格子
  4. OkHttp3的连接池及连接建立过程分析
  5. Interesting Array CodeForces - 483D(思维+线段树)
  6. UE4 多人联机显示每个人的playid
  7. 奇妙的安全旅行之DSA算法
  8. Windows完全卸载oracle11g步骤
  9. PAT乙级(1006 换个格式输出整数)
  10. 微信小程序分类小图标导航
  11. OPA2134UA IC AUDIO 2 CIRCUIT 8SOIC
  12. Java程序员该如何准备明年的「金三银四」跳槽季,你准备好了吗?
  13. 网络安全—Linux命令
  14. 【邮件处理】邮件eml文件解析
  15. 毛孔很大很难看该怎么处理
  16. 计算机屏保是不是休眠,计算机上屏保、待机、休眠、睡眠、关机的区别
  17. 移动端h5开发分辨率自适应
  18. 学习Web前端开发前景怎么样?
  19. Java4班题库-传智专修学院Java面试题库二
  20. 2022年上海市徐汇区创新型中小企业名单公示

热门文章

  1. A Magic Lamp
  2. 安装docker遇到的坑
  3. iOS上栈溢出崩溃详解
  4. 新高考十二种选科情况下,再选科目的考室安排的探索2.0版
  5. 随心情更新的学习笔记——JS代码之栈的佩兹的糖果盒
  6. 什么是Harmony操作系统?华为新操作系统介绍
  7. 【弄nèng - Skywalking】入门篇(一)—— Skywalking安装与使用
  8. 手机APP神器大全,这些被堪称神器的APP你用过哪些!
  9. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
  10. sap中re凭证是什么意思_SAP财务模块内有哪些凭证类型