目标
当限制设置在远低于可用CPU的范围时,澄清K8S容器cpu使用的行为,并确认理解如何设置限制是否正确 .
背景
我有一个2CPU的节点,因此2000m可以是上限 . 每个命名空间都使用LimitRange设置,它将CPU限制为容器的500米 .
kind: LimitRange
metadata:
name: core-resource-limits
spec:
limits:
- default:
cpu: 500m
memory: 2Gi
defaultRequest:
cpu: 100m
type: Container
指示
即使有2个CPU可用(没有其他进程/容器等待)且容器可运行,它也只能使用0.5个CPU,并且1.5个CPU将保持未使用状态 . 它是否正确?
如何设置LimitRange
我相信我可以设置限制,如可用2 CPU的75-80%,以更好地利用CPU资源 . 因为如果有多个容器试图声称CPU多于请求,K8S将根据每个容器的请求值在容器之间分配CPU,根据文档(一些来自OpenShift,但相信它与K8S相同) . 它是否正确?
kind: LimitRange
metadata:
name: core-resource-limits
spec:
limits:
- default:
cpu: 1500m
memory: 2Gi
defaultRequest:
cpu: 100m
type: Container
CPU请求表示容器可能占用的最小CPU量,但如果没有CPU争用,则它可以使用节点上的所有可用CPU . 如果节点上存在CPU争用,则CPU请求会在系统上的所有容器中提供相对权重,以确定容器可以使用多少CPU时间 .
pod中的每个容器都可以指定限制在节点上使用的CPU数量 . CPU限制控制容器可以使用的最大CPU数量,而与节点上的争用无关 . 如果容器尝试超过指定的限制,系统将对容器进行限制 . 这允许容器具有一致的服务级别,而与调度到节点的pod的数量无关 .
kubernetes / understanding CPU resources limits
6%的CPU意味着6%(CPU请求)的节点CPU时间是为此pod保留的 . 所以它保证它总能获得这个CPU时间 . 如果仍有CPU时间,它仍然可以突然达到12%(CPU限制) .
How are Kubernetes CPU limits enforced?
检查我的一个容器,我看到Kubernetes为它们设置了CpuPeriod,CpuQuota . Docker文档(https://docs.docker.com/engine/reference/run/)提到了CFS文档(https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt),从那里的信息来看,似乎这些都是硬限制
1 回答
Kubernetes in Action第1版由Marko Luksa撰写
14.1.3 . 了解CPU请求如何影响CPU时间共享
所以这是正确的 .