Home Resources

Kubernetes 资源调度

Table of Contents

正文

最近在做 xnfun 的时候,考虑执行函数节点选择的时候,想到这和 Kubernetes 里面 pod 执行节点的选择类似。

Kubernetes 中调度指为 Pod 匹配节点,使得 kubelet 可以运行它们。Kubernetes 中调度是抢占式的,意味着一个 Pod 即使被调度执行了,也可能被更高优先级的 Pod 给挤占停止。

Kubernetes 构建的容器调度服务(container scheduling service),设计目标是允许用户通过 Kubernetes 集群管理云容器集群,无需执行复杂的配置。系统能够选择合适的工作节点来执行特定容器集群的调度过程。

其调度器需要考虑 individual 和 collective 资源要求、服务质量要求(qos, quality of service)要求,硬件、软件、策略(policy)约束, 亲和性(affinity)和 anti-affinity 要求, 数据本地行要求(data locality), inter-workload interference, deadlines 等。

其调度过程分为 2 步:

  1. Filtering: 调度器过滤掉不满足要求的节点,过滤后如果没有满足节点,Pod 将无法被调度;过滤条件如
    • PodFitsResources: 检测节点是否有足够的资源,如 CPU, 内存, GPU 等
  2. Scoring: 调度器根据开启的评分规则为节点评分,最终,kube-scheduler 选择分数最高的节点,如果最高分有多个节点,将从它们中随机选择。

细分这两个步骤,整个调度过程分成很多阶段,每个阶段都暴露出一些扩展点1

kube-scheduler-stages.svg

Figure 1: Kubernetes 调度阶段与扩展点

参考

Footnotes:

Author: lotuc, Published at: 2023-01-26 Thu 00:00, Modified At: 2023-02-06 Mon 20:10 (orgmode - Publishing)