Kubernetes控制平面组件:调度器Scheduler(一)
云原生学习路线导航页(持续更新中)
- kubernetes学习系列快捷链接
- Kubernetes架构原则和对象设计(一)
- Kubernetes架构原则和对象设计(二)
- Kubernetes架构原则和对象设计(三)
- Kubernetes控制平面组件:etcd(一)
- Kubernetes控制平面组件:etcd(二)
- Kubernetes控制平面组件:API Server详解(一)
- Kubernetes控制平面组件:API Server详解(二)
- Kubernetes控制平面组件:调度器Scheduler(一)
- Kubernetes控制平面组件:调度器Scheduler(二)
本文是kubernetes的控制面组件调度器Scheduler第一篇,首先介绍了kubernetes调度器的基础、核心原理,然后分别介绍了调度过程的2个阶段:Predicates&Priority,之后详细介绍了Pod资源配置基于cgroups的底层原理,以及pod资源对kubernetes调度器的作用,最后还给出了kube-scheduler源码分析的关键点
- 希望大家多多 点赞 关注 评论 收藏,作者会更有动力继续编写技术文章
1.kube-scheduler基础
1.1.kube-scheduler介绍
1.1.1.scheduler是什么

- scheduler是什么
- Kubernetes调度器(kube-scheduler)是集群资源调度的核心组件,负责将未绑定节点的Pod分配到满足资源需求和策略约束的Worker节点上。
- scheduler核心功能
- 资源优化:基于CPU、内存等资源请求,均衡节点负载,避免局部热点。
- 策略执行:支持亲和性(Affinity)、反亲和性(Anti-Affinity)、污点容忍(Taints/Tolerations)等规则。
- 高可用性:通过分布式调度避免单点故障,支持多调度器共存。
- 扩展性:通过插件化架构(Scheduling Framework)支持自定义调度逻辑。
1.1.2.调度器如何标记pod该调度到哪个节点?
- 通过Pod的NodeName字段。
- 调度器监听所有没有设置NodeName的pod,然后通过一系列调度算法计算出调度到哪个Node上,然后将Node写入pod的NodeName字段
- 后续由对应Node上的kubelet负责将Pod容器拉起来
1.1.3.scheduler本质也是一个生产者-消费者模型
- 生产者:scheduler通过 list-informer 机制监听api-server的pod事件,将未调度的pod的name放入一个队列中,等待调度
- 消费者:scheduler还包括一些worker,监听队列,取出podName,对相应的pod进行调度
1.1.4.调度需要考虑什么因素
- 优先级:保证高优先级优先调度,以及资源不足时是否可抢占…
- 公平性:同一优先级下,如何保证公平性,比如先进先出
- 资源高效利用:资源可以分成 可压缩、不可压缩 两类,调度的时候需要考虑多元资源调度,比如同时存在多个节点符合资源条件时,怎么调度能保证资源使用率更高
- Qos:考虑pod调度在node上的服务质量
- 亲和、反亲和性:比如两个相关的服务,被调度在同一台机器,在发生调用的时候就不是网络调用,不会走到物理网卡,效率和稳定性都会更高
- 数据本地化:大多是在大数据领域出现,大数据领域大都有很多待处理的文件,那么调度的时候就有两种情况:1)pod启动后网络传输文件;2)直接调度到存在该文件的那几台机器上,把进程/作业传过去,避免传输大量数据,作业找数据
- 内部负载干扰
- deadlines
1.2.kube-scheduler核心原理

- 声明式调度:基于Pod的资源请求和策略定义,而非命令式指令。
- 调度队列管理:
- Active Queue:存储待调度Pod,按优先级排序(如Pod优先级类)。
- Backoff Queue:存放调度失败的Pod,采用指数退避机制重试。
- 调度缓存(Scheduler Cache):
- 维护集群节点和Pod的实时状态,减少对API Server的直接访问。
- 调度流程:
- 预选(Predicates):过滤不满足资源请求、端口冲突或策略限制的节点。
- 优选(Priorities):计算节点得分(如资源利用率、亲和性权重),选择最优节点。
- 绑定(Binding):将Pod与节点绑定,触发kubelet启动容器。
- 插件化架构:通过Scheduling Framework定义扩展点(如predicate、priority都允许自定义调度策略),支持按需扩展调度逻辑。
1.3.与其他调度系统的对比
| 系统 | 核心差异 |
|---|---|
| Docker Swarm | 仅支持简单策略(如节点标签),缺乏K8s的插件化扩展能力。 |
| Apache Mesos | 通用资源调度框架,支持非容器负载,但容器生态和调度策略灵活性不及K8s。 |
| OpenShift | 基于K8s增强企业级功能(如安全策略、CI/CD集成),但核心调度逻辑与K8s一致。 |
| Nomad | 支持多类型工作负载(容器、VM),但缺乏K8s的丰富调度插件和生态系统。 |
2.kube-scheduler调度计算:Predicate阶段
2.1.Predicates 工作原理
- Predicates阶段包含很多Plugin插件,用于过滤不满足条件的node,每运行完一些Plugin,满足条件的Node就会越少。
- 最开始输入为All Nodes,所有插件运行完成,最终剩下的就是满足条件的 Node List

