k8s部署-37-带你了解并自定义pod调度策略(上)

Posted 公号运维家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s部署-37-带你了解并自定义pod调度策略(上)相关的知识,希望对你有一定的参考价值。

k8s部署-37-带你了解并自定义pod调度策略(上)_优先级队列


我们经常会生成一个或者多个pod,在这个过程中我们并没有人工干预这个pod调度在哪个节点上,那么k8s是根据什么来判断调度规则的呢?我们有没有办法参与这个调度过程,让这个pod根据我们的想法来调度在我们想调度到的服务器上呢?k8s部署-37-带你了解并自定义pod调度策略(上)_优先级队列_02

前言

本文是理论,下篇我们写实操。

架构回顾

先回顾下我们的k8s架构吧,如下图:

k8s部署-37-带你了解并自定义pod调度策略(上)_优先级队列_03


那么我们的调度主要是Scheduler的服务,对吧。好,知道这个之后往下看。


调度策略

首先我们的存储是依靠的etcd数据库,还有和ETCD交互的Apiserser服务,以及调用Apiserver服务的Scheduler,如下图;

k8s部署-37-带你了解并自定义pod调度策略(上)_数据库_04


其次,Scheduler里面配置了一个优先级队列,这个队列里面放置了什么内容呢,就是等待被调度的POD,至于为什么要优先级队列,是因为POD有些是比较重要的,或者是提前进入的队列。

k8s部署-37-带你了解并自定义pod调度策略(上)_优先级队列_05


当我们有了优先级队列之后,是不是还需要一个服务往队列里面写内容啊,那么Scheduler又提供了一个Informer的服务,他呢,会通过Apiserver从ETCD数据库中监听有变化的数据,比如说发现了一个新增pod的数据。

k8s部署-37-带你了解并自定义pod调度策略(上)_数据库_06


他拿到数据之后呢,会将其放入优先级队列里面,等待被调度。PS:题外话,Informer是如何知道该POD是否应该被调度呢?是因为已经被调度过的pod会新增一个nodename字段,没有该字段的自然就需要被调度了。

k8s部署-37-带你了解并自定义pod调度策略(上)_优先级队列_07


放入优先级队列之后就应该考虑具体调用到哪个节点上了,要判断这个的前提,我们更应该知道我们的node节点上分别都还剩余哪些资源是吧。那么这个时候k8s引入了一个Cache,他是干什么的呢?


他是通过Apiserver来获取具体信息的,比如有多少个节点,每个节点一共多少资源,剩余了多少资源,有哪些镜像之类的服务,获取到之后存放到自己这里。

k8s部署-37-带你了解并自定义pod调度策略(上)_优先级队列_08


所有准备工作做完之后,就开始正式的进行调度了,正式调度分为两步骤,第一个是预选策略,就是用来筛选出来满足我们pod运行条件的节点,比如node是否健康,CPU、MEM等资源是否满足需要,亦或者亲和性和污点的筛选。

第二个是优选策略,看下经过预选策略的node节点哪个分值更高,更适合进行调度该pod。

剩余内容请转至VX公众号 “运维家” ,回复 “144” 查看。

以上是关于k8s部署-37-带你了解并自定义pod调度策略(上)的主要内容,如果未能解决你的问题,请参考以下文章

k8s 常用调度策略使用详解

k8s -深入了解 Pod

k8s -深入了解 Pod

k8s -深入了解 Pod

k8s -深入了解 Pod

k8s部署-39-pod有哪几种部署方式呢?能不能回滚版本呢?带你了解。