zoukankan      html  css  js  c++  java
  • 大规模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

  • 相关阅读:
    css 和 svg 实现蚂蚁行军效果
    ASP.NET Core使用Swagger实现接口文档并分组
    Centos7+DockerCompose部署ASP.NET Core3.1应用
    Centos7+Docker部署ASP.NET Core3.1应用
    ASP.NET Core下的Cache
    在asp.net web form项目中添加webapi接口
    windows服务中对外提供API接口
    ASP.NET Core使用log4net记录日志
    SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH
    C# 调用微信接口上传素材和发送图文消息
  • 原文地址:https://www.cnblogs.com/orchidzjl/p/12466348.html
Copyright © 2011-2022 走看看