大规模k8s集群的优化思路

整理出来的大规模集群优化点

调度器相关:

1. 在预选和优选时,多个节点之间并发的执行预选策略和优选策略(单个节点还是按顺序执行预选和优选策略的)

2. 算法执行过程中需要用到的如node、pod等信息使用Informer缓存起来

3. 当通过预选和优选得到最优的节点时,不在调度路径中请求api-server进行bind操作,而是乐观的在cache中进行bind,之后再发起goroute异步的更新api-server

4. 预选阶段中某个节点无法满足某个预选策略,那么对于这个节点剩下的预选策略就没有必要继续计算(alwaysCheckAllPredicates)

5. (来自阿里)预选过程中当选取了N个节点时,就停止预选到达优选过程,在k8s 1.12版本之后允许用户通过percentageOfNodesToScore配置百分比,比如对于1000个节点的集群,percentageOfNodesToScore为15时表示预选过程将选择150个节点来进行优选。在k8s 1.14之后,如果没有配置percentageOfNodesToScore,那么将会通过如下逻辑自动计算出一个值:

percentageOfNodesToScore=max(5, 50 - node总数/125)

为了使群集中的所有节点都有运行Pods的机会,调度程序以循环方式遍历节点。可以想象节点在数组中,调度程序从数组的开头,检查节点的可行性,直到找到由指定的足够的节点percentageOfNodesToScore。对于下一个Pod,调度程序从检查先前Pod的Nodes可行性时停止在Node数组中的位置继续工作。

其他

1. 使用Lease Object来向master发送心跳,原NodeStatus仍然保留,Lease Object更轻量

猜你喜欢

转载自www.cnblogs.com/orchidzjl/p/12466348.html