Kubernetes 调度算法:从 FIFO 到 Priority

阅读时长 3 分钟读完

在 Kubernetes 集群中,Pod 是最小的调度单位。Pod 可以被自动调度到节点上运行,这样它就可以访问它需要的资源。Kubernetes 中的调度器是负责管理 Pod 在集群中的调度过程,并将它们分配到可用的节点上。

FIFO 调度算法

Kubernetes 最初使用先进先出(FIFO)算法来调度 Pod。FIFO 算法简单易懂,当有新的 Pod 加入到队列中时,会先选择队列中最早加入的 Pod 并将其调度到一个可用的节点上运行。

优先级调度算法

然而,在实际环境中,FIFO 算法并不能满足所有的需求。例如,在 Kubernetes 中运行多种应用程序时,有些应用程序具有高优先级,需要尽快完成。因此,Kubernetes 推出了优先级调度算法。

Kubernetes 中的优先级调度算法通过定义 Pod 的优先级,使得一些重要的 Pod 能够更快地被调度。对于每个 Pod,都可以为其指定一个整数类型的优先级。默认优先级为 0,优先级的范围为 -1000000 到 1000000。优先级越高,越先被调度。

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- -----------
  ------------
    --------------------------------------- ------
-----
  -----------
  - ----- -----------------
    ------ -----

可以通过 Kubernetes 的一个名为“PriorityClass”的 API 对象来创建一个优先级类。这个对象定义了一组参数,包括此优先级类所表示的整数类型优先级、Pod 调度到节点时要求的最小资源限制等等。

在上述定义中,“high-priority”是此优先级类的名称,“value”指定其代表的整数类型优先级,“globalDefault”标志着其是否应该作为默认值,“description”则用于描述此类优先级的功能。

要使用这个优先级类,只需将它添加到 Pod 定义中即可:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- -----------
-----
  ------------------ -------------
  -----------
  - ----- -----------------
    ------ -----

结论

Kubernetes 中的调度算法从 FIFO 转移到优先级调度算法,并不是单纯地增加了复杂性,而是为了更好地管理 Pod 的调度。在实际应用中,更适合的算法会使得应用系统更加稳定和高效。

希望这篇文章能够帮助开发者们更好地理解 Kubernetes 中的调度算法,并对其在实践中的运用有所启发。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672866a72e7021665e201390

纠错
反馈