CPU 资源限制

docker容器会认为自己可以使用 宿主机 的全部cpu资源,这里启动容器之后,尝试占用一个完成的cpu核心

docker run -it --name ubuntu ubuntu /bin/bash
while : ; do : ; done &

可以看到4个内核中,有一个内核 是 100us

我们知道docker –cpu-shares 参数可以控制容器可占用cpu的百分比

例如单独启动一个容器的情况下,由于没有竞争,即使 –cpu-shares=500 ,容器也可以占用全部内核

为了竞争,我们锁定 两个容器在第一个内核上,然后设置百分比

docker run -it --name test1 --cpu-shares=500 --cpuset-cpus 0 ubuntu /bin/bash

主要看右下的top上有两个bash进程,一个是 66.4 另一个是 33.2

不过 –cpu-shares 只能控制占用百分比,这也是早起docker提供的唯一可以分配cpu资源的参数

这一原理同 Kubernetes resources 中的 requests

如果要实现同 Kubernetes resources 中的 limits , 需要使用

  • cpu.cfs_quota_us
  • cpu.cfs_period_us

period 默认是 100ms,也就是 100000us, 下面语句的意思是 10万个单位的资源,可以使用2万,也就是20%

docker run -it --name test1 --cpu-period=100000 --cpu-quota=20000 --cpuset-cpus 0 ubuntu /bin/bash

下图中的 bash 进程已经锁定在了 19.9%

Send a Message