【发布时间】:2017-03-10 14:01:25
【问题描述】:
我有一个使用大量 CPU 的应用程序。我认为在 Kubernetes 中将工作负载分配给小块工作,然后我创建了几个 CPU 受限的 Pod。事实证明,Docker 有一个约束,它在所有运行 CPU 密集型进程的容器之间分配 CPU 总量 (https://docs.docker.com/engine/reference/run/#cpu-share-constraint)。由于这个原因,每个 pod 都不能使用它应该拥有的全部 CPU,因为 Docker 自己共享资源。
例子:
环境:Kubernetes 平台在整个集群中提供 80 个 CPU 内核
测试1:
- 上下文:1 个单 pod 限制为 5 个 CPU 内核
- 进程:单个 pod 中运行 1 个单个进程
- 持续时间:单个进程持续0:02:05
测试2:
- 上下文:12 个 Pod,每个 Pod 限制为 5 个 CPU 内核
- 进程:每个 pod 上运行 12 个进程
- 持续时间:处理每一个平均需要 0:03:55
这意味着当有多个容器请求 CPU 资源时,CPU 使用率会受到影响(然后处理时间会增加)。
我猜 Docker 不打算按我的需要使用。
我知道在这种情况下使用虚拟机而不是 Docker 容器会更好,但是有没有办法让它工作(也许改变 Docker 或 Kubernetes 配置)?
任何有用的评论将不胜感激。
【问题讨论】:
-
您可以应用 cpu 约束,如果您的 pod 超过此值,它将被驱逐。
标签: docker kubernetes cpu-usage