k8s调度 原理_深入剖析k8s之默认调度器调度策略解析

本篇专注在调度过程中 Predicates 和 Priorities 这两个调度策略主要发生作用的阶段。

Predicates

首先,我们一起看看 Predicates。

Predicates 在调度过程中的作用,可以理解为 Filter,即:它按照调度策略,从当前集群的所有节点中,“过滤”出一系列符合条件的节点。这些节点,都是可以运行待调度 Pod 的宿主机。

而在 Kubernetes 中,默认的调度策略有如下三种。

第一种类型,叫作 GeneralPredicates。

顾名思义,这一组过滤规则,负责的是最基础的调度策略。

PodFitsResources

PodFitsResources 计算的就是宿主机的 CPU 和内存资源等是否够用。

当然,我在前面已经提到过,PodFitsResources 检查的只是 Pod 的 requests 字段。需要注意的是,Kubernetes 的调度器并没有为 GPU 等硬件资源定义具体的资源类型,而是统一用一种名叫 Extended Resource 的、Key-Value 格式的扩展字段来描述的。比如下面这个例子:

apiVersion: v1

kind: Pod

metadata:

name: extended-resource-demo

spec:

containers:

- name: extended-resource-demo-ctr

image: nginx

resources:

requests:

alpha.kubernetes.io/nvidia-gpu: 2

limits:

alpha.kubernetes.io/nvidia-gpu: 2

可以看到,我们这个 Pod 通过alpha.kubernetes.io/nvidia-gpu=2这样的定义方式,声明使用了两个 NVIDIA 类型的 GPU。

而在 PodFitsResources 里面,调度器其实并不知道这个字段 Key 的含义是 GPU,而是直接使用后面的 Value 进行计算。当然,在 Node 的 Capacity 字段里,你也得相应地加上这台宿主机上 GPU 的总数,比如:alpha.kubernetes.io/nvidia-gpu=4。这些流程,我在后面讲解 Device Plugin 的时候会详细介绍到。

PodFitsHost

而 PodFitsHost 检查的是,宿主机的名字是否跟 Pod 的 spec.nodeName 一致。

PodFitsHostPorts

PodFitsHostPorts 检查的是,Pod 申请的宿主机端口(spec.nodePort)是不是跟已经被使用的端口有冲突。

PodMatchNodeSelector

PodMatchNodeSelector 检查的是,Pod 的 nodeSelector 或者 nodeAffinity 指定的节点,是否与待考察节点匹配,等等。

<
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值