zoukankan      html  css  js  c++  java
  • Kubenertes资源分配之Request和Limit解析

    收录待用,修改转载已取得腾讯云授权


    Kubernetes是一个容器集群管理平台,Kubernetes需要统计整体平台的资源使用情况,合理地将资源分配给容器使用,并且要保证容器生命周期内有足够的资源来保证其运行。 同时,如果资源发放是独占的,即资源已发放给了个容器,同样的资源不会发放给另外一个容器,对于空闲的容器来说占用着没有使用的资源比如CPU是非常浪费的,Kubernetes需要考虑如何在优先度和公平性的前提下提高资源的利用率。为了实现资源被有效调度和分配同时提高资源的利用率,Kubernetes采用Request和Limit两种限制类型来对资源进行分配。

    一、kubenerters中Request和Limit限制方式说明

    Request: 容器使用的最小资源需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配资源量>=容器资源请求数时才允许将容器调度到该节点。但Request参数不限制容器的最大可使用资源。

    Limit: 容器能使用资源的资源的最大值,设置为0表示使用资源无上限。

    Request能够保证Pod有足够的资源来运行,而Limit则是防止某个Pod无限制地使用资源,导致其他Pod崩溃。两者之间必须满足关系: 0<=Request<=Limit<=Infinity (如果Limit为0表示不对资源进行限制,这时可以小于Request)

    在腾讯云容器服务(CCS)中,可以在创建服务,在容器编辑栏中点击显示高级设置,在高级设置中进行CPU和Memory的Request和Limit设置。目前CPU支持设置Request和Limit,用户可以根据业务的特点动态的调整Request和Limit的比例关系。Memory目前只支持设置Request,Limit必须强制等于Request,这样确保容器不会因为内存的使用量超过了Request但没有超过Limit的情况下被意外的Kill掉。

    容器服务高级设置选项

    容器中Request和Limit设置

    二、kubenerters中Request和Limit使用示例

    一个简单的示例说明Request和Limit的作用,测试集群包括一个4U4G的节点。已经部署的两个Pod(1,2),每个Pod的资源设置为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 2U, 1G,1G).
    节点上CPU和内存的资源使用情况如下图所示:

    Request和Limit的使用示例1

    已经分配的CPU资源为:1U(分配Pod1)+1U(分配Pod2)=2U,剩余可以分配的CPU资源为2U

    已经分配的内存资源为:1G(分配Pod1)+1G(分配Pod2)=2G,剩余可以分配的内存资源为2G

    所以该节点可以再部署一个(CPU Requst, Memory Requst)=(2U,2G)的Pod部署,或者部署2个(CPU Requst, Memory Requst)=(1U,2G)的Pod部署

    在资源限制方面,每个Pod1和Pod2使用资源的上限为(2U,1G),即在资源空闲的情况下,Pod使用CPU的量最大能达到2U,使用内存的最大量为1G。从CPU资源的角度,对于资源使用上线为2U的Pod,通过设置Request为1U,实现了2倍数量的Pod的部署,提高了资源的使用效率。

    另外一个复杂一点的例子来进一步说明Request和Limit的作用,主要说明Request和Limit都为0的Pod对提高资源使用率的作用。测试集群仍然包含有一个4U4G的Pod。集群中已经部署了四个Pod(1~4),每个Pod的资源设置为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 2U, 512M,512M)。

    此时节点上CPU和内存的资源使用情况如下图所示:

    Request和Limit的使用示例2

    此时按照Request的需求,已经没有可以供分配的CPU资源。但由于Pod1~4业务负载比较低,造成节点上CPU使用率较低,造成了资源的浪费。这的时候可以通过将Request设置为0来实现对资源使用率的进一步提高。在此节点上部署4个资源限制为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (0U, 0U, 512M,512M)。资源的使用情况如下图所示:

    Request和Limit的使用示例2.2

    Pod(58)能够在Pod(14)空闲时,使用节点上剩余的CPU资源,从而进一步提高资源的使用率。

    三、kubenerters中资源的抢占

    Kubernetes中资源通过Request和Limit的设置,能够实现容器对资源的更高效的使用。在如果多个容器同时对资源进行充分利用,资源使用尽量的接近Limit。这个时候Node节点上的资源总量要小于所有Pod中Limit的总会,就会发生资源抢占。

    对于资源抢占的情况,Kubernetes根据资源能不能进行伸缩进行分类,分为可压缩资源和不可以压缩资源。CPU资源--是现在支持的一种可压缩资源。内存资源和磁盘资源为现在支持的不可压缩资源。

    可压缩资源的抢占策略---按照Requst的比值进行分配

    例如在示例一种,假设在部署了Pod(1,2)的基础上,又部署了资源限制和Pod1相同的两个容器Pod(3,4)。这个时候,节点上的资源模型为。

    资源抢占示例1

    假设四个Pod同时负载变高,CPU使用量超过1U,这个时候每个Pod将会按照各自的Request设置按比例分占CPU调度的时间片。在示例中,由于4个Pod设置的Request都为1U,发生资源抢占时,每个Pod分到的CPU时间片为1U/(1U×4),实际占用的CPU核数为1U。在抢占发生时,Limit的值对CPU时间片的分配为影响,在本例中如果条件容器Limit值的设置,抢占情况下CPU分配的比例保持不变。

    不可压缩资源的抢占策略---按照优先级的不同,进行Pod的驱逐

    对于不可压缩资源,如果发生资源抢占,则会按照优先级的高低进行Pod的驱逐。驱逐的策略为: 优先驱逐Request=Limit=0的Pod,其次驱逐0<Request<Limit<Infinity (Limit为0的情况也包括在内)。 0<Request==Limit的Pod的会被保留,除非出现删除其他Pod后,节点上剩余资源仍然没有达到Kubernetes需要的剩余资源的需求。

    由于对于不可压缩资源,发生抢占的情况会出Pod被意外Kill掉的情况,所以建议对于不可以压缩资源(Memory,Disk)的设置成0<Request==Limit。

    针对内存抢占,本文进行了一次小的测试,示例中依次部署了Pod(1~3)单个Pod。节点中资源的示例图为:
    内存资源抢占

    步骤1: 部署Pod1,资源参数为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (2U, 2U, 2G,2G),此时Pod1中进程使用1.9G内存,Pod1运行依然正常。

    步骤2: 部署Pod2,资源参数为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 1U, 1G,2G),此时Pod2中进程使用0.9G内存,程序运行正常。超过1G,小于2G时程序运行正常,但超过2G程序异常。

    步骤3: 部署Pod3,资源参数为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 1U, 0G,0)。此时保持Pod1中进程使用内存为1.9G,Pod2中内存使用为0.9G,pod3抢占内存,抢占内存大小为2G。这时,Pod3最先会出现因内存不足异常的情况。同时Pod2有时也会出现内存不足异常的情况。但Pod1一直能够正常运行

    步骤4:修改Pod2的参数为(CPU Requst,CPU Limit,Memory Requst, Memory Limit)= (1U, 1U, 1G,1G),仍然保持步骤3中资源的使用量。这时Pod3仍然最先出现内存不足而异常的情况,但Pod1和Pod2一直运行正常。

    更多关于不可压缩资源抢占时的资源回收策略,可以参考:

    https://www.kubernetes.org.cn/1150.html (Kubernetes 针对资源紧缺处理方式的配置)


    原文链接:https://www.qcloud.com/community/article/905142

  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/liuliliuli2017/p/6838787.html
Copyright © 2011-2022 走看看