每日一问 k8s 中,pod 怎么样被调度到某一个集群节点?

lework · 2020年08月07日 · 36 次阅读

将 kube-scheduler 的日志级别调整到 10,即加入参数--v=10 就可以看到调度 pod 的日志信息。

Kubernetes 调度会经历以下 3 个步骤:

  1. 预选。是根据预先定义的规则,把不符合条件的节点过滤掉。比较常见的两个预选规则是 PodFitsResourcesPred 和 PodFitsHost-PortsPred。前一个规则用来判断,一个节点上的剩余资源,是不是能够满足 pod 的需求;而后一个规则,检查一个节点上某一个端口是不是已经被其他 pod 所使用了。

  2. 优选。这个阶段,kube-scheduler 会根据节点可用资源及其他一些规则,给剩余节点打分。 CPU 和内存是调度算法考量的两种主要资源,LeastResourceAllocation 和 BalancedResourceAllocation。前一种方式计算 pod 调度到节点之后,节点剩余 CPU 和内存占总 CPU 和内存的比例,比例越高得分就越高;第二种方式计算节点上 CPU 和内存使用比例之差的绝对值,绝对值越大,得分越少。

  3. 等分。最后,调度算法会给所有的得分项乘以它们的权重,然后求和得到每个节点最终的得分。最终选择打分最高的主机,最高分有多个时随机选择。

其他影响调度的设置

  1. 节点选择器 (nodeSelector/nodeName),直接调度到选择的节点上。
  2. 节点亲和性 (nodeAffinity),节点亲和性是用来确定 Pod 对象调度到哪一个节点的规则,这些规则基于节点上的自定义标签和 Pod 对象上指定的标签选择器进行定义。 • 硬亲和性:实现的是强制性规则,是 Pod 调度时必须满足的规则,否则 Pod 对象的状态会一直是 Pending • 软亲和性:实现的是一种柔性调度限制,在 Pod 调度时可以尽量满足其规则,在无法满足规则时,可以调度到一个不匹配规则的节点之上。
  3. Pod 亲和性 (PodAffinity),Pod 亲和性是用来描述一个 Pod 对象和现有的 Pod 对象运行的位置存在某种依赖关系 • 硬亲和性:实现的是强制性规则,是 Pod 调度时必须满足的规则,否则 Pod 对象的状态会一直是 Pending • 软亲和性:实现的是一种柔性调度限制,在 Pod 调度时可以尽量满足其规则,在无法满足规则时,可以调度到一个不匹配规则的节点之上。 • 反亲和性 (PodAntAffinity):实现的是不想和选中的 pod 在一起
  4. 污点和容忍度, 污点的定义是在节点的 nodeSpec,而容忍度的定义是在 Pod 中的 podSpec。 污点 (Taint) 是节点用来定义对 pod 对象的排斥等级。 容忍度 (Toleration) 是 pod 用来定义是否能容忍节点定义的排斥。
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册