带资源配额的kubernetes pod调度



我读过k8s的资源管理,但事情对我来说仍然不是很清楚。假设我们有2个k8s节点,每个节点有22 mb内存。假设Pod A请求10mb,限制15mb(但假设实际使用量为5mb)。所以这个pod被安排在节点1上。所以node1有22 mb内存,5 mb被Pod A使用,但如果Pod A需要更多内存,另外17mb可用。Pod B有请求10和限制15(与Pod A基本相同),所以这个Pod被安排在节点2上

所以两个节点在22mb中都有5mb的使用。如果Pod C有5mb的请求和10mb的限制,这个Pod会被调度到任何节点上吗?如果是,会发生什么,Pod C需要10m内存,另一个Pod需要15mb内存?

如果Pod C有13mb的请求和15mb的限制会发生什么?在这种情况下,13(pod C的请求)+ 10(pod A的请求)会是23(大于22)吗?

k8s是否尝试确保所有pod的请求

回复帖子中的问题:

假设Pod A请求10mb,限制15mb(但假设实际使用量为5mb)。所以这个pod被安排在节点1上。所以node1有22 mb内存,5是由Pod A使用的,但如果Pod A需要更多内存,另一个17mb可用。Pod B有请求10和限制15(与Pod A基本相同),所以这个Pod被安排在节点2上

这不是一个真正的问题,但我认为这部分需要一些关于Pods如何被调度到节点上的观点。负责告诉Kubernetes应该在哪里调度Pod的组件是:kube-scheduler。它可以考虑到你所说的情况:

  • Pod A, req:10M, limit: 15M->Node 1, mem: 22MB
  • Pod B req:10M, limit: 15M->Node 2, mem: 22MB

引用官方文档:

kube-scheduler中的节点选择

kube-scheduler在两步操作中为pod选择一个节点:

  • 得分

过滤步骤找到可以调度Pod的节点集。例如,PodFitsResources过滤器检查候选节点是否有足够的可用资源来满足Pod的特定资源请求。在此步骤之后,节点列表包含任何合适的节点;通常,会有不止一个。如果列表为空,则该Pod(尚)不可调度。

在评分步骤中,调度程序对剩余节点进行排序,以选择最合适的Pod位置。调度程序根据活动评分规则为过滤后幸存的每个节点分配一个分数。

最后,kube-scheduler将Pod分配给最高级别的Node。如果有多个具有相同分数的节点,kube-scheduler将随机选择其中一个。

,Kubernetes。io: Docs:概念:调度退出:Kube调度器:实现


所以两个节点在22mb中都有5mb的使用。如果Pod C有5mb的请求和10mb的限制,这个Pod会被调度到任何节点上吗?如果是,会发生什么,Pod C需要10m内存,另一个Pod需要15mb内存?

在这个特殊的例子中,我将更关注请求部分而不是实际用法。假设没有其他因素会拒绝调度,那么Pod C应该在kube-scheduler选择的一个节点上生成。为什么呢?:

  • resource.limits不拒绝Pod的调度(限制可以高于内存)
  • resource.requests拒绝Pod的调度(请求不能高于内存)

我建议您查看以下文章以获得更多参考:

  • Sysdig.com: Blog: Kubernetes限制请求
  • cloudd.google.com: Blog: Products: Containers Kubernetes: Kubernetes最佳实践:(这是GKE的博客,但它应该给出了基本的想法,参见部分:" Kubernetes pods的生命周期")部分)

如果Pod C有13mb的请求和15mb的限制会发生什么?在这种情况下,13(pod C的请求)+ 10(pod A的请求)会是23(大于22)吗?

在这个例子中,Pod将不会按请求的总和排期;内存(假设没有Pod优先级)。Pod将处于Pending状态。


额外的资源:

  • Kubernetes。io: Docs:概念:调度退出:Kube调度器:下一步是什么
  • Youtube.com:深入了解最新的Kubernetes调度功能-来自CNCF[云原生计算基金会]会议

最新更新