00:01
各位战友大家好,今天呢,我们一起来学习一下cot demons set控制器,Demon set在目前行业解决方案当中处于一个什么样的地位,就借今天这个机会呢,我们一起来深入交流一下。本次课我们从四个点进行切入,第一,什么是demon set? 第二,为什么需要demon set? 第三,怎么使用demon?第四,进阶与最佳实践。在实际的生产环境当中,Demon有哪些常用的配置参数,以及出现问题的一个排错思路。首先来看什么是demon set核心定义,Demon set是coopers中的一种核心控制器,其职责是确保其管理的破的在集群中的每一个符合条件的节点上都运行,且仅运行一个实例,说白了就是在K8S的每一个noe上面都部署一个破的副本。这就是。
01:14
控制器对比set相较于deployment以及有哪些区别?我整理的几个点我们一起来看一下。第一,设计目标在集群中每一个符合条件的节点上精确运行,且仅运行一个pod副本,是吧?这个是最主要的和deployment以及state的区别,再看第二个调度方式,Din site是直接绑定到具体的节点,完全的绕过了调度确保。Pod副本节点级覆盖。第三,Pod数量。Pod数量取决于集群当中可用的节点数量,如果说后期节点要增加,那么破的也会增加,如果说节点减少,那么破的会相应的减少。
02:11
再看破的标识,破的标识该怎么理解呢?Demons set的破的标识是,嗯,它的名字哈,是demon set的name那个字段的名字加上一个5位数的随机生成数。而Deployment的。标识是deployment的name,加上后面是吧?有分为2段,Deployment的name,嗯的。一个随机数以及后面的一个哈希,也就是说是至少三段式。然后再看side的名字呢,比较有特色,它是有编号的。发的name,然后0123,哎,这样这个比较好区分,以后我们可以通过putd的名字来很快的来看看出来这个pod是由什么控制器来创建的。
03:11
再往下试用场景,Demon的适用场景通常是做一些日志收集,监控代理网络插件以及嗯,安全防护这类。来,我们继续。同学们在的工作原理揭秘独特调度机制前面已经提到了,是完全的绕过了schedule的。我们来再来看一下核心工作流程,核心工作流程分为三步,第一,持续监控,实时监听集群中的demon set node和拓展对象的变动事件。就像刚才我们提到的,如果说。No的节点增加了,那么demon set会在新的节点上再起一个破副本。如果说节点减少了,会在这个。
04:04
对赛的里面减少那么一个破的副本,也就是说确保了每个节点有且仅有一个。来,我们继续。工作原理解析刚才已经提到了,这里就不再赘述了。我们来看一下为什么我们需要DEMO site, 我这里总结了5大核心应用场景,我们一起来看一下。场景一,集群监控,我们通常啊监控节点的一些个性能指标,就是通过对蒙赛的里面部署一个普罗米修斯,然后去采集里面的。Pod的容器的一些个CPU使用,内存使用,包括磁盘啦,网络了,这些可以通过demon把这个pod部署到每个节点上,然后去采集收集这些信息。
05:03
这是第一个使用场景。第二个使用场景,日志收集。就像刚才提到的,通过定分赛,在每一个节点上比一个破的去收集每一个节点当中产生的日志。这是第二个使用场景,第三个使用场景,网络管理。细心的同学会发现,我们K8网络当中的calic组件就是通过demon set来部署的,每一个节点都有一个卡口,这组成了K8强大的网络能力。如果说这个节点没有卡口,那么这个节点就是毁灭级的存在,对吧,就构不成完整的K8网络。这是第三个场景,再看第4个场景,存储供给。我们可以在每一个。嗯,DEMO门在的起的破的里面是吧,挂载这个存储院是吧,给我们提供一些存储能力,这个很好理解啊,这是第4个场景,我们再来看第5个场景,安全防护,通过DEMO set在每一个节点上起一个破的副本,破的副本里面跑一个安全防护的一个应用,然后去监控我们这个集群当中的,嗯,破的也好,或者说嗯,集群节点上的一些个应用程序也好,去监控他们的一个安全的一个状态。
06:34
包括有反弹或者是异常提全等等,这是第5个场景,具体这5个场景的使用,我们在后面的课程当中呢,会详细讲到。第三,我们如何使用对set?在这里我准备了一份压模文件,当然了,这个在后边的实验当中呢,我会带着大家来细细的进行解读啊,这里就做一个提示。
07:04
库尔CTR的命令,这个后面我也会详细的讲到。滚动更新策略,它的滚动更新区别于deployment的点是,Deployment是先创建新的,再删除旧的,对吧?确保了这个集群的一个高可用,但是呢,登set的滚动更新是先删除旧的,再创建新的,为什么要这样呢?还记得我们之前提到的吗?对,莫萨德的特性就是在。嗯,健康的节点上运行,且仅运行一个对吧,如果说你先创建一个新的,再删除旧读的话,它不满足这个条件的,所以说它的策略是先删除旧的,再创建新的。版本回滚版本回滚的命令和之前我们学习deploy的时候是类似的啊,这里就不再赘述了。
08:03
第4,进阶高级调度之污点和容忍。我们都知道哈,现在这个demon赛是可以在pod的,是可以在集群的每一个节点都起一个pod副本,对吧?但是呢,我们的master节点是有一些例外,因为master节点是默认不被调度破的。对吧,但是我们应该是怎么做才能让他调度的上。这个我准备了一个配置参数,我们一起来看一下,通过配置容忍来将这个demon set的pod调度到master节点上。这里指定了king以及效果。就可以通过这种特性把pod调度到对应的这个master节点,好吧,这是第一,我们再看亲和性,就比方说我举一个例子哈,我们这个集群当中有一批比较。
09:05
比较牛的设备是吧,就比方说我这个部署的是AI大模型。这个上面跑的都是一些个这样的应用,我希望啊,我的DEMO门在的就是尽量的部署到这些节点上,然后去做一个模型的训练,那么这时候应该怎么办呢?就可以通过节点的亲和性去。引导这些破的。调度到我们指定的节点上,这就是它的亲和性。当然了,亲和性和污点在后面的课程当中我们还会再详细的讲到这里我只是提一下,让大家知道对面在哪可以这样使用,有这样的作用就可以了。生产配置与排错指南这里呢,我总结了几个排错场景,第一,我们在调度demon的port的时候,如果处于pen定,我们应该怎么来排查呢?判定通常是因为节点的资源不足,没有办法满足pod的一个最低的一个需要,所以没有办法调度到这个节点上,这时候我们可以执行cooper CL describe node, 然后写上node的名字来查看我当前noe的资源使用情况,来抉择这个pod是不是。
10:28
真的不能被调度到这个节点了,如果说确实因为资源不足的问题,我们就该考虑扩容节点了。啊,不是考虑扩容资源了,不好意思啊,我们再来看第2个扩的无法调度到节点是吧,为什么没有办法调度到节点呢?除了。呃,资源不足,还有可能是因为节点设置了污点。还记得我们之前提到了吗?Master节点是默认有污点的,所以说它没有办法调度到master节点。
11:04
我们也可以通过是吧,嗯,一个容忍去将这个破的调度到该节点,这个就是第二一个特性啊,我们可以来检查一下。我们所在节点的屋点情况,然后再看第三个镜像拉取失败,镜像拉取失败通常是在部署的时候,全局都会存在的一个问题,原因呢,就是镜像名称或者是tag错误了,就是在你压ma文件里面,你在拉这个镜像的时候呀,你名字写错了,或者是你这个版本没有,嗯,写对,它就会存在这样一个问题。第二也可能是因为你镜像仓库的密钥是吧,健全不对,缺失了,也会存在这样的问题,出现这样的问题该怎么办?不要慌,我们可以执行cooper CTL describe破D,然后把D的名字加上,当然了,如果你有命名空间的话,还要加上杠N后面写上命名空间的名字,来查看具体的错误日志。
12:09
核心要点回顾这节课呢,我们主要讲了什么是DEMO赛,对吧?为什么要学习这个DEMO赛,它有什么样的作用,核心的使用场景有哪些?第三,我们怎么使用对门赛对不对,它的滚动更新是不是,以及这个高级调度是怎么一回事。第4,关键点理解了绕过调度器的底层原理,我们掌握了这个污点和容忍的这么一个特性,是吧?以及我们刚才提到的一些个亲和高级调度策略,以及生产环境里面一些个常见的错误应该怎么去排查。嗯,这里呢,PPT部分就已经讲完了,下面开始我们的实验环节。各位战友,下面开始我们的实验环节,这里呢,我准备了一份压模文件,我们一起来看一下。首先API version apps v1定义了核心组,然后是V1版本,Kind是demon set的控制器类型,Me data定义原数据,原数据里面有name,我们这次要给demon set起的名字,名字叫做N-demon。
13:28
然后namespace命名空间,我们是默认,然后给DEMO set定义了一个建值队的一个标签APP冒号NS,然后开始规格。Select, 然后匹配标签,匹配什么呢?匹配APP冒号ens,然后又template要起破的了,我们来看看portd是怎么定义的me data原数据,然后定义了标签,这个是固定格式啊。Spark规格,然后起一个容器,容器的名字叫做index,容器的镜像叫indexx,冒号ITT,容器的拉取策略in image per policy是if not present, 意思是如果本地有就用本地的,如果本地没有就从远端仓库拉取来。我们继续呃,电业的一个端口组,端口组的名字叫做HTTP,暴露了容器的端口是80,然后hostport,这个是怎么理解呢?我们可以直接通过访问node节点的地址加。
14:40
8090,然后访问到后端容器的80端口,好吧,这个地方也比较好理解,然后protocol通过TCP协议resources,然后我们限制了一个。这个破D的一个资源哈,当然了,这个地方我们还会再详细讲解的,这里我先把它拿出来,让大家先混一个脸熟好吧,然后下面的这些呢,等会儿我们再演示好,现在先保存退出,然后我们来执行一下扣包,CTL盖,我们先查一下现有的pod哈,好,现有没有pod,我们把这个压文件给执行一下,Play, 杠FF,然后demon set点压回收。
15:22
好,这个时候就创建成功了,Get破好两个demon set已经起来了,还记得我们说的demon set的特性吗?它是不是在每一个节点上都会起一个po呢?我们一起来看一下,我们可以加上一个参数杠O。对吧?Node是吧,一个在WORKER2,一个在WORKER1,这样是不是就满足了每个节点都存在一个pod副本呢?对吧?当然了,这个还远远不够,我们还希望怎么样?诶,是不是我们之前讲到过可以通过某些参数将pod调度到指定的节点上,对吧?来怎么操作呢?我们一起来看一下,现在我们先把这个pod给回退了啊,等赛先给回退掉,然后我们修改一下demon set的配置文件。
16:20
看哈,我们这里定义了一个参数哈。哎,Noe select, 然后将这个破呢调度到是吧,打了this type=SSD标签的节点上对吧?那我们现在就来尝试一下,我们给其中的一个节点打上一个这样的标签,然后我们再重新调度,看看这个破的会有什么样的变化。保存退出CTL,嗯,Get no, 我们先看一下,一共有三个节点对吧,我们给WORKER1。打一个标签吧,胡泊CTL lal node4,然后哪个弄的呢?Worker work ER worker-1吧,然后起的那个叫disk type=SSD对吧?好,打一个标签,这个时候呢,WORKER1已经成功的打上标签了,我们可以来查一下库CTL,嗯,Get NOS work杠。
17:30
1哎,不不用这样啊,看l describe, 哎哟,不好意思,我打错了,Describe=SSD。对吧?我们通过这条命令cooper CTL get no-L指定要筛选的标签,标签是disc type=SSD,对吧?筛选出来的WORKER1对不对,这就证明了WORKER1现在是存在这么一个标签的,那么我们现在重新调度一下,看看它会发生什么样的变化,CTL play, 杠Y。
18:08
DEMO赛回收,按照预期啊,我们的pod会调度到WORKER1节点,我们来一起查一下哈酷CTL guide或者对吧,哎,我们输出一下节点的信息对吧,它是不是只调肚子里一个呀。通过我们的嗯,Node select这个参数,是不是我们调度到了这个worker一节点呢?是不是就符合我们的预期的呢?那么这个就是我们选择节点的,就是和节点直接绑定的这么一个实验,好吧,来,我们再来把这个回退一下。D-F,好,我们来开始下一个实验哈,等S来这里呢,我又准备了几个参数。
19:00
这个是什么意思呢?我们一起来看一下。这里我配置了一个容忍啊容忍,你看king node-road.cooperio,然后斜杠master,这个是什么意思?这个是master节点默认自带的一个标签,而且呢,这个标签还。有一个默认的效果就是nok,对不对,也就是相当于master节点默认是不调度任何的。哎,我们一起可以来一起看一下啊,Cooper city l be, 然后no,嗯,Master来看一下啊,我们找一找有没有对应的污点呢?诶找到了,你看他in污点是吧,Not干肉.coer.IO,然后master对不对,然后效果是no,盖丢了这个标签的效果是no scheduler, 也就是禁止调度,所以说我们如果说想调度在这个节点上,我们需要配置对应的容忍。
20:08
来,我们再来看一下我们的两部文件,我们的容忍是怎么配置的?来,我们再来看一下哈,是不是先通过这个K匹配到这个标签,然后再匹配上对应的效果,对吧?然后这个oper operator是一个预算符,存在什么意思?这个标签存在这个效果即容忍。对吧,来我们一起来执行一下啊啊在执行之前呢,我们先把这个先给去掉吧,因为嗯,可能会影响到实验的效果,好吧。CTL play杠。那杠F,然后是Le回撤,按照预期,是不是现在master节点上也应该会调度到一个port呢?我们一起来查一下吧,Cooper CTL guide port, 嗯。
21:07
O wine.哦,我看一下啊看哦,Wide我错了哦,这样对吧,我们可以通过node的标识来看到WORKER1有了,WORKER2也有了,Master也有了,是不是我们又通过了容忍的方式将demon赛的成功的调度到了这个节点呢?这个就是demon set的一个使用高级特性。嗯,实验到这里呢,就已经做完了,我们在PPT部分强调的5个使用场景会在后面的实战阶段再详细的讲到这里,基础的巅峰赛的使用就结束了,感谢各位战友的聆听,再见。
我来说两句