【发布时间】:2020-04-04 10:06:51
【问题描述】:
我有一个多线程应用程序,它执行我想在 Kubernetes 上运行的 CPU 密集型任务。 我正在使用的节点有 56 个核心,我为我的 pod 设置了 2 个核心的请求和限制。
由于它是 CPU 密集型的,通常线程数超过核心数是没有意义的(使用超线程,线程数可能是核心数的两倍),所以我会分配 2-4 个线程并称之为一天.
但是,AFAIK,Kubernetes 不保证核心亲和性,因此在最坏的情况下,2 个核心可以平均分配给 56 个核心,每个核心有 2/56 的时间并行工作。如果发生这种情况并且我只分配了 4 个线程,那么 56 个内核中至少有 52 个将处于空闲状态。
如果我理解正确的话,这个问题并不是 Kubernetes 独有的,它适用于任何共享硬件资源的虚拟化环境。
在处理这种潜在的最坏情况时,最佳做法是什么?你会忽略它并假设你有很高的地方性,还是你会做最坏的打算,或者介于两者之间?
【问题讨论】:
标签: kubernetes virtualization cgroups