• 大规模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数组中的位置继续工作。

    节点资源利用

    这里主要是要结合pod、node的历史监控数据,比如腾讯云提到的Pod资源压缩和Node资源超卖的方案,其中Pod资源压缩通过mutating admission webhook拦截pod创建请求根据pod历史资源情况压缩request和limit值,而Node资源超卖则同样利用mutating webhook拦截node status update事件,根据节点历史资源利用情况动态修正node allocatable值以便可以容纳更多或更少的pod

    kubelet

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

    参考链接

    https://www.infoq.cn/article/wyjT7HApETsiEAMoiL7Z?utm_source=related_read

  • 相关阅读:
    C# Process执行bat
    Auto Clear Unity Console Log
    Unity原厂讲师大解密
    setSystemUiVisibility() 与 getSystemUiVisibility() 显示隐藏状态栏
    Android 6.0 动态权限申请
    Android6.0动态权限申请步骤以及需要注意的一些坑
    基于Rebound制造绚丽的动画效果-入门篇
    Rebound-Android的弹簧动画库
    Rebound动画框架简单介绍
    让动画不再僵硬:Facebook Rebound Android动画库介绍
  • 原文地址:https://www.cnblogs.com/orchidzjl/p/12466348.html
Copyright © 2020-2023  润新知