2.2.Predicates 常见 Plugins
- kube-scheduler是插件化设计,拥有很多Predicate插件
- 这里仅列出一些常用的调度策略,实际上还有很多其他的,另外也支持自定义调度predicates策略


2.2.1.PodFitsHostPorts
- 功能:检查候选节点是否存在 HostPort 端口冲突。
- 原理:遍历节点上所有已绑定
hostPort的 Pod,若当前 Pod 声明的hostPort已被占用,则过滤该节点。 - 场景:适用于使用
hostNetwork: true的 Pod,避免端口冲突(如 Nginx 监听 80 端口)。
2.2.2.PodFitsPorts
- 功能:与
PodFitsHostPorts功能相同,可能是旧版本别名或笔误。 - 注意:实际调度器中无此插件,应为
PodFitsHostPorts的重复描述,建议以PodFitsHostPorts为准。
2.2.3.PodFitsResources
- 功能:验证节点 资源是否充足(CPU、内存、GPU、Pod 配额等)。
- 原理:比较节点剩余资源与 Pod 的
requests,若满足以下条件则通过: - 节点可分配资源 ≥ Pod 请求资源。
- 节点 Pod 数量未超过
PodPerCore或MaxPods限制。 - 公式:
节点可分配资源 = 节点总资源 - 已分配资源 - 系统预留资源。
2.2.4. HostName
- 功能:强制 Pod 调度到
pod.Spec.NodeName指定的节点。 - 原理:仅当候选节点的名称与
NodeName完全匹配时通过检查。 - 场景:用于直接指定节点(如 DaemonSet 或运维手动调度)。
2.2.5. MatchNodeSelector
- 功能:校验候选节点 标签是否匹配 Pod 的
nodeSelector或nodeAffinity。 - 原理:检查节点标签是否满足 Pod 的
spec.affinity.nodeAffinity或spec.nodeSelector条件。 - 示例:若 Pod 要求
disk=ssd,则仅调度到有此标签的节点。
2.2.6. NoVolumeZoneConflict
- 功能:确保 Pod 使用的 持久卷(PV)与节点处于同一可用区。
- 原理:检查 PV 的
topology.kubernetes.io/zone标签与节点标签是否一致,避免跨区域访问导致延迟或故障。 - 场景:云环境(如 AWS/Azure)中基于可用区(Availability Zone)的容灾部署。
2.2.7.MatchInterPodAffinity
- 功能:检查 Pod 是否满足与其他 Pod 的亲和性/反亲和性规则。
- 原理:基于
podAffinity和podAntiAffinity配置,验证候选节点上已运行 Pod 的标签是否满足目标 Pod 的拓扑约束(如共置或隔离要求)。
2.2.8.NoDiskConflict
- 功能:检查候选节点是否存在 存储卷冲突(仅限于特定云存储)。
- 原理:验证节点是否已挂载相同存储卷(如 GCE PD、AWS EBS、Ceph RBD、iSCSI),避免多 Pod 同时读写导致数据损坏。
- 限制:仅适用于需要独占访问的块存储类型。
2.2.9.PodToleratesNodeTaints
- 功能:检查 Pod 是否容忍节点的 污点(Taints)。
- 原理:将 Pod 的
tolerations与节点taints列表匹配,若存在匹配的容忍规则则允许调度。 - 场景:控制 Pod 调度到专用节点(如 GPU 节点需容忍
nvidia.com/gpu:NoSchedule)。
2.2.10.CheckNodeMemoryPressure
- 功能:判断 Pod 能否调度到存在 内存压力 的节点。
- 原理:若节点报告
MemoryPressure状态,则仅允许调度Burstable/BestEffortQoS 级别的 Pod(无内存requests限制的 Pod)。
2.2.11.CheckNodeDiskPressure
- 功能:判断 Pod 能否调度到存在 磁盘压力 的节点。
- 原理:若节点报告
DiskPressure状态,则禁止调度新 Pod(系统守护进程 Pod 除外),防止磁盘资源耗尽。
2.2.12.NoVolumeNodeConflict
- 功能:检查节点是否满足 Pod 引用 Volume 的 访问条件。
- 原理:验证节点是否符合 Volume 的
nodeAffinity或访问模式(如ReadWriteOnce要求独占挂载)。 - 示例:本地持久卷(Local PV)需通过节点选择器绑定特定节点。
3.kube-scheduler调度计算:Priority 阶段
3.1.Priority工作原理
- Priority 阶段就是在打分,把经过Predicates阶段过滤后剩余的满足条件node list,经过一系列Priority策略的打分后,最终每个node都得到一个分数,取分数最高的node作为调度节点
- 注意:Priority策略并非同等重要,每一个Priority策略都有权重,在计算分数时,node得分计算公式:
node得分=求和(每个策略得分*权重)
3.2.Priority 常见Plugins
- kube-scheduler是插件化设计,拥有很多Priority插件
- 这里仅列出一些常用的调度策略,实际上还有很多其他的,另外也支持自定义调度Priority策略

