特邀文章,原载于Gemini Open Cloud的博客,作者是Gemini Open Cloud的CEO Patrick Fu

Kubernetes是一个可移植的、可扩展的、开源的集群管理器,用于管理容器化工作负载和服务。Kubernetes的功能包括自动软件部署、协调、自动扩展和管理服务使用的虚拟化资源。Kubernetes还包括一个调度器,在工作节点之间均匀地分配任务。

这篇博客将重点讨论Kubernetes集群管理中的调度器组件。此外,我们还将放大我们如何定制调度器,以解决一些特定的使用案例。

首先,让我们快速回顾一下Kubernetes集群管理的情况。Figure 1. Kubernetes Cluster System Structure图1.Kubernetes集群系统结构

图1描述了Kubernetes集群的标准结构。Kubernetes是一个分布式管理系统,它至少包含一个主节点(控制平面),和多个工作节点。主节点包含以下组件。

  • API服务器--负责与工作节点上的Kubelet进行通信。API服务器还负责认证和检查请求者的授权。
  • Etcd--这是系统的关键状态的键值存储。Etcd负责对Kubernets集群的状态进行快照。
  • 控制器管理器--负责通过apiserver监控集群的共享状态,并做出改变,试图将当前状态推向理想状态。Kubernetes附带的控制器的例子包括复制控制器、端点控制器、命名空间控制器和服务账户控制器。
  • Kube Scheduler- Kube Scheduler负责为POD选择工作节点,并根据其资源规格在目标节点上配置POD。

工作者节点是容器(POD)被安排运行的地方。它包含Kubelet、Kube-proxy以及实际的容器运行时库。这篇博客我们将不讨论工作节点组件的细节。详情请参考参考资料#1。

Kube调度器在K8S集群管理中的作用

Kube调度器是一个控制平面进程,它将Pod分配给工作节点。调度器根据其限制条件和可用资源,确定哪些节点是调度器队列中每个Pod的有效位置。然后,调度器对每个有效的节点进行排序,并将Pod绑定到目标节点上。kube调度器的设计是这样的,如果你想并且需要,你可以编写你自己的调度组件并使用它。

Kube调度器的控制流程

Kube调度器作为一个进程守护程序在主节点上运行。它监控所有工作节点的状态和资源利用率。当用户请求创建一个POD时,调度器通过过滤评分机制在工作节点中找到一个最符合其资源规范的节点。然后,调度器告诉API服务器将POD绑定到目标节点上。

目标节点上的Kubelet将监听API服务器。绑定请求发出后,Kubelet将检索POD的规格,并相应地提供容器。一旦POD被成功创建,主节点上的控制器将检查Etcd中工作节点的状态变化。这个调度和配置过程在图2中描述。Figure 2. Kubernetes POD scheduling & provisioning process图2.Kubernetes POD的调度&供应过程

调度策略

调度策略可以为kube-scheduler选择目标节点指定谓词和优先级。谓词用于过滤,优先级用于对通过过滤谓词的候选节点进行评分。

筛选

Kube调度器的过滤是用来过滤掉不适合POD的工作节点。过滤谓词的例子包括。

  • 一般谓词(例如,PodFitsResources,PodFitsNodeSelector)。
  • 与存储有关的谓词(如NoDiskConflict,MaxCSIVolumeCount)。
  • 计算节点相关谓词(例如,PodToleratesNodeTaint)
  • 运行时相关谓词(如:CheckNodeCondition , CheckNodeMemoryPressure)。

计分

  • Kube调度器的评分阶段是对通过过滤阶段的节点进行排名,并选择最合适的Pod位置。调度器根据评分的优先级,给剩下的每个节点分配一个分数。最后,kube-scheduler将Pod分配给排名最高的节点。
  • 打分优先级包括SelectorSpreadPriority、InterPodAffinityPriority、LeastRequestedPriority、NodeAffinityPriority、BalancedResourceAllocate等。对于所传递的每个优先级,相应的节点将被赋予一个分数(1~10),基于用户分配的权重,所有优先级分数的总和决定了一个工作节点的分数。

关于如何定制kubernetes调度器的更多理解。请参考我们的下一篇文章。


Gemini Open Cloud是CNCF成员,也是CNCF认证的Kubernetes服务提供商。拥有超过十年的云技术经验,双子座开放云是台湾云技术的早期领导者。

我们目前是国家级的人工智能云软件和Kubernetes技术和服务提供商。我们也是众多企业导入和管理容器平台的最佳合作伙伴。

除了现有产品 "Gemini AI Console "和 "GOC API Gateway "外,Gemini Open Cloud还为企业提供咨询和导入云原生和Kubernetes相关技术服务。帮助企业拥抱云原生,实现数字化转型的目标。

K8s调度器系列参考

博客