有关Kubernetes中资源分配的问题

时间:2019-03-23 13:58:50

标签: kubernetes

我试图找出kubernetes如何计算资源分配?实际上,我无法在源代码中找到它。 在kubernetes官方文档中,可分配的计算公式为[可分配的] = [节点容量]-[保留的Kube]-[保留的系统]-[硬逐出阈值]。您能帮我在github的kubernetes中找到相关的源代码吗?

实际上,我想更改kubernetes中的分配策略,我需要找到相关代码。

欢呼

1 个答案:

答案 0 :(得分:2)

有两种选择:

  • 调度程序使用node.Status.Allocatable的值而不是node.Status.Capacity的值来确定节点是否将成为Pod调度的候选者。自定义内容,是绕过时间表并指定您自己的时间表。

  • 第二个选项是更改kubelet使用的值和选项。 details

  

您可以在节点的kubeletArguments部分中进行设置   通过使用一组配置图   =对(例如,   cpu = 200m,内存= 512Mi)。如果该部分还不存在,请添加

  • 也许您正在寻找的最后一个选择是更改代码,即事物的计算方式。

https://github.com/kubernetes/kubernetes/blob/05183bffe5cf690b418718aa107f5655e4ac0618/pkg/scheduler/nodeinfo/node_info.go

从这里开始:

// AllocatableResource returns allocatable resources on a given node.
func (n *NodeInfo) AllocatableResource() Resource {
    if n == nil {
        return emptyResource
    }
    return *n.allocatableResource
}

以下是使用该信息的时间表的一部分:

if allocatable.Memory < podRequest.Memory+nodeInfo.RequestedResource().Memory {
        predicateFails = append(predicateFails, NewInsufficientResourceError(v1.ResourceMemory, podRequest.Memory, nodeInfo.RequestedResource().Memory, allocatable.Memory))
    }

https://github.com/kubernetes/kubernetes/blob/788f24583e95ac47938a41daaf1f1efc58153738/pkg/scheduler/algorithm/predicates/predicates.go