k8s中的bin packing
读者们可以根据自己的具体情况和需求,灵活地选择并应用这些策略,以实现集群资源的最佳分配与利用。无论是面对负载变化频繁的生产环境,还是对资源利用率有严格要求的特定场景,这些方法都能够为我们的 Kubernetes 集群带来实际的价值和效益。这就是 “bin packing” 问题的核心,我们需要像玩拼图一样,把各种大小的 Pod(即 “物品”)尽可能高效地放入节点(即 “箱子”)中,以充分利用每个节
什么是bin-packing
大家好,今天我们来探讨一下k8s的“Bin packing”问题。这是一个组合优化问题,核心在于如何将不同大小的物品(称为“项目”)尽可能高效地放入固定容量的容器(称为“箱子”)中。我们的目标是尽量少用箱子,或者让每个箱子都尽量装满。
在这个问题中,每个项目都有一个大小,而每个箱子则有一个固定的容量。寻找最佳解决方案,即最少使用箱子或让箱子装得最满,是一个 NP-hard 问题。要找到最优解,通常需要尝试所有可能的组合,这在实际操作中是不现实的。因此,我们通常使用启发式算法或近似算法,这些方法虽然不能保证找到最优解,但能够在合理的时间内找到接近最优的解决方案。
在计算机科学领域,“Bin packing”问题有着广泛的应用,例如资源调度、存储优化、内存分配、货物装载以及网络流量路由等。这些应用无处不在,体现了“Bin packing”问题的重要性和实用性。
k8s中的bin pack
大家都知道,Kubernetes 是一个非常强大的容器编排平台,可以让我们运行各种应用程序。然而,在 Kubernetes 中,我们面临一个有趣的挑战,叫做 “bin packing” 问题。
想象一下,我们有一个大型集群,里面有很多节点。每个节点都有自己的 CPU、内存等资源。现在,我们需要在这些节点上运行各种应用(即 Pod)。问题是,我们如何才能最大限度地利用这些节点的资源呢?
这就是 “bin packing” 问题的核心,我们需要像玩拼图一样,把各种大小的 Pod(即 “物品”)尽可能高效地放入节点(即 “箱子”)中,以充分利用每个节点的资源。我们的目标是最大化资源使用率,同时尽量减少浪费。
这可不是一件简单的事情,因为我们需要考虑各种约束条件,比如每个 Pod 所需的资源、节点的容量等。为了找到最优解,我们常常需要使用一些聪明的算法,那么k8s中式如何提供对bin packing问题的支持的呢。
k8s对于Resource Bin Packing的支持
kube-scheduler 的调度插件 NodeResourcesFit 中,有两种支持资源装箱的评分策略,MostAlowned 与 RequestedToCapacityRatio。
- LeastAllocated(最少分配):这是默认的评分策略。它将为节点评分,根据节点上已分配资源的数量来判断。分配资源最少的节点会被评分最高。换句话说,它倾向于将 Pod 分配到已分配资源最少的节点上。
- MostAllocated(最多分配):与 LeastAllocated 相反,这个评分策略将节点评分,根据节点上已分配资源的数量来判断。分配资源最多的节点会被评分最高。因此,它倾向于将 Pod 分配到已分配资源最多的节点上。
- RequestedToCapacityRatio(请求到容量比率):这个评分策略将节点的请求资源(request)与节点容量的比值作为评分依据。它可以更细粒度地考虑资源利用情况,而不仅仅是已分配的资源量。
如何使用
要为 NodeResourcesFit 插件设置 MostAllocation 策略,需要使用以下调度文件配置。
apiVersion: kubescheduler.config.k8s.io/v1 kind: KubeSchedulerConfiguration profiles: - pluginConfig: - args: scoringStrategy: resources: - name: cpu weight: 1 - name: memory weight: 1 - name: intel.com/foo weight: 3 - name: intel.com/bar weight: 3 type: MostAllocated name: NodeResourcesFit
启用 RequestedToCapacityRatio
apiVersion: kubescheduler.config.k8s.io/v1 kind: KubeSchedulerConfiguration profiles: - pluginConfig: - args: scoringStrategy: resources: - name: intel.com/foo weight: 3 - name: intel.com/bar weight: 3 requestedToCapacityRatio: shape: - utilization: 0 score: 0 - utilization: 100 score: 10 type: RequestedToCapacityRatio name: NodeResourcesFit
weight字段越大,评分也就越高,shape字段可以控制分数计算方式,
shape: - utilization: 0 score: 0 - utilization: 100 score: 10
这是一种资源利用越高评分越高的方式,而下面是一种资源利用越高评分越低的方式。
shape: - utilization: 0 score: 10 - utilization: 100 score: 0
summary
这篇文章粗略概述了 Kubernetes 在资源管理方面的一个优化技巧,即资源的 bin packing(资源装箱)策略。展示了如何利用 Kubernetes 提供的各种策略来最大程度地优化资源利用,从而实现更高效的集群运行。
读者们可以根据自己的具体情况和需求,灵活地选择并应用这些策略,以实现集群资源的最佳分配与利用。无论是面对负载变化频繁的生产环境,还是对资源利用率有严格要求的特定场景,这些方法都能够为我们的 Kubernetes 集群带来实际的价值和效益。因此,读者们可以对其进一步尝试并实践这些策略,以进一步优化 Kubernetes 集群的性能和可靠性。
更多推荐
所有评论(0)