您的位置:首页 > 其它

k8s容器调度策略

2017-01-16 11:46 225 查看
当新增一个容器时,集群会在可用的集群节点中寻找最合适的节点来运行相应的容器。

首先,集群会排出如下节点:

a. 节点状态为不可用的“如节点不通或者k8s服务运行异常等”;

b. 节点剩余的CPU,内存资源不足以运行容器的;

c. 容器运行时占用的宿主机端口出现冲突的;

d. 按照节点选择label不匹配的;

在排除不符合的节idanzhihou,剩下的节点均为候选节点。容器具体调度到集群的哪台宿主机上,由调度器的积分机制决定。

例如节点A的打分将由如下公式决定:

finalScoreNodeA = (weight1 * priorityFunc1) + (weight2 * priorityFunc2) + ……

这里,有不同的评价策略以及其权重。每个节点获得的分值为节点按照各个评价策略及权重加和的值。

默认的选择策略如下:

LeastRequestedPriority

打分标准公式如下:

cpu ( ( capacity - sum ( requested ) ) * 10 / capacity) + memory ( ( capacity - sum ( requested) ) * 10 / capacity ) /2

例如CPU的可用资源为100,运行容器申请的资源为15,则cpu分值为8.5分,内存可用资源为100,运行容器申请资源为20,则内存分支为8分。则此评价规则在此节点的分数为(8.5 +8) / 2 = 8.25分。

BalanceResourceAllocation

打分标准公式如下:

score = 10 -abs ( cpuFraction - memoryFraction ) * 10

其中, cpuFraction = requested / capacity, memoryFraction = requested / capacity

该调度策略是出于平衡度的考虑,避免出现CPU,内存消耗不均匀的事情。例如某节点的CPU剩余资源还比较充裕,假如为100,申请10,则cpuFraction为0.1,而内存剩余资源不多,假如为20,申请10,则memoryFraction为0.5,这样由于CPU和内存使用不均衡,此节点的得分为10-abs ( 0.1 - 0.5 ) * 10 = 6 分。假如CPU和内存资源比较均衡,例如两者都为0.5,那么代入公式,则得分为10分。

CalculateSpreadPriority

此处的打分原则是:

Score = 10 * ((maxCount -counts)/ (maxCount))

这里主要针对多实例的情况下使用。例如,一个web服务,可能存在5个实例,例如当前节点已经分配了2个实例了,则本节点的得分为10*((5-2)/ 5)=6分,而没有分配实例的节点,则得分为10 * ((5-0) / 5)=10分。没有分配实例的节点得分越高。

默认的各个调度的策略权重为1,因此,调度的结果为各个调度策略得分的和,然后按照得分进行排序处理。

通过如上的评判标准,k8s积分制评价出各个节点的得分值,按照得分多少,将容器运行在最佳节点上。

另:节点的调度规则是采用的plugin方式,可自行编写调度策略进行调度打分处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息