Docker CPU限制在Kubernetes resp中有什么用途。码头工人?

Docker CPU限制在Kubernetes resp中有什么用途。码头工人?,docker,kubernetes,Docker,Kubernetes,我深入研究了Kubernetes的资源限制,很难理解CPU限制是什么。我知道Kubernetes将请求传递到Docker运行时,并将限制到(在我的例子中)Docker运行时 示例:我有1个节点,1个CPU,2个POD,CPU请求:500m和限制:800m。在Docker中,这将导致(500m->0.5*1024=512)--cpu共享=512和(800m->800*100)--cpu配额=80000。POD由Kube调度器分配,因为请求总和不超过节点容量的100%;在限制方面节点被过度限制 以上

我深入研究了Kubernetes的资源限制,很难理解CPU
限制是什么。我知道Kubernetes将
请求
传递到Docker运行时,并将
限制到(在我的例子中)Docker运行时

示例:我有1个节点,1个CPU,2个POD,CPU
请求:500m
限制:800m
。在Docker中,这将导致(
500m->0.5*1024=512
--cpu共享=512
和(
800m->800*100
--cpu配额=80000
。POD由Kube调度器分配,因为
请求
总和不超过节点容量的100%;在
限制方面
节点被过度限制

以上允许每个容器每100ms周期获得80ms的CPU时间(默认值)。一旦CPU使用率达到100%,CPU时间将根据容器的重量在容器之间共享,以CPU共享表示。根据1024的基本值和每个容器的512个共享,每个容器将有50%。在这一点上,我的理解是,
限制
不再具有相关性,因为没有一个容器可以再获得80ms。他们两个都能拿到50分。因此,无论我定义了多少
限制
,当使用率达到临界值100%时,它都会被
请求划分

这让我想知道:为什么我首先要定义CPU
限制,过度承诺会有任何区别吗<代码>请求
另一方面,“当所有东西都在使用时,我能得到多少份额”是完全可以理解的。

根据:

通过使CPU限制大于CPU请求,您可以 完成两件事:

  • Pod可以有突发性的活动,利用碰巧可用的CPU资源
  • Pod在突发期间可以使用的CPU资源量被限制在合理的范围内
我想这可能会让我们想知道为什么我们关心将突发限制在“合理的数量”,因为它可以突发的事实似乎表明当时没有其他进程在争夺CPU。但我发现自己对这条推理路线不满意

首先,我查看了您提到的docker标志的命令行帮助:

    --cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota
-c, --cpu-shares int                 CPU shares (relative weight)
参考Linux完全公平调度程序意味着为了理解CPU限制/配额的值,我们需要了解底层进程调度算法是如何工作的。有道理,对吧?我的直觉是,它不像根据CPU共享/请求对CPU执行进行时间切片,并按照先到先得的原则分配某些固定时间片末尾的剩余部分那样简单

我发现了一段似乎是对CFS工作原理的合法描述:

CFS试图跟踪CPU的公平份额,这将导致 系统中的每个进程都可以使用。因此,CFS举办了一个公平的会议 时钟的实际CPU时钟速度的一小部分。公平的时钟频率 通过将壁时间(以纳秒为单位)除以 等待的进程总数。结果值是 每个进程有权使用的CPU时间量

当进程等待CPU时,调度程序会跟踪进程的数量 它在理想处理器上使用的时间这个等待时间, 由per task wait_运行时变量表示,用于排序 用于调度和确定时间量的流程 允许进程在被抢占之前执行。具有 最长的等待时间(即对CPU的最大需求)是 由调度程序拾取并分配给CPU。当这个过程 运行时,其等待时间缩短,而其他等待时间缩短 任务增加(因为他们正在等待)。这本质上意味着 一段时间后,将有另一个等待时间最长的任务 (在最需要CPU的情况下),当前正在运行的任务 先发制人。使用这一原则,CFS试图公平对待所有任务和任务 始终尝试使系统的每个端口都具有零等待时间 进程每个进程都有一个相等的CPU份额(一个 “理想的、精确的、多任务的CPU”就可以了)

虽然我还没有深入研究Linux内核源代码来了解该算法的实际工作原理,但我确实有一些猜测,我想就共享/请求和配额/限制如何在这个CFS算法中发挥作用提出一些猜测

首先,我的直觉使我相信,不同的进程/任务根据其分配的CPU共享/请求以不同的相对速率累积
wait_运行时
,这似乎是在试图最小化
wait_运行时
适用于所有流程/任务。我知道这并不能直接回答被问到的问题,但我想确保我的解释作为一个整体对共享/请求和配额/限制的概念都有一席之地

第二,关于配额/限制,我直觉认为,这些配额/限制适用于进程/任务在等待I/O时累积了过大的
等待运行时
。请记住,上面引用的CFP描述优先考虑了具有最大
等待运行时
的进程/任务?如果给定的进程/任务没有配额/限制,那么在我看来,该进程/任务的CPU使用量激增将产生以下影响:只要它的
wait_运行时
减少到允许另一个任务抢占它,就会阻止所有其他进程/任务的执行

换句话说,Docker/Kubernetes区域中的CPU配额/限制是一种允许给定容器/pod/proce的机制