00:00
大家好。欢迎大家继续收看上硅谷的Linux云计算视频,我是汪洋老师。那在最近的学习中呢,我们已经解决了很多问题了,对吧,但是其实现在我们还有一个小问题,就是。我们发现每次泡的被调度的时候都是一个水汽事件,对吧,我并不知道。这个炮弹会被降度到哪一个节点?那如果有些节点会有一些特殊属性怎么办?比如举个例子。这两个节点20和2.1是我们现在的工作节点,对吧,假设现在20这个节点呢,它的CPU内存很大,非常适合一些并行计算的这么一些。应用程序,或者CPU高利用率的这么一些应用程序。我们把它简称为CPU密集型服务,对吧,适合放在这里去运行,那这个节点呢,它的磁盘呢,全是我们的SSD的pcie的接口啊,速度非常之快,适合运行一些比如序列索引啊,排序的这么一些状态,对吧。
01:05
好,那但是虽然我们有这么两个特性,我们的管理员也知道,但是你会发现在我们的pod调度的时候,你根本没办法进行控制,把它放在哪一个上面去运行,比如MYSQL,哎,我想把它放在这个固态上去运行,比如我们的ingx,哎,我想把它放在我们的这个去运行,你们完全没有办法去控制它是一个随机事件,并且他也判断不了这里到底是不是SSD。很好吧,很好理解我的意思吧,好,那这节的课程中呢,我们就给大家去讲一下我们的K8S中的一个调度策略的问题。并且。在学习完成以后,我们能够做到,诶,我想把它调到哪个节点,就把它调度到哪个节点,以及一些更复杂的一些运算都是可以达成的。那今天的课程中呢,我们主要是以以下几点去给大家讲解,第一个就是K8S的一个调度说明,以及调度亲和性污点和固定节点的选择方式,这么几部分给大家去讲解。
02:09
好,我们先看第一部分我们的K8S的调度器的调度说明。那我们的S呢,是K8S调度器,我们有这么一个组件,对吧,主要的任务就是负责把定义的的分贝在集群的节点下,听起来非常简单,但是有很多需要考虑的问题。这比较类似于什么呢?比较类似于我们的Linux操作系统里面的CPU的调度原则。怎么样尽可能的让每个应用程序能分配到最合理的一个资源,让他们能够做平最平稳的这么一种运行的状态是比较难的,或者非常难的。啊,所以我们的Linux里面呢,有个叫做公平调度原则,对吧,主要就是保存这么一个事情的。那在我们的六组件里呢,它也有以下的部分需要被实现,第一个就是我们的公平保证每个节点都能够被分配到资源,你不能有的分配多,有的分配的少,对吧,你给他多一点,给他少一点,那肯定是不愿意的。那第二就是资源的高效利用,怎么能够将我们的集群里的资源比较合理的最大化利用。
03:20
你别第一个节点啊,现在的CPU利用率90%了,第二个节点CPU利用率10%,这肯定是不合理的,对吧?好,第三个效率,你得尽快的能够完成调度工作,对你选择的调度的结果,非趁你保证了每一个节点都处于一个相对平稳的状态,他们的利用率都非常接近,结果你调度一个炮子需要十分钟的时间,那这太不靠谱了,对吧?效率很重要,那下一个灵活,如果你的这些调度策略不能够满足我们用户的一些需求,那我的用户能不能自已去通过开发去去准备一些自己的调度逻辑去运行,那这也是我们的灵活的一个重要体现,对吧,那丢了呢,就满足了我们这么一些特点去创建出来的。
04:10
好,那六呢是作为单独的程序运行启动之后会一直坚挺IPS,那这里的坚挺其实相对来说就是一个连接,持续连接状态,获取pod no name为空的pod。对每个pod都会创建一个班顶,表明pod应该在哪个节点上运行,那这里有个说法,就是获取pod Spark no name为空的pod。也就是如果这个字段里面有值的话,就代表我是不需要对了进行调度的。因为这个代表的含义就是我的pod要在哪个node节点上去运行,那我都指定了,所以丢了是不需要参与进来的,除此以外,丢了都会参与进来,会被它分配一个node建立绑定关系,证明它需要在哪个节点上运行,那对应节点的库light就会在我们的监听里得到这个信息,会在对应的。
05:04
Pod上啊,对应的我们的note上去进行对应的pod这么一个结果。好,那接下来呢,给大家看一下我们的调度过程,带大家去看一下,首先调度过程呢,分为几个部分,首先是过滤掉不满足条件,不满足条件的节点,那这个过程呢,成为我们的预选,然后通过节点呢,按照优先级的排序,这个是我们的优选,最后从选择的优先级最高的节点,那如果中间有任何一个步骤有错误,直接返回报错信息,那这个就是我们的一个调度过程。也就是对于调度过程分为两部分,预选和优选。那预选中呢,有些算法可以被我们使用,第一个呢,是我们的,叫做pod fat resource,那节点上剩余的资源是否满足我们炮的请求资源?这个如果不行的话,直接被pass掉,这个节点就被pass掉了。
06:02
也就意味着,对于我们的预选策略中,如果有任何一个启用的策略不满足,那等待no的就是被排除。没有什么可言性,好,下一个是我们的如果指定的pod,如果pod指定的node name,那检查我们的节点名称是否与no name匹配,不匹配,排除节点上是否使用了我们的pod。和我们的pod申请的pod处于冲突,有冲突排除那过滤的pod指定的label标签不匹配的节点,如果不匹配,排除。已经mount的wall和pod指定的wall是不是冲突。如果冲突排除。这都是我们已经启用的一系列的算法,那在这个过程中呢,如果没有合适的节点,那pod就会一直处于一个判定状态,不断的重新调度,直到有节点满足条件。经过这个步骤,如果有多个节点满足条件,那么接下来就会进行所谓的优选。
07:03
这个比较像什么呢?像我们的人资。人真,如果我们的企业有一定的需求,比如我们现在要招聘一个Linux讲师,对吧?那我们去向我们的外界去发布我们的招聘要求。那所有的人过来以后呢,我们会按照要求去筛选。那筛选出来,如果没有人的话,那再等,再去等下一批的应聘者,那如果有人满足要求以后,假设我们只要一个零六僵尸,那他就会在这个满足的队内去挑选出来一个最好最匹配我们企业的这么一个僵尸存在,对吧,那他就会被录取,那在我们node里也是一样的,他会去挑选我们与。Node跟pod之间的关联有没有满足他要求的?如果有的话,会把这一系列的node给它列举出来,再从中挑选一个最满足我们炮的运行的这么一个状态的这么一个节点。在这里也是一样,那也就是第一个过滤的方案呢,就是我们的预选,第二呢就是我们的优选好那优先级有一系列的建制,对手组成剑是该优先级项的名称,只是它的权重,那该项的重要性,这些的优先级包括第一个。
08:17
计算我们的CPU和内存的使用率决定权重,使用率越低,权重越高。那换句话说,这个优先级指标更倾向于资源使用比例更低的节点。好。第二个,CPU和内存使用率越接近,权重越高。那这个呢,一般会和上面一起使用,不会单独使用,这个的含义是什么?比如举个例子。这里呢,我们的CPU使用率是20%,内存使用率呢是60%,另一边CPU使用率是50%,内存使用率是50%,那这个可能它的占比是80,它可能占比是100,对于第一项来说,但是第二项。但是第二项虽然它消耗的资源大对吧,但是第二项诶,他们的CPU和内存更接近比例是1:1的关系,你这里是1:3的关系,证明你这边呢,我们的资源的调用不太好,对吧,所以他会把只是请求分配给第二个节点。
09:14
能理解我的意思吧,好。第三个倾向于已经有要使用镜像的节点,镜像的总大小值越大,权重越高。那这个的含义就是,如果我们的镜像处于,也就是我们对应的no的节点,它的镜像越大,那它的这么一个权重就会越高,根据这些权重的累加,那去确定到底要把这次的pad放在哪一个阶段上去运行,这就是我们所谓的优选。当然。如果我们的这些。调度的一些算法还不满足你的请求,需要注意一下啊,我这里只是给大家列举的一些常见的一些算法,还有很多,你可以访问K8S的官网进行查阅,完全没有问题,那在这里呢,我们就不过多介绍了,因为它设计已经非常友好了,不需要我们去进行什么所谓的更改。当然如果你这些要求还不满足你的要求的话,你可以自己去通过语言按照K8S的接口去编写一个新的调度器,这也是完全没有问题的,只需要在pod中去选择你的调度器即可。
10:21
好,那这个呢,就是我们的一个K8S的这么一个调度器的这么一个过程的说明。
我来说两句