Kubernetes(七)Pod进阶之Downward API和PodPreset
关于静态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相关推荐
- 云原生kubernetes七 :Pod进阶篇:污点-容忍度-亲和性-Affinity-调度
1.pod资源清单详细介绍 #版本号 apiVersion: v1 #资源类型 kind: Pod #元数据 metadata:#Pod名字name: string#pod所属命名空间namespac ...
- k8s之Pod详解(五)【Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级)】
参考于Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程(基础+高级) Pod Pod的结构 每个Pod中都可以包含一个或者多个容器 这些容器可以分为两类: 用户自定义用的 ...
- 容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级
容器编排技术 -- Kubernetes 给 Pod 配置服务质量等级 1 Before you begin 2 QoS 等级 3 创建一个命名空间 4 创建一个 Pod 并分配 QoS 等级为 Gu ...
- Kubernetes之Pod生命周期详解
简述 Kubernetes 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划.更新维护的机制.应用运行在 kubernetes 集群之上,实现服务的扩容.缩容,执行滚动更新以及 ...
- kubernetes 客户端client-go 使用及常用api
kubernetes 客户端client-go 使用及常用api ---------------- 版权声明:本文为CSDN博主「逆月林」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原 ...
- 4 Kubernetes资源-Pod控制器(2)
4 Kubernetes资源-Pod控制器(2) 4.3 DaemonSet DaemonSet确保Pod在所有Node节点运行一个副本,当有Node节点添加时会自动在新的节点创建Pod.常用于每个N ...
- 4 Kubernetes资源-Pod控制器(1)
4 Kubernetes资源-Pod控制器(1) Kubernetes中Pod分为自主式和控制器管理式: YAML指定类型为Pod的均为自主式,此类Pod退出后不会被创建: YMAL指定类型为Repl ...
- Kubernetes中pod分类、核心组件、网络模型及kubectl命令使用
文章目录 Kubernetes中pod分类.核心组件.网络模型及kubectl命令使用 1.k8s中pod分类 2.核心组件 3.网络模型 4.kubectl常用命令使用 Kubernetes中pod ...
- Kubernetes的Pod详解
文章目录 Pod生命周期 创建和终止 初始化容器 钩子函数 容器探测 示例 重启策略 Pod调度 定向调度 亲和性调度 污点和容忍 污点(Taints) 容忍(Toleration) Pod生命周期 ...
- Kubernetes 固定 Pod IP 地址方法
第七章 Kubernetes 固定 Pod IP 地址方法 文章目录 第七章 Kubernetes 固定 Pod IP 地址方法 一.自定义 IP 地址池 1.下载 calico 管理工具 calic ...
最新文章
- JavaScript---认识JavaScipt
- Canvas基础知识
- 利用边缘灰度变化建模,来提高圆环直径求取精度
- lua 收不到服务器发来消息,lua 学习之错误处理
- SpringBoot异常处理-自定义错误页面
- Android之All children of ConstraintLayout must have ids to use ConstraintSet
- C++ Builder 启动时不显示主窗体
- java安装的时候无效参数,spring-boot 打成jar把后 启动时指定参数无效
- 计算机中丢失api-ms-win-crt-locale,API-MS-WIN一系列丢失DLL打包
- 【报告分享】2019中国社交电商白皮书.pdf
- python进阶18正则表达式
- 【编程珠玑】内联函数和宏
- 金融行业文档管理系统的八大创新
- 如何使用视频转换器将ogg格式转换为MP3格式
- 用户故事与敏捷方法-阅读总结
- 正轴等角割圆锥投影综述
- 入门OJ 1203: 酒鬼
- python numpy log_工具amp;方法 | 6行代码教你用Python做OLS回归(内附CFPS实例)
- 文本溢出处理,出现省略号,单行文本溢出处理,多行文本溢出处理
- 【运营】关于A/BTest的简单介绍
热门文章
- 外包干了三年,废了。
- final 和effectively final区别
- antd vue表单验证_解决antd 表单设置默认值initialValue后验证失效的问题
- 机器学习实战(1)——概览
- 黑桃怎么用html代码,index.html
- mysql 1556_mysqldump: Got error: 1556: You can't use locks with log tables.
- 解决鼠标不能移出视频框,切换网页不能播视频的小窍门
- 000webhost免费申请
- 什么是信念?信任?信仰?
- 手机测试用例-多媒体测试用例