zoukankan      html  css  js  c++  java
  • K8s的调度策略

    Scuedulor是K8s的调度器
    sheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName为空的 pod,对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上
     
    Kubernetes的调度器以插件化形式实现的,方便用户定制和二次开发。用户可以自定义调度器并以插件形式与Kubernetes集成,或集成其他调度器,便于调度不同类型的任务。

    Kubernetes调度器的源码位于kubernetes/plugin/中,大体的代码目录结构如下所示:
    kubernetes/plugin/pkg/  
    `-- scheduler               //调度相关的具体实现              
    |-- algorithm
    |   |-- predicates       //节点筛选策略
    |   `-- priorities         //节点打分策略
    |       `-- util
    |-- algorithmprovider
    |   `-- defaults          //定义默认的调度器 

    Predicate 预选过程——过滤不满足条件的节点,满足要求的节点在第二阶段输出
    • PodFitsResources:节点上剩余的资源是否大于 pod 请求的资源
    • PodFitsHost:如果 pod 指定了 NodeName,检查节点名称是否和 NodeName 匹配
    • PodFitsHostPorts:节点上已经使用的 port 是否和 pod 申请的 port 冲突
    • PodSelectorMatches:过滤掉和 pod 指定的 label 不匹配的节点
    • NoDiskConflict:已经 mount 的 volume 和 pod 指定的 volume 不冲突,除非它们都是只读

    如果predicate过程中没有合适的节点,pod会一直处于pending状态,直到出现满足条件的节点

    Priorities 第二阶段,如果出现多个满足条件的节点,如何计算优先级?
    • BalancedResourceAllocation:节点上 CPU 和 Memory 使用率越接近,权重越高。这个应该和上面的一起使用,不应该单独使用
    • ImageLocalityPriority:倾向于已经有要使用镜像的节点,镜像总大小值越大,权重越高

    Kubernetes中的调度策略主要分为全局调度与运行时调度2种。其中全局调度策略在调度器启动时配置,而运行时调度策略主要包括选择节点(
    nodeSelector),节点亲和性(nodeAffinity),pod亲和与反亲和性(podAffinity与podAntiAffinity)。Node Affinity、
    podAffinity/AntiAffinity以及后文即将介绍的污点(Taints)与容忍(tolerations)等特性,在Kuberntes1.6中均处于Beta阶段。
  • 相关阅读:
    CentOS7 配置163 yum源(详细步骤)
    从构建分布式秒杀系统聊聊分布式锁
    互联网架构“高并发”
    互联网架构“高可用”
    FineCMS
    layUI表单事件监听-事件监听机制简化处理
    界面优雅的UI框架layUI
    如果OCX使用onmousedown和onmouseup来决定指令发送和指令停止会不会有问题?
    CSS字体库font-face用法及跨域问题
    RequireJS被外部调用
  • 原文地址:https://www.cnblogs.com/spillage/p/10429800.html
Copyright © 2011-2022 走看看