首页 > 其他分享 >在K8S中,影响Pod调度策略的有哪些?

在K8S中,影响Pod调度策略的有哪些?

时间:2024-08-12 19:07:03浏览次数:12  
标签:Node 优先级 亲和性 调度 Pod K8S 节点

在Kubernetes(K8S)中,影响Pod调度策略的因素众多,这些因素共同决定了Pod最终将被调度到哪个节点上运行。以下是影响Pod调度策略的主要因素:

1. 资源请求与限额
  • 资源请求(Requests):Pod在创建时会声明需要的最小资源量,如CPU和内存。调度器会寻找至少能满足这些资源请求的Node进行调度。
  • 资源限额(Limits):Pod可使用的最大资源量,超过限额可能会被系统限制或终止。虽然资源限额本身不直接影响调度决策,但它为Pod的运行设定了上限,间接影响了Pod的调度兼容性。
2. 节点选择器(NodeSelector)
  • 通过匹配Node上的标签(labels)来决定Pod应被调度到哪些Node上。如果Pod的nodeSelector属性与某个Node的标签匹配,则该Pod有可能被调度到该Node上。
3. 节点亲和性(NodeAffinity)
  • NodeAffinity是NodeSelector的扩展,提供了更灵活的调度策略。它支持硬亲和性和软亲和性规则:
    • 硬亲和性:必须满足指定的规则才可以调度Pod到Node上,相当于硬限制。
    • 软亲和性:调度器会尝试调度Pod到满足指定规则的Node上,但并不强求,相当于软限制。
4. Pod亲和性与反亲和性(PodAffinity/PodAntiAffinity)
  • 控制Pod之间相互的位置关系:
    • Pod亲和性:将Pod调度到已存在特定Pod的Node上。
    • Pod反亲和性:避免将Pod调度到已有特定Pod的Node上。
5. 污点与容忍(Taints and Tolerations)
  • 污点(Taints):定义在Node上,用于让Node拒绝Pod的运行,除非Pod定义了对应的容忍(Tolerations)。
  • 容忍(Tolerations):Pod能够容忍Node上的污点,从而允许Pod在该Node上运行。污点有不同的效果(如NoSchedule、PreferNoSchedule、NoExecute),决定了Pod的调度和驱逐行为。
6. 优先级与抢占(Priority and Preemption)
  • 优先级(PriorityClass):Pod可以被赋予一个优先级,高优先级的Pod可能抢占低优先级Pod的资源进行调度。
  • 抢占(Preemption):当集群资源不足时,抢占机制允许终止低优先级的Pod以便高优先级的Pod可以调度运行。
7. 其他因素
  • 地理分布和网络延迟:在多区域或多可用区的集群中,这些因素也可能成为调度考量的一部分。
  • 存储需求:如果Pod需要挂载持久卷(PV),调度时需要考虑PV的可用性和存储类(StorageClass)等因素。
  • 节点状态:如节点的内存、CPU、磁盘压力等,调度器会避免将Pod调度到状态不佳的节点上。
  • 维护操作:控制在维护操作期间允许中断的Pod数量,以保持应用的可用性。
8. 调度流程简述

Kubernetes的调度流程通常包括以下几个步骤:

  1. 过滤阶段:调度器会排除所有不满足Pod特定调度需求的节点,得到一个包含所有可调度节点的列表。
  2. 优先级排序:调度器会根据当前启用的优先级函数为每一个可调度节点进行打分,最后选择得分最高的节点来运行Pod。
  3. 选择最优节点:如果存在多个得分最高的节点,调度器可能会随机选择一个节点,或者根据其他策略(如轮询、最少调度Pod数等)来选择。
  4. 绑定阶段:一旦选择了最优节点,调度器就会将这个调度决策通知给kube-apiserver,这个过程叫做绑定(Bind)。

综上所述,Kubernetes的Pod调度策略是一个综合考虑多种因素的过程,旨在确保Pod能够在满足资源需求的同时,符合各种约束条件和策略要求。

标签:Node,优先级,亲和性,调度,Pod,K8S,节点
From: https://www.cnblogs.com/huangjiabobk/p/18355566

相关文章

  • 大数据工作流调度系统dolphinscheduler
    ApacheDolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度系统,它具备以下主要特性:1. 易于部署和使用:DolphinScheduler提供了多种部署方式,包括Standalone、Cluster、Docker和Kubernetes,并且可以通过WebUI、PythonSDK、Yaml文件和OpenAPI来创建和......
  • kubernetes记录一起因为磁盘容量不足造成pod无线驱逐pod状态为Evicted
    线上的pod遭到无线的驱逐fxxx-xxxx-deploy-86684b76ff-2vkdx0/1Evicted030m<none>10.10.10.10<none><none>fxxx-xxxx-deploy-86684b76ff-5j6fd0/1Evicted030m<none&......
  • k8s技术总结(一)
    在学习完docker之后,也很有必要再学习k8s的一些理论和技术。一、基础概念kubernetes(k8s)和docker在容器管理领域具有不同的侧重点和优势。当前docker主要关注单个容器的构建、运行和管理,而k8s则专注于大规模的容器编排和管理。k8s在以下几个特性中,更具有优势。特性1:自动化部署和......
  • haproxy负载均衡之-调度算法详解
    HAProxy的调度算法分为静态调度算法、动态调度算法和其他调度算法静态算法:按照事先定义好的规则轮询公平调度,不关⼼后端服务器的当前负载、链接数和响应速度等,且⽆法实时修改权重,只能靠重启HAProxy⽣效。动态算法:基于后端服务器状态进⾏调度适当调整,⽐如优先调度⾄当前负载较......
  • Kubernetes-Init容器与静态Pod
    目录Init容器什么是Init容器?理解init容器Init容器与普通容器的不同之处静态Pod通过配置文件创建Init容器在Pod的生命周期中,可以执行多种操作如下图:什么是Init容器?Init容器也就是我们平时常说的初始化容器。InitContainer就是用来做初始化工作的容器,可以是一个或者多个,如果有......
  • kubernetes-POD的基本原理
    目录什么是POD?POD有以下特点:为什么使用POD作为最小单元,而不是container为什么允许一个POD里有多个容器POD中如何管理多个容器POD的yaml格式定义配置文件说明如何使用PodPOD的持久性和终止Pause我们首先在节点上运行一个pause容器然后再运行一个nginx容器,nginx将为localhost:2368......
  • CertBot搭配DNSPod
    CertBot搭配DNSPodsummary:cetbot搭配dnspod实现自动注册ssl证书和自动续期......
  • k8s命令
    k8s关键命令集群详细信息:显示Kubernetes版本:kubectlversion显示集群信息:kubectlcluster-info列出集群中的所有节点:kubectlgetnodes查看一个具体的节点详情:kubectldescribenodesrenode列出所有命名空间:kubectlgetnamespaces列出所有命名......
  • 【云原生之kubernetes实战】在k8s环境下部署Note Mark笔记工具
    【云原生之kubernetes实战】在k8s环境下部署NoteMark笔记工具一、NoteMark介绍1.1NoteMark简介1.2NoteMark特点1.3NoteMark使用场景二、本次实践介绍2.1本次实践简介2.2本次环境规划2.2k8s存储介绍三、检查k8s环境3.1检查工作节点状态3......
  • 【K8s】专题九:Kubernetes 常用命令汇总
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录写在前边一、集群相关1、查看集群信息2、查看集群服务3、查看集群组件4、查看集群版本5、查看集群API版本二、节点相关1、查看节点状态2......