3.2.1.SelectorSpreadPriority
- 功能:优先减少节点上属于同一 Service/ReplicationController 的 Pod 数量。
- 原理:通过计算节点上已运行的同服务 Pod 数量,选择同类 Pod 分布最分散 的节点,提升服务容灾能力。
- 场景:部署高可用服务(如 Web 前端)时避免单节点过载。
3.2.2.InterPodAffinityPriority
- 功能:优先将 Pod 调度到满足 Pod间亲和性/反亲和性规则 的拓扑域。
- 原理:根据
podAffinity/podAntiAffinity配置,匹配相同或不同拓扑域(节点/Rack/Zone)的 Pod 分布。 - 示例:数据库与缓存服务需共置(亲和性),或同类服务跨可用区部署(反亲和性)。
3.2.3.LeastRequestedPriority
- 功能:优先调度到 资源请求量少 的节点。优先调度到能满足要求并且剩余资源最少的节点
- 原理:基于节点剩余资源比例计算得分,公式:
得分 = (CPU剩余量 / CPU总量 + 内存剩余量 / 内存总量) / 2 * 10 - 优势:最大化资源利用率,适合资源密集型应用(如大数据任务)。
- 缺点:可能造成大量pod调度到相同node,使得部分node压力大,部分node很空
3.2.4.BalancedResourceAllocation
- 功能:优先平衡各节点的 资源使用比例。优先调度到能满足要求并且剩余资源最多的节点
- 原理:计算节点 CPU 和内存使用率的方差,选择资源消耗最均衡的节点,公式:
得分 = 10 - (|CPU使用率 - 内存使用率|) * 10 - 场景:避免节点出现 CPU 过载但内存空闲(或反之)的资源碎片问题。
3.2.5.NodePreferAvoidPodsPriority
- 功能:依据节点注解
alpha.kubernetes.io/preferAvoidPods决策调度权重。 - 原理:若节点存在此注解,则为该节点赋予 固定权重 10000,覆盖其他优先级策略。
- 用途:强制调度/驱逐特定 Pod(如系统关键组件),需谨慎使用(可能破坏常规调度逻辑)。
3.1.6.调度权重对比
| 插件名称 | 默认权重 | 优先级覆盖能力 |
|---|---|---|
| NodePreferAvoidPodsPriority | 10000 | 最高(覆盖其他策略) |
| InterPodAffinityPriority | 1000 | 高 |
| BalancedResourceAllocation | 1 | 低 |
4.Pod资源配置底层原理
4.1.Pod的 三种服务质量Qos

