HOME

Kubernetes 资源调度

正文

最近在做 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)