Kubernetes / Docker中的分布式CPU密集型进程

我有一个使用大量CPU的应用程序。 我认为Kubernetes是一种将工作量分配到小工作中的方法,然后我创build了几个CPU限制的豆荚。 事实certificate,Docker有一个限制,它在CPU运行密集型进程的所有容器之间分配CPU总量( https://docs.docker.com/engine/reference/run/#cpu-share-constraint ) 。 因为这个原因,每个pod都不能使用它自从Docker分享资源以来应该拥有的全部CPU数量。

例:

环境:Kubernetes平台上有80个CPU核心

testing1:

  • 上下文:1个单个容量限制为5个CPU内核
  • 进程:单个进程中运行1个进程
  • 持续时间:单个进程持续0:02:05

testing2:

  • 上下文:12个豆荚限制为每个5个CPU核心
  • 进程:12个进程在每个容器上运行
  • 持续时间:处理每一个需要平均0:03:55

这意味着当有多个容器请求CPU资源时,CPU使用率受到影响(然后处理时间增加)。

我想Docker并不是打算用于我需要的。

我明白,在这种情况下,使用VM而不是Docker容器会更好,但有没有办法使其工作(也许更改Docker或Kubernetesconfiguration)?

任何有用的意见,将不胜感激。

由于我们不了解集群设置以及实际处理的内容,所以很难给出准确的答案。 不过,我相信不同的是因为CPU份额的限制并没有做你认为的事情。

从您链接的docker文档:

只有在CPU密集型进程正在运行时,这个比例才会适用。 当一个容器中的任务空闲时,其他容器可以使用剩余的CPU时间。

这意味着,在您首次testing时,即使将CPU份额限制为5, 如果该主机上没有任何其他内容正在运行,它将继续增加CPU使用率,直到该主机的100%CPU时间用完。

在12处理器的情况下,这些容器中的每一个事实上都与主机上的其他CPU竞争CPU资源,因此仅接收整个主机系统CPU的一部分。 他们将分别获得总CPU时间的平等份额,但是这个份额仍然会低于接收所有的CPU时间。

您可以使用–cpu的标志,而不是使用CPU共享限制资源。 这会给你我相信你实际上试图达到的CPU使用限制。

指定容器可以使用多less可用的CPU资源。 例如,如果主机有两个CPU,并且设置了–cpus =“1.5”,则容器最多可以保证能够访问一个半的CPU。 这相当于设置–cpu-period =“100000”和–cpu-quota =“150000”。 在Docker 1.13和更高版本中可用。

Docker资源约束文档