关于静态pod可以参考我这篇博客

一    Downward API

(1)基本概念和用途

目的: '不是'为了存放容器的数据'也不是'用来进行'容器和宿主机的数据交换的',而是让 'Pod 里的容器'能够'直接获取到'这个 Pod 对象本身的一些信息

(2)环境变量

1)静态数据'pod创建之前已经确定的' --> metadat.*2)状态数据'pod创建之后才知道'    -->status.podIP、spec.*3)容器的资源数据'cpu、memory'   -->request.* limit.*

案例

通过 Downward API 来将 'Pod 的 IP'、'名称以及所对应的 namespace' 注入到容器的'环境变量'中去,然后在'容器中打印'全部的'环境变量'来进行'验证'
apiVersion: v1
kind: Pod
metadata:name: env-podnamespace: kube-system
spec:containers:- name: env-podimage: busyboxcommand: ["/bin/sh", "-c", "env"]env:- name: POD_NAME                 '容器环境变量'valueFrom:fieldRef:fieldPath: metadata.name   '对应容器环境变量的值'- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP
理解: 环境变量的'值-->valueFrom'来源于'属性引用-->fieldRef',这个属性的值来自于'属性路径->fieldPath'备注: 环境变量的'值来源'有很多,这里只介绍'Downard API'相关的

结果

通过'容器的日志',发现'pod信息'注入到容器的'环境变量'里面,被'打印'出来

补充信息

打印' Pod 的环境变量 '可以看到有'很多内置的变量'其中大部分是'系统自动为我们添加'的,Kubernetes 会把当前'命名空间下面的 Service 信息'通过环境变量的形式'注入'到 Pod 中去

补充:resource

补充:status.podIP获取

(3)volume

注意: items是'对象列表'

案例讲解

通过 'Volume 挂载的方式'去获取 Pod 的基本信息通过Downward API将 Pod 的 'Label、Annotation 等信息'通过 Volume '挂载到'容器的某个文件中去,然后在'容器中打印出'该文件的值来验证
apiVersion: v1
kind: Pod
metadata:name: volume-podnamespace: kube-systemlabels:k8s-app: test-volumenode-env: testannotations:own: wzjbuild: test
spec:volumes:           --> 'volumes'- name: podinfo    --> '对应'downwardAPI:items:- path: labels --> '文件名'fieldRef:fieldPath: metadata.labels --> '文件内容'- path: annotationsfieldRef:fieldPath: metadata.annotationscontainers:- name: volume-podimage: busyboxargs: - sleep - "3600"volumeMounts:    --> '对应-->容器挂载点'- name: podinfomountPath: /etc/podinfo
我们将元数据 labels 和 annotaions 以'文件的形式挂载'到了 /etc/podinfo 目录下 -->'有两个文件'备注: 涉及到卷'volume',就会涉及'文件'

创建成功后,我们可以'进入到容器中'查看'元信息'已经'存入到文件中了'

(4)其它需求

获取 'Pod 容器运行后'才会出现的信息

(5)应用场景

二    PodPreset

API 版本是'alpha版本-->1.19.3也是',还不是主资源'kubectl api-resources查询不到',未来可能删除'比较通用'的放到'PodPreset'中

(1)基本概念

(2)PodPreset作用机理

(3)启动方式

说明:实际不用移动就会自动更新

判断是否启动成功

(4)需求引入

需求就是需要'同步 Pod 和宿主机'的时间,一般情况下,我们是通过'挂载宿主机的 localtime 来完成'的
'传统方式'apiVersion: v1
kind: Pod
metadata:name: time-demolabels:app: time
spec:volumes:- name: host-timehostPath:path: /etc/localtime   -->'使用宿主机的时间'containers:- name: time-demoimage: nginxvolumeMounts:- name: host-timemountPath: /etc/localtimeports:- containerPort: 80

验证:时间同步

缺点

(5)PodPreset来实现

apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:name: time-presetnamespace: default  -->'属于ns下的资源-->不用的ns可以使用不同的podPreset'
spec:selector:matchLabels:      -->'匹配哪些标签的pod,没有指定就是所有default的pod' -->'也可以指定为某些pod设置'volumeMounts:- name: localtimemountPath: /etc/localtimevolumes:- name: localtimehostPath:path: /etc/localtime

创建

观察:直接创建上面的 Pod看是否时间同步

'没有/etc/localtime设置'
apiVersion: v1
kind: Pod
metadata:name: time-demolabels:app: time
spec:containers:- name: time-demoimage: nginxports:- containerPort: 80

