k8s中的bin packing

什么是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 集群的性能和可靠性。

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值