繁体   English   中英

Kubernetes 中的资源分配:Pod 是如何调度的?

[英]Resource Allocation in Kubernetes: How are pods scheduled?

在 Kubernetes 中,调度程序的作用是为 Pod 寻找合适的节点。 因此,在将 pod 分配到节点后,该节点上会有不同的 pod,以便这些 pod 竞争获取资源。 因此,对于这种竞争情况,Kubernetes 是如何分配资源的? Kubernetes 中是否有计算资源分配的源代码?

我想你可以看看下面的文章,看看是否能回答你的问题

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduler_algorithm.md#ranking-the-nodes

https://jvns.ca/blog/2017/07/27/how-does-the-kubernetes-scheduler-work/

过滤后的节点被认为适合托管 Pod,并且通常剩余的节点不止一个。 Kubernetes 优先考虑剩余节点,为 Pod 找到“最佳”节点。 优先级排序由一组优先级函数执行。 对于每个剩余的节点,优先级函数给出一个从 0 到 10 的分数,其中 10 代表“最喜欢”,0 代表“最不喜欢”。 每个优先级函数都用一个正数加权,每个节点的最终分数是通过将所有加权分数相加来计算的。 例如,假设有两个优先级函数,priorityFunc1和priorityFunc2,权重因子分别为weight1和weight2,某个NodeA的最终得分为:

finalScoreNodeA = (weight1 * priorityFunc1) + (weight2 * priorityFunc2)

计算所有节点的得分后,选择得分最高的节点作为 Pod 的主机。 如果有多个节点的最高分相同,则从其中随机选择一个。

目前,Kubernetes scheduler 提供了一些实用的优先级功能,包括:

LeastRequestedPriority :如果新 Pod 被调度到节点上,则该节点根据空闲节点的比例进行优先级排序。 (换句话说,(容量 - 节点上所有 Pod 的请求总和 - 正在调度的 Pod 的请求)/容量)。 CPU 和内存的权重相同。 具有最高游离分数的节点是最优选的。 请注意,此优先级函数具有在资源消耗方面跨节点传播 Pod 的效果。

CalculateNodeLabelPriority :首选具有指定标签的节点。

BalancedResourceAllocation :这个优先级函数尝试将 Pod 放在一个节点上,以便在部署 Pod 后平衡 CPU 和内存利用率。

CalculateSpreadPriority :通过最小化同一节点上属于同一服务的 Pod 数量来传播 Pod。 如果节点上存在区域信息,则会调整优先级,以便 pod 分布在区域和节点之间。

CalculateAntiAffinityPriority :通过最小化节点上具有相同特定标签值的同一服务的 Pod 数量来传播 Pod。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM