00:02
各位同学大家好,今天我们一块儿要学习的是当word API, 本次课我们分为6个角度进行切入,首先从容器视角出发,探讨没有直接感知集群信息的这么一个痛点,然后呢,引入当沃的API的诞生以及它的作用。第二。核心概念本质定义解析当word API的核心定义理解其作为将破的信息注入容器内部的桥梁和作用。3、深入解析实现对比。对比环境变量和volume挂载两种实现方式的技术细节和适用场景,以及关键差异点。第4,可用字段原数据详解系统梳理了可暴露的破的名称、标签、资源限制等核心原数据字段,明确数据获取的边界和范围。
01:05
第5,应用场景。具体的案例。通过日志收集、监控、服务发现等真实的案例,展示当我的API在业务落地中的实际价值,也就是说明它该怎么用,它会用在哪里。第6,实践和展望。探讨全线控制性能优化的最佳实践,分析数那个技术局限性,并展望coopers生态的未来演进方向,也就是说我们当沃的API未来的一个发展趋势。首先我们要看一下为什么需要到word API, 第一容器的自我认知,容器本身不知道它运行在哪个破的当中,也不知道它的破的名称ID等等等等,对吧,然后呢,就会导致一个什么问题,就导致比方说我这个容器在嗯生产一些日志的时候啊,比方说我想打一个什么标签,打上一个具有我破的标识的一个标签,它没有办法打。
02:11
他没有办法直接获取到他所在pod的一个信息,也就是说我在哪儿,有多少资源他是不清楚的。然后再看第二传统解决方案的局限性,方案一应编码或外部配置,配置呢比较僵化,没有办法适配K8S的动态调度的特性,一旦破的重建或者迁移信息呢就失效了。也就是说,嗯,我们通过传统的方式是吧,可能是从外部去获取它这个pod的一个嗯,原数据,当你这个破的如果发生重建,调度到别的节点了,那么你之前的这些数据很可能就没有没有这个有效性了。然后再看方案二,直接调用cooper net的API server, 不仅造成应用和平台的强耦合,还引入了RBAC权限管理的安全风险,高频调用会给集群控制平面带来显著的性能开销,也就是说,嗯,我们可以通过调用这个API server的方式去获取集群里面的pod的原数据,但是。
03:27
一旦通过AP server这种方式,那你就必须需要引入到RBAC的权限管理,当然了,这个地方RBAC是什么东西?这个东西我们放到后边来讲,现在呢,我先把它提出来,大家知道先有这么一个东西就可以了。然后再看这个当word API的核心价值cooper当wordpi提供了一种轻量级、安全且平台解耦的机制,将自身的数据向下传递给容器内部,让应用能以标准化方式感知运行情运运行环境,且无需直接耦合K8S复杂的API体系。
04:11
一解析应用与平台应用代码无需硬编码K8SAPI调用细节,仅通过环境变量或者是卷文件的方式即可读取原数据,实现了应用逻辑与底层编排平台的完全解耦。第二,轻量高效的本地注入破得原数据由节点上的直接注入容器,无需经过APS server转发,减少了网络通信的开销,极大提高了信息获取的响应速度和效率。第三,最小权限的安全保障,容器进程无需被收取service account或者是RBAC权限带来的这个安全风险符合最小权限原则。第4,原数据的动态实时感知。通过挂载的方式注入的原数据支持热更新,应用可以实时感知pod labels和notations的动态变化,无需重启即可响应配置调整调整。然后我们再来看一下核心概念,什么是当word API官方定义,根据cooper官方文档,当word的API是一种将D和容器字段暴露给运行中容器的一个机制,它允许容器在不使用coopert客户端或者API服务的情况下,直接获取关于自身身份资源限制或者。
05:46
集群环境的关键信息实现了应用和集群原数据的一个结耦方式,一是通过环境变量来实现方式,二是通过这个卷挂载的方式来实现。具体是怎么来操作呢?后面的实验环节呢,我会带着大家一起来把这个流程走一遍。
06:07
然后再看这个啊,这个方式一哈,实现实现方式这里就不再赘述了。然后我们来看一下两种方式的对比总结,环境变量以环境变量形式注入,通过标准的环境变量方式直接读取,简单清亮。信息与更新仅支持少量的静态固定这个基础,基础信息获得创建时注入内容固定,不支持动态更新。其实这个无论是什么。它它无论是你那个叫secret拷map,还是说我们今天要学习的当这一篇,只要他通过环境变量来使用,那么它都没有办法实现这个热更新,好吧,实现热更新呢,只能通过这种卷挂载的方式,然后链接文件,然后去实现这么一个热更新的能力,好吧,这里的环境变量其实在实际的环境当中使用的还是非常之多的,只不过我们要了解他的一个优势,和他一个。
07:14
一个一个就是也算是一个劣势吧。适用场景适用于获取破名称、IP地址、命名空间等启动后不会发生变化的静态信息基础,然后开发体验符合常规应用习惯。再看第二个当word API, 也就是通过卷挂载的方式注入与读取,以文件形式挂载到容器内,需通过文件的IO操作读取内容,支持承载更大量的数据,支持标签注解等动态原数据呢会通过原子性的name操作同步更新文件的内容。它的适用场景适用于需要感知或的标签注解变化的场景,或者数据量较大、结构复杂的原数据获取需求。然后再看重要的限制,如果说使用spas挂载券的一部分,该挂载点无法接收库的更新事件。
08:17
导致动态原数据无法同步,好吧,这个到后面的实验环节,我会带着大家来讲一下这个问题,然后可用字段详解,我们通过环境变量可以获取哪些字段,我们就通过volume挂载可以获取哪些字段,这个表格呢我整理了一下,大家有需要的可以进行截图。然后我们再来看一下。使用场景,增强日志和监控结合elk技术站可将注入的pod原数据的日志进行统一收集、存储和可视化分析,实现全链路的可观测性,最终将破D的名称、命名、空间等原数据信息注入到日志当中,为每一条日志打上身份标签,极大的简化了微服务架构下的问题定位和日志聚合的流程。也就是说,我们可以把这个日志。
09:26
整理的非常非常的完整,然后再给它放到日志平台,然后再看下面那个通过库notice当ward API, 将portd name和portd name space以环境变量的形式注入容器,应用代码可以直接读取。好吧,然后我们再往下看最佳实践和性能考量。首先是环境变量的方案,适用于获取简单静态的键值,对信息配置轻量,读取便捷,适合基础参数的传递。然后再看volume文件挂载,适用于复杂可变的信息场景,支持动态更新与大容量数据的存储,适配复杂的这么一个需求。性能优化策略,减轻API server的负载,优先使用当word API来传递信息,避免应用直接调用API server, 降低集群核心的一个压力。
10:27
避免过载和合理的缓存,不,不在注解呃标签中存大数据应用侧对volume读取配置进行本地缓存,减少重复的解析和开销。第三,安全和配置规范,最小权限的管控,仅暴露必要的核心字段,通过module的方式来限制文件的权限,当然了,文件的权限这块是一个,嗯。我记得应该是八进制防止敏感数据的一个泄露,然后健状性和组合使用代码中设置这个默认值和con map, 通过project d的结合构建完整的配置体系。总结一下合理的使用环境变量和volume文件,严守最小权限的一个原则,既能保障配置的灵活性,又能维护集群的性能和数据安全。
11:27
再看第7局限性和替代方案。首先是核心的局限性,信息范围受限,仅能获取破得自身的一些元数据,无法获取集群论其他的破的节点的或者服务的一个信息,当然了,这个其实也是有办法获取的,但是呢,他可能是需要通过一个嗯提全的一种方式,这个我们在后边的实验环节会给大家讲到。然后再看查询能力不足,仅支持获取域定义的字段集合,不支持复杂的过滤聚合等高级条件的一个查询更新机制,之后环境变量不可变,W6挂载的文件更新存在延迟,无法实时的感知变化。
12:16
再看何时直接调用API呢?跨资源信息获取,当应用需要获取同一服务下的其他破D列表节点的一个详细状态,比方说CPU内存时,必须使用service account直接请求K8S的APS server其实是可以获取到其他命名空间和这个pod的信息的,只不过是需要一种提全复杂资源交换,需要创建、修改或者删除Q8S资源,比方说confi map或者执行watch操作监听资源变化时,直接调API是唯一的一个选择。再看第三个互补而非替代,当我API专注于破着的自行提供轻量级的、低开销的方式获取pod自身的原数据信息。
13:11
Service account token赋予破者探索集群的一个能力,作为身份凭证,用于K8SAPI访问外部资源。当然了,我们就可以通过这一种提前的方式去看到我们集群里。基本上吧。你所需要的绝大绝大部分内容。然后再看故障排查,这也是实际生产环境当中常遇到的几个问题。首先,第一,检查压布配置使用库CTL这个命令是吧?验证语法是否正确,确保field pass拼写无误,且container name与容器名称严格一致。第二,验证挂载路径,检查容器内的挂载路径是否被意外覆盖,避免使用s passs挂载需要动态更新的配置文件,这会导致文件无法同步更新。
14:08
知道吧,当然了,这个3PASS我们还在后边会有一个章节,会把这个参数专门的给讲到,然后查看关键日志,查看容器日志,确认应用能否找到环境变量或者或者一个文件,同时呢,检查节点上的cuber light日志,从中寻找卷挂载的相关错误信息。第4,进入容器的验证,通过库巴CT l exec进入到容器当中,然后呢,通过嗯,Print inv检查环境变量注入的情况,并用LS和cat命令直接确认挂载的文件内容和权限。好吧,然后再看总结和展望。KS的单API是连接应用和运行环境的重要桥梁,它以一种轻量、安全的方式完美的解决了容器在集群中运行的自我认知与环境感知的问题。
15:15
通过本地文件注入或者环境变量的方式,无需通过APS server转发请求,几乎无额外的性能开销啊。然后是安全可控pod无需申请额外的RBAC权限,即可获取自身的一个信息,避免了过度的授权带来存在的安全这个风险,第三,解耦平台应用代码无需耦合KYSAPI客户端,通过标准方式获取信息,大幅提升了应用的可移植性。第四。动态感知,支持标签和注解的动态更新,应用能实时感知的运行环境的配置变更,灵活响应业务需求。然后再看未来展望,在以后的KYS当中啊,会引入到这个监控GPU这种设备的一个分配情况,提高了计算场景提供这个更精准的资源调度的能力。
16:18
好吧,然后PPT部分呢就到此结束,下面开始我们的实验。好,下面就开始我们的实验环节,这里我准备的一份压布文件,这份压布文件就是通过变量注入的方式来获取到我们pod的原数据。我们一起来看一下这份压模文件,首先是API version v1核心组V1版CAD pod, 我要起一个pod,然后我po的名字呢,就叫苏晓轩pod。我的规格期望要起一个容器,容器的名字就叫做苏小轩杠container,然后镜像镜像拉取策略。
17:00
重点来了,一英威。我要给破的name赋一个值,值来源于哪里呢?来源于me data的name字段,你看就相当于这个字段赋值给了port name.也就是说,通过这种引用的方式,成功的把破的原数据注入,也可以说是赋值给了这个变量。以供我们的一个pod使用,好吧,其实后面的这个原理还是都是一样的啊,我们一起来操作一下后边CPLLPLY-F,然后是导管的API1。Ver CTL, 看port,好,Portd已经起来了,现在呢,我们要进到pod里面看一下我们的环境变量有没有成功的注入进去,Y CTL ex e、杠I,然后苏小轩杠破的杠杠。
18:03
定下的了,嗯,但是好进来了,然后EV查看一下哦,哎,找到了库的IP,是不是就成功的注入线来了,还有一个什么叫portd name, 对吧,Po name我们也来找一找poor哦,找到了port name, 苏晓轩杠port。对吧,其实原理还是比较简单的,来我们一起来输出一下看输出一下看一下。Dollar, 然后是pod name也没有任何问题,对吧?来,我们再输出一下pod的IP吧。也就是说可以通过变量注入的这种方式,供我们的容器去获取到po的原数据,这样我们是不是在以后的无论说是你打印日志也好,或者是在嗯,你的业务逻辑里边,你可以添加这些东西,对不对,都都是没有任何问题的。然后变量注入的方式呢,就已经演示完了,下面我们再来演示一下,通过卷挂载的方式,演示之前呢,我们先把这一个变量注入,先给回复掉Co波CT。
19:15
杠f a word api1。我们一再来看一下通过卷挂载的方式是怎么实现的。然后从头读一遍吧,API versionson v1核心组,V1版can pd, 我要起一个pod pod的名字叫做什么呢?还叫苏小轩搞破的。然后是规格7望。我要起一个容器,容器的名字叫做苏小轩杠container镜像,镜像拉取策略,然后我这里做了一个资源限制,最多可以使用1核CPU和512兆的一个内存,然后初始内存是0.5核和256兆,然后重点来了,Volume month.
20:08
也就是说,我要把这个卷里的内容挂载到ETC下载破者data目录下,我们一起来看一下这个破data定义了什么破的data,这这个这个位置啊。到word API关键字出来了,我把我到word API里边的no和name以及CPU的request,哎,给注入到这个。或者里边作为一个文件的形式去做挂载使用,你看啊,只获取来源于哪里,来源于me data下载ations,那么这时候就会有人问了,他me data下没有啊。别急,这个只要你运行起来了,然后呢,你再通过杠O压B输出压B文件的方式,你就可以看到这个annotation这个值了,没有任何问题哈,待会儿我们一起可以看一下,然后呢,Me data下的name,这个不用多说了,肯定是有的,对吧,这就在这里吧。
21:14
再看下面这个request CPU, 有没有request CPU.也没有任何问题。也就是说我把这三个东西通过。就是声明卷的方式,诶,挂载到了这个破的里面,我们一起来看一下吧,好。Ver尔CTL,然后PLLY-F当沃API2。我们先来输出一下这VM文件啊,Get port CTL.Bad或苏晓轩,港或的GA ya.是不是感觉比刚才的东西要多呀,对吧?不过我们主要看的是这一条,Made data下的no对不对,这个相当于就是我这个破的运行起来了才会有的这么一个字段。
22:08
然后呢,我们再把这个字段通过文件的形式挂载到pod里面,好吧,来,我们进入pod里面看一下吧,Exec-it,然后苏小轩杠破的杠杠并下的。好,进来了,进来以后我们进到目录下ETC下的。叫破雷吧。是不是出来3个文件,那么这3个文件就对应的。我们的。或者原数据是不是没有任何的问题。是吧,你看我cat了一下这个a rotation这里cat了一下是不是全部出来了,和刚才我们看的是不是都是一样的。对吧,一模一样。大家看。这个name name就叫苏小轩portd,没有任何问题,然后CPU request.
23:06
来看一下CPU request在哪里。CPU request.呃呃,这里。这儿呢吗?Request CPU一盒对吧,没有任何问题,好,那那么这种方式就是通过卷挂载,还记不记得我们之前说过一个什么行为呢?就是比方说我想获取整个集群pod的原数据,那么我该怎么操作?我先把这个回退一下啊,给大家做一个演示,ET转F到word api2,好,下面我们来看一份这样的押宝文件,这个押宝文件是我要申请一个。就相当于是一个提前的一个行为,我们先这么理解,当然了,这个具体逻辑我们会放到集权安全里面去讲,大家只需要记住,哎,我现在要做的就是一个提全的一个动作。
24:04
好,我们先把这份运行一下,我CT LA p ly-F啊,好,相当于现在已经把这个权限给搞好了,然后呢,我现在需要起一个破的来验证一下对不对,好,我这里又准备了一份破的压脖文件看一下,然后呢,你看我刚才那份压脖文件里面其实定义了一个相当于是一个角色和权利,然后呢,我这里呢,就引用了这个角色和权利。也就是说我在这个pod里面,我可以通过我的这种身份去获取到集群里所有pod的原数据。来,我们一起来看一下,我CTLPLY杠、f portd, 把这个pod起来以后,我们进去看一下,查一下。后边CTL get put好起来了,进去啊,Ex X ec杠,It, 然后是K杠杠定下的SH好进来了,进来以后我需要附一个值。
25:07
赋一个什么职的?呃,这块的内容啊,也会放到后边集群安全里面啊,如果说你感兴趣的话,你可以关注一下我们后期的一个视频来副职。回撤好,现在复制已经复完了,那么现在就开始做一件什么事情呢?获取整个集群的破者信息来。我准备了一个科命令。粘贴,那么就可以通过这条命令。来实现我们的这一个期望,好稍等一下啊,可能这里比较多,好没有任何问题获取到,大家来看一下是不是东西比较多啊,这里面是整个集群的吧,都有。好,到这里呢,通过提权行为获取整个集群破的信息的这个实验也已经结束了,到这里呢,也非常感谢大家的观看啊。
26:08
然后我们就下期再见吧,拜拜。
我来说两句