原因

kubectl get pod time-demo -o yaml  --> '查询'

Kubernetes(七)Pod进阶之Downward API和PodPreset相关推荐

  1. 云原生kubernetes七 :Pod进阶篇:污点-容忍度-亲和性-Affinity-调度

    1.pod资源清单详细介绍 #版本号 apiVersion: v1 #资源类型 kind: Pod #元数据 metadata:#Pod名字name: string#pod所属命名空间namespac ...

  2. k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】

    参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...

  3. 容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级

    容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级 1 Before you begin 2 QoS 等级 3 创建一个命名空间 4 创建一个 Pod 并分配 QoS 等级为 Gu ...

  4. Kubernetes之Pod生命周期详解

    简述 Kubernetes 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划.更新维护的机制.应用运行在 kubernetes 集群之上,实现服务的扩容.缩容,执行滚动更新以及 ...

  5. kubernetes 客户端client-go 使用及常用api

    kubernetes 客户端client-go 使用及常用api ---------------- 版权声明:本文为CSDN博主「逆月林」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原 ...

  6. 4 Kubernetes资源-Pod控制器(2)

    4 Kubernetes资源-Pod控制器(2) 4.3 DaemonSet DaemonSet确保Pod在所有Node节点运行一个副本,当有Node节点添加时会自动在新的节点创建Pod.常用于每个N ...

  7. 4 Kubernetes资源-Pod控制器(1)

    4 Kubernetes资源-Pod控制器(1) Kubernetes中Pod分为自主式和控制器管理式: YAML指定类型为Pod的均为自主式,此类Pod退出后不会被创建: YMAL指定类型为Repl ...

  8. Kubernetes中pod分类、核心组件、网络模型及kubectl命令使用

    文章目录 Kubernetes中pod分类.核心组件.网络模型及kubectl命令使用 1.k8s中pod分类 2.核心组件 3.网络模型 4.kubectl常用命令使用 Kubernetes中pod ...

  9. Kubernetes的Pod详解

    文章目录 Pod生命周期 创建和终止 初始化容器 钩子函数 容器探测 示例 重启策略 Pod调度 定向调度 亲和性调度 污点和容忍 污点(Taints) 容忍(Toleration) Pod生命周期 ...

  10. Kubernetes 固定 Pod IP 地址方法

    第七章 Kubernetes 固定 Pod IP 地址方法 文章目录 第七章 Kubernetes 固定 Pod IP 地址方法 一.自定义 IP 地址池 1.下载 calico 管理工具 calic ...

最新文章

  1. JavaScript---认识JavaScipt
  2. Canvas基础知识
  3. 利用边缘灰度变化建模,来提高圆环直径求取精度
  4. lua 收不到服务器发来消息,lua 学习之错误处理
  5. SpringBoot异常处理-自定义错误页面
  6. Android之All children of ConstraintLayout must have ids to use ConstraintSet
  7. C++ Builder 启动时不显示主窗体
  8. java安装的时候无效参数,spring-boot 打成jar把后 启动时指定参数无效
  9. 计算机中丢失api-ms-win-crt-locale,API-MS-WIN一系列丢失DLL打包
  10. 【报告分享】2019中国社交电商白皮书.pdf
  11. python进阶18正则表达式
  12. 【编程珠玑】内联函数和宏
  13. 金融行业文档管理系统的八大创新
  14. 如何使用视频转换器将ogg格式转换为MP3格式
  15. 用户故事与敏捷方法-阅读总结
  16. 正轴等角割圆锥投影综述
  17. 入门OJ 1203: 酒鬼
  18. python numpy log_工具amp;方法 | 6行代码教你用Python做OLS回归(内附CFPS实例)
  19. 文本溢出处理,出现省略号,单行文本溢出处理,多行文本溢出处理
  20. 【运营】关于A/BTest的简单介绍

热门文章

  1. 外包干了三年,废了。
  2. final 和effectively final区别
  3. antd vue表单验证_解决antd 表单设置默认值initialValue后验证失效的问题
  4. 机器学习实战(1)——概览
  5. 黑桃怎么用html代码,index.html
  6. mysql 1556_mysqldump: Got error: 1556: You can't use locks with log tables.
  7. 解决鼠标不能移出视频框,切换网页不能播视频的小窍门
  8. 000webhost免费申请
  9. 什么是信念?信任?信仰?
  10. 手机测试用例-多媒体测试用例