/ 我几乎可以肯定这一定是一个重复的问题,或者至少是一个已解决的问题,但我通过搜索众多的k8社区,都没有找到我想要的东西。
我们有一些作业,运行时间在一分钟到很多小时之间。考虑到我们给它们分配的资源值能给它们提供QOS保证的状态,我们如何能最大限度地减少各节点的资源浪费?
问题是,降级很少发生,因为每个节点最终都会被分配到一个长期运行的作业中。它们并不常见,但却能让所有的节点保持运行,即使在我们没有需要的时候。
似乎可以避免这种情况的笨策略是深度优先调度算法,在有容量的节点中,最满的那个节点已经会被分配。换句话说,如果我们有两个总节点以90%的cpumemory使用率和10%的cpumemory分配运行,90%的节点总是会被优先分配,只要它有足够的容量。
在这里欢迎任何输入和或想法。非常感谢。
目前看来,有这样的 kube-sheduler配置文件插件:
NodeResourcesMostAllocated: 偏向于资源分配多的节点。
但从k8s v1.18+开始,它就处于alpha阶段,所以在生产中使用它可能不安全。
还有一个参数你可以为kube-scheduler设置,我发现了这个参数 此处:
请求最多的优先级: 偏重于请求资源最多的节点。该策略将把计划好的 "花苞 "放到运行您的整体工作负载集所需的最小数量的节点上。
和 兹举一例 关于如何配置。
最后我想到的是使用 节点亲和力.在长期运行的豆荚上使用nodeAffinity,(更具体的是用 preferredDuringSchedulingIgnoredDuringExecution
),会更倾向于将这些豆荚调度在一直运行的节点上,而宁愿不将其调度在正在自动缩放的节点上。这种方法需要将一些节点排除在自动缩放之外,并贴上适当的标签,这样调度器就可以利用节点的亲和力。