4.1.1.QoS 核心概念
- QoS(Quality of Service)是 Kubernetes 用于管理 Pod 资源分配与驱逐优先级的核心机制。
- QoS通过 Pod 容器的资源请求(
requests)和限制(limits)配置自动分配 QoS 类别,决定资源紧张时 Pod 的驱逐顺序。
4.1.2.QoS 分类规则
4.1.2.1.Guaranteed 有保证的(最高优先级)
- 核心条件:
- 所有容器必须同时设置 CPU 和内存的
requests和limits; - 每个容器的
requests必须等于limits(如cpu: 500m,memory: 1Gi)。
- 所有容器必须同时设置 CPU 和内存的
- 特点:
- 资源完全保障,仅在 Pod 自身超限或节点无更低优先级 Pod 时被驱逐;
- 可使用独占 CPU 核(通过
staticCPU 管理策略)。
4.1.2.2.Burstable 可超售的(中优先级)
- 核心条件:
- 不满足 Guaranteed 条件;
- 至少一个容器设置了 CPU 或内存的
requests或limits。
- 特点:
- 资源使用有下限保障,但允许弹性扩展(如未设
limits时默认使用节点剩余资源); - 驱逐优先级低于 BestEffort,但高于 Guaranteed。
- 资源使用有下限保障,但允许弹性扩展(如未设
4.1.2.3.BestEffort 尽力而为的(最低优先级)
- 核心条件:
- 所有容器均未设置 CPU 和内存的
requests和limits。
- 所有容器均未设置 CPU 和内存的
- 特点:
- 无资源保障,优先被驱逐;
- 适用于非关键任务(如日志收集)以最大化资源利用率。
4.1.3.QoS 对资源管理的具体影响
4.1.3.1.调度与资源分配
- 调度依据:Kubernetes 调度器仅基于
requests分配节点,limits不影响调度;- 比如一个node只有4个cpu,配置limits.cpu==5没有问题,可以调度。但是如果配置requests.cpu==5,pod就会一直Pending,事件报错 InSufficient Cpu 即cpu不足。
- 资源使用限制:
- CPU(可压缩资源):超限时被节流(Throttled),但进程不被终止;
- 内存(不可压缩资源):超限时触发 OOM Killer,进程被终止3,7。
- 调度器完成调度后,会把对应node上的资源信息,扣除掉这个requests
- 比如在node中可以看到总资源、可分配资源(去除系统预留资源之后的)
- 调度器看node是否满足资源要求时,看的就是这里

4.1.3.2.不同QoS适用业务
- 核心服务:使用 Guaranteed 确保稳定性(如数据库)
- 弹性服务:Burstable 适合 Web 服务等需灵活扩展的场景
- 临时任务:BestEffort 用于批处理或监控工具
- 节点分级:结合节点亲和性策略将不同 QoS Pod 调度到专用节点
4.1.4.Pod资源限制的生效原理:cgroups
4.1.4.1.核心机制概述
- Kubernetes 通过 cgroups 实现 Pod 资源限制的运行时控制
- Requests:仅影响调度决策,确保节点有足够资源容纳 Pod
- Limits:通过 cgroups 硬性限制容器运行时资源使用
- 资源类型差异:
- 可压缩资源(CPU):超限时被节流(Throttling)
- 不可压缩资源(内存):超限时触发 OOM Killer
4.1.4.2.CPU 资源实现细节
4.1.4.2.1.前置知识:CPU 的m是什么单位
- 在声明资源时,经常看到100m的cpu,这个m如何解释呢?
- 在虚拟机中,资源限制粒度是非常粗的,cpu至少要是1个,那么如何限制一个应用对cpu更细粒度的资源需求呢?
- m是一个1/1000的单位,1m即为1/1000个cpu。但cpu是个物理的,没办法分,只能从时间片上看,1个cpu一般是100000us(10w us),所以1/1000个cpu即为大约 100us。
4.1.4.2.2.CPU Requests 映射
- 通过 cpu.shares 控制 CPU 时间片分配比例
- 注:
cpu.shares是软限制,在存在多个进程时,通过cpu.shares控制时间分配比例# 计算方式 cpu.shares = requests.cpu * 1024 # 示例:requests.cpu=500m → cpu.shares = 500*1/1000*1024 = 512 # 其中 m==1/1000 - 仅在 CPU 资源争抢时生效,空闲 CPU 可超用
- Pod cpu Requests 配置路径示例:
/sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.shares
4.1.4.2.2.CPU Limits 映射
- 通过 CFS 配额机制 实现硬性限制:
cpu.cfs_period_us:调度周期(默认 100ms==100000us)cpu.cfs_quota_us:当前进程周期内可用的 CPU 时间# 计算方式 quota = limits.cpu * period # 示例:limits.cpu=1 → quota=100000μs (100ms) # 其中 m==1/1000- Pod cpu Limits路径示例:
/sys/fs/cgroup/cpu/kubepods/pod<pod-uid>/<container-id>/cpu.cfs_quota_us
4.1.4.3. 内存资源实现细节
4.1.4.3.1 内存 Limits 映射
- 通过 memory.limit_in_bytes 设置内存使用上限:
# 示例:limits.memory=512Mi → 536870912 cat /sys/fs/cgroup/memory/kubepods/pod<pod-uid>/<container-id>/memory.limit_in_bytes - 超限时触发 OOM Killer,容器被强制终止
- memory 无对应 Requests 的 cgroups 参数(仅影响调度)
4.1.4.3.2 内存软限制(特殊场景)
- 通过 memory.soft_limit_in_bytes 设置柔性限制:
# 示例(需手动配置): echo 268435456 > /sys/fs/cgroup/memory/.../memory.soft_limit_in_bytes - Kubernetes 默认不配置该参数
4.1.4.4. 多级 cgroups 控制
- Kubernetes 采用分层控制策略:
kubepods (根cgroup) ├── burstable (QoS级别) │ └── pod-uid (Pod级) │ └── container-id (容器级) ├── besteffort └── guaranteed - QoS 级控制:不同 QoS 类别 Pod 的隔离策略
- Pod 级控制:聚合所有容器的资源限制
- 容器级控制:实际执行资源限制的最小单元
4.1.4.5. 完整配置示例
4.1.4.5.1 Pod 定义
apiVersion: v1
kind: Pod
spec:containers:- name: demoimage: nginxresources:requests:cpu: "500m"memory: "256Mi"limits:cpu: "1"memory: "512Mi"
4.1.4.5.2 生成的 cgroups 配置
# CPU 控制文件
/sys/fs/cgroup/cpu/kubepods/burstable/pod-xxx/cpu.shares → 512
/sys/fs/cgroup/cpu/kubepods/burstable/pod-xxx/cpu.cfs_quota_us → 100000# 内存控制文件
/sys/fs/cgroup/memory/kubepods/burstable/pod-xxx/memory.limit_in_bytes → 536870912
4.1.4.6. 监控与调试
4.1.4.6.1 查看当前限制
# CPU 配额使用率
cat /sys/fs/cgroup/cpu/.../cpu.stat | grep nr_throttled# 内存使用量
cat /sys/fs/cgroup/memory/.../memory.usage_in_bytes
4.1.4.6.2 性能问题排查
- CPU Throttling:检查
cpu.stat中的nr_throttled计数 - OOM 事件:通过
dmesg | grep oom_kill查看被杀容器 - 实时监控:
kubectl top pod结合 Prometheus 指标
4.2.LimitRange资源
为了自动化管理 资源设置,提供了LimitRange资源,能够做一些校验+默认值配置,但是资源配置需求多样,LimitRange能提供的能力有限,所以实际生产很少使用
4.2.1.LimitRange定位
- LimitRange 是 Kubernetes 中用于 命名空间级资源管控 的策略对象,主要用于限制 Pod、容器或 PersistentVolumeClaim 的资源分配范围,并自动注入默认配置。
4.2.2.LimitRange核心功能
- 资源范围限制
- 限制 Pod/Container 的 CPU/内存 最小请求值(
min)和 最大限制值(max)
- 默认值注入
- 为未指定
requests/limits的容器自动设置 默认请求值(defaultRequest)和 默认限制值(default)
- 存储限制
- 控制 PersistentVolumeClaim 的存储容量范围(
storage字段)
- 资源比例控制
- 通过
maxLimitRequestRatio限制资源limits与requests的比值
4.2.3.LimitRange Spec 常用字段
| 字段 | 类型 | 描述 | 示例值 |
|---|---|---|---|
type | string | 限制对象类型(Pod/Container/PersistentVolumeClaim) | Container |
default | map | 默认资源限制值(cpu/memory) | cpu: "500m" |
defaultRequest | map | 默认资源请求值 | memory: "256Mi" |
min | map | 资源请求/限制的最小值 | cpu: "100m" |
max | map | 资源请求/限制的最大值 | memory: "2Gi" |
maxLimitRequestRatio | map | limits 与 requests 的最大比值 | cpu: 3 |
4.2.4.LimitRange使用示例
apiVersion: v1
kind: LimitRange
metadata:name: example-limitrange
spec:limits:- type: Containerdefault:cpu: "500m"memory: "512Mi"defaultRequest:cpu: "200m"memory: "256Mi"min:cpu: "100m"memory: "128Mi"max:cpu: "2"memory: "2Gi"maxLimitRequestRatio:cpu: 3- type: PersistentVolumeClaimmin:storage: "1Gi"max:storage: "10Gi"
4.2.5.LimitRange的局限性
- LimitRange设置默认值实际使用中受限
- LimitRange无法区分container的类型:主容器、initContainer,所以设置的默认值会同时设置到initContainer上去,这在使用中不太符合实际,所以限制了LimitRange的实际使用
- 因此LimitRange一般可用于设置Limit上限,但不太会用default设置
4.3.磁盘资源需求

- 临时存储发生在调度完成之后,由node上的kubelet来管理
- 比如一个pod声明了临时存储,如果对临时存储的使用超限,pod会被驱逐,驱逐pod后会清理掉临时写的那些数据,防止对磁盘造成压力影响到系统稳定性。
5.调度器仅关注pod的requests
调度器 关注的 pod资源总量== 多个Containers requests资源之和 + 多个initContainers requests最大值

-
调度器只关注requests
-
不同类型容器的requests需求不一样
- 对于 pod 的 多个Containers,在运行时是同时运行的,所以资源计算方法,是所有Containers requests之和
- 对于 pod 的 多个initContainers,在运行时是串行运行的,所以资源计算方法,是 取initContainers requests的最大值,并不会把所有initContainers requests加起来
-
提出问题:
- initContainers阶段需要大量资源,init结束,资源不会归还,也不再使用,其实就浪费掉了
- 解决:没有直接的解决办法,应用一般不会主动归还资源,可以看是否可以配置一些HPA、VPA做一些弹性工作,或做一个额外的组件专用于回收资源
6.kube-scheduler代码关键点


7.常见问题解析
7.1.Predicate、Priority阶段的插件都是顺序执行的吗?
- Kubernetes 调度器的 Predicate 插件(在旧版本中称为 Predicates 阶段)并非完全顺序执行,其执行模式取决于调度器版本和具体配置。
7.1.1.旧版本调度器(基于 Predicates/Priorities 架构)
- 顺序执行
- 在 Kubernetes v1.15 及更早版本中,Predicates 阶段的规则是顺序执行的。每个 Predicate 规则依次对候选节点进行过滤,只有通过所有规则的节点才能进入下一阶段。例如:
- 先检查
PodFitsResources(资源是否足够) - 再检查
PodFitsHostPorts(端口是否冲突) - 最后验证
PodToleratesNodeTaints(污点容忍)
- 先检查
- 并发处理节点
- 虽然规则是顺序执行的,但每个 Predicate 规则会对所有节点并发计算(默认开启 16 个 Goroutine)。
- 例如,当处理
PodFitsResources时,调度器会同时计算所有节点的 CPU/内存资源是否满足需求。
- 性能瓶颈
- 顺序执行规则在节点规模较大时会导致延迟累积,例如若某个规则计算耗时较长,整个调度周期会被拉长。
7.1.2.新版调度框架(Scheduler Framework)
- 从 Kubernetes v1.16 开始引入的 Scheduler Framework 对 Predicates 进行了重构,将其拆分为 Filter 插件,并支持更灵活的并发机制
- 默认并行执行
- Filter 插件在调度框架中默认并行执行(部分插件可能因依赖关系需顺序处理)。例如:
NodeResourcesFit(资源检查)和NodeAffinity(节点亲和性)可以同时计算;VolumeBinding(存储卷绑定)和PodTopologySpread(拓扑分布)可能并行运行。
- Filter 插件在调度框架中默认并行执行(部分插件可能因依赖关系需顺序处理)。例如:
- 依赖控制
- 若插件之间存在依赖关系(例如必须先完成资源检查再处理亲和性),可通过插件配置显式声明执行顺序。
- 性能优化
- 并行执行显著减少调度延迟,尤其在大规模集群中效果明显。例如,1000 节点的集群调度耗时可从旧版的 2-3 秒降至 500 毫秒以内。
- 顺序执行的例外场景
- 即使在新版本中,部分 Filter 插件仍需顺序执行
- 资源预检查
如NodeResourcesFit(资源充足性)通常需要优先执行,避免在不满足资源条件的节点上浪费计算资源。 - 存储卷绑定
VolumeBinding插件必须等待持久卷(PV)绑定完成后才能进行后续检查。 - 拓扑分布约束
PodTopologySpread需要基于当前已调度 Pod 的分布状态,可能依赖于其他插件的执行结果。
- 资源预检查
- 即使在新版本中,部分 Filter 插件仍需顺序执行
相关文章:
Kubernetes控制平面组件:调度器Scheduler(一)
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
08-DevOps-向Harbor上传自定义镜像
harbor创建完成,往harbor镜像仓库中上传自定义的镜像,包括新建项目、docker配置镜像地址、镜像重命名、登录harbor、推送镜像这几个步骤,具体操作如下: harbor中新建项目 访问级别公开,代表任何人都可以拉取仓库中的镜…...
Vue v-for 循环DOM 指定dom个数展示一行
在Vue.js中,如果想根据v-for循环的结果来控制哪些元素应该在一行中展示,你可以通过计算属性或者方法来实现。这里使用CSS改变样式和js脚本两种方式做到这一点,根据你的具体需求选择适合的方法。 方法1:使用计算属性 如果你想要基…...
mysql控制单表数据存储及单实例表创建
1. 单表数据存储不要过大 主流建议 保守建议。100万以内保持最佳性能其他。不超过2000万 理论依据。 B树层级可能变多。从3增加到4。导致索引查询路径边长,增加IO开销 优化 加索引。对高频查询字段增加索引。避免全表扫描低频历史数据通过分区表或归档隔离。足够的…...
极验4滑块笔记:整理思路--填坑各种问题
最近在研究某验4逆向分析,以前没弄过这种,所以爬了很多坑,就是把分享给大家~ 1.这个gcaptcha4.js需要逆向,我的方法很笨就是将_ᕶᕴᕹᕶ()这个蝌蚪文打印处来,全局替换一下,然后Unicode这种代码࿰…...
LX3-初识是单片机
初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…...
2025年渗透测试面试题总结-拷打题库10(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库10 1. CSRF成因及防御措施 | 非Token防御 2. XSS Worm原理 3. Co…...
Linux系统下docker 安装 MySQL
踩坑解决: 1、docker安装mysql,不需要执行search 2、pull时,需要指定版本号 3、连接Navicat需要看阿里云端口号是否开启 在拉取镜像的时候,如果不使用代理服务器,docker search mysql不需要执行 本人在未使用代理服…...
配置 VS Code 使用 ESLint 格式化
1、在设置里面搜索Default Formatter,下拉框里选择eslint 2、并勾选Enables ESlint as a formatter 3、再在settings.json文件中添加配置代码,如下所示: 1) 、打开 VS Code 设置 快捷键:Ctrl ,(Mac: ⌘ ,…...
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析 随着人工智能的快速发展,视觉识别任务变得越来越重要。最近提出的Vision Permutator架构为这一领域带来了新的思路,它通过可学习的排列操作重新定义了特征交互的方式。 今天我…...
Web开发:ABP框架10——使用数据库存储文件,完成文件的下载和上传
一、简要介绍 字节数组:字节数组是存储数据的字节序列,常用于二进制数据(如图片、音视频、文档等)的表示。 文件和字节的关系:文件是由字节构成,字节是文件内容的基本单位。 文件以字节形式存储在服务器数…...
SystemVerilog语法之内建数据类型
简介:SystemVerilog引进了一些新的数据类型,具有以下的优点:(1)双状态数据类型,更好的性能,更低的内存消耗;(2)队列、动态和关联数组,减少内存消耗…...
NestJS-Knife4j
文章目录 前言✅ 一、什么是 Knife4j?✅ 二、Knife4j 与 Swagger 对比✅ 三、NestJS-Knife4j 集成1. 安装依赖2. 配置 Swagger 与 Knife4j3. 启动应用并访问接口文档 ✅ 四、功能增强1. **接口分组**2. **请求/响应示例**3. **接口文档的美化** ✅ 五、总结 前言 N…...
【项目管理】成本类计算 笔记
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应&…...
手机投屏到电视方法
一、投屏软件 比如乐播投屏 二、视频软件 腾讯视频、爱奇艺 三、手机无线投屏功能 四、有线投屏 五、投屏器...
(三十)安卓开发中的MVP模式详解
在安卓开发中,MVP(Model-View-Presenter) 是一种常见的软件架构模式,它通过将应用程序的逻辑与用户界面分离,使得代码更加模块化、易于维护和测试。本文将详细讲解MVP模式的组成部分、工作流程、优点,并结合…...
基于MuJoCo物理引擎的机器人学习仿真框架robosuite
Robosuite 基于 MuJoCo 物理引擎,能支持多种机器人模型,提供丰富多样的任务场景,像基础的抓取、推物,精细的开门、拧瓶盖等操作。它可灵活配置多种传感器,提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…...
配置管理CM
以下是关于项目管理中 配置管理 的详细解析,结合高项(如软考高级信息系统项目管理师)教材内容,从理论到实践进行系统阐述: 一、配置管理的基本概念 1. 定义 配置管理(Configuration Management, CM)是识别、记录、控制项目成果(产品、服务或过程)的物理和功能特征,…...
13.编码器的结构
从入门AI到手写Transformer-13.编码器的结构 13.编码器的结构代码 整理自视频 老袁不说话 。 13.编码器的结构 T r a n s f o r m e r E n c o d e r : 输入 [ b , n ] TransformerEncoder:输入[b,n] TransformerEncoder:输入[b,n] E m b e d d i n g : − > [ b , n , d ]…...
[原理分析]安卓15系统大升级:Doze打盹模式提速50%,续航大幅增强,省电提升率5%
技术原理:借鉴中国友商思路缩短进入Doze的时序 开发者米沙尔・拉赫曼(Mishaal Rahman)在其博文中透露,谷歌对安卓15系统进行了显著优化,使得设备进入“打盹模式”(Doze Mode)的速度提升了50%,并且部分机型的待机时间因此得以延长三小时。设备…...
cdp-(Chrome DevTools Protocol) browserscan检测原理逆向分析
https://www.browserscan.net/zh/bot-detection 首先,打开devtools后访问网址,检测结果网页显示红色Robot,标签插入位置,确定断点位置可以hook该方法,也可以使用插件等方式找到这个位置,本篇不讨论. Robot标签是通过insertBefore插入的. 再往上追栈可以发现一个32长度数组,里面…...
【Java面试笔记:基础】1.谈谈你对Java平台的理解?
前言 Java 是历史悠久且主流的编程语言,拥有庞大的开发者群体和广泛的应用领域。通过系统学习和实践,构建扎实的 Java 知识体系,提升面试成功率 笔记核心内容 1. Java 平台的核心特性 跨平台特性:Java 的核心特性之一是“Writ…...
Containerd与Docker的相爱相杀:容器运行时选型指南
容器运行时(Container Runtime)作为云原生基础设施的底层引擎,正从Docker一家独大走向多元化竞争。本文将深入剖析Containerd与Docker的技术血缘、性能差异及选型策略,揭示如何根据场景需求选择最优解。 一、技术血缘:…...
Java第五节:继承thread类创建线程
1、创建类Thread01 创建类Thread01然后继承thread类 2、重写run函数 3、运行线程 在主函数创建两个线程,并执行。...
vite安装及使用
没特殊要求的项目,还是怎么简单怎么来╮(╯▽╰)╭ 一、Vite 基础知识 1. 什么是 Vite? Vite 是一个前端构建工具,专注于开发服务器速度和优化构建过程。特点: 快速冷启动:利用 ES 模块的原生支持,实现快速的开发服务器启动。即时热更新:在开发过程中,修改代码后可以…...
Oracle expdp的 EXCLUDE 参数详解
Oracle expdp的 EXCLUDE 参数详解 EXCLUDE 是 Oracle Data Pump Export (expdp) 工具中的一个关键参数,用于指定在导出过程中要排除的对象或对象类型。 一、基本语法 expdp username/password DUMPFILEexport.dmp DIRECTORYdpump_dir EXCLUDEobject_type[:name_c…...
C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
《MySQL:MySQL表的基本查询操作CRUD》
CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)。 Create into 可以省略。 插入否则更新 由于主键或唯一键冲突而导致插入失败。 可以选择性的进行同步…...
CF2096F Wonderful Impostors
题解 看到题意很容易想到用双指针来维护所有可行的区间,但是显然不能对所有的 1 区间来维护所有的可行区间,这样的区间数量会太多,我们无法快速进行判断。 所以只能对满足答案的所有区间进行双指针,这就要求我们如何快速插入和删…...
多维度信息捕捉:利用向量、稀疏向量、全文搜索及张量实现RAG的极致性能
开源 AI 原生数据库 Infinity 0.2 release 正式发布,提供了 2 种新数据类型:稀疏向量Sparse Vector 和 张量Tensor,在此前的全文搜索和向量搜索之外, Infinity 提供了更多的召回手段,如下图所示,用户可以采…...
