Loading
0

docker资源限制及应用

cgroups 只在容器分配的资源紧缺时,也就是说在需要对容器使用的资源进行限制时,才会
生效。因此,无法单纯根据某个容器的 cpu 份额来确定有多少 cpu 资源分配给它,资源分配
结果取决于同时运行的其他容器的 cpu 分配和容器中进程运行情况。
cpu-shares 演示案例:
先删除 docker 主机上运行的容器

Docker 通过--cpu-shares 指定 CPU 份额
运行一个容器指定 cpu 份额为 1024

注:
--cpu-shares 指定 CPU 份额,默认就是 1024
--cpuset-cpus 可以绑定 CPU。例如,指定容器在--cpuset-cpus0,1 或--cpuset-cpus 0-3
--cpu 是 stress 命令的选项表示产生 n 个进程 每个进程都反复不停的计算随机数的平方根
stress 命令是 linux 下的一个压力测试工具。
在 docker 宿主机上打开一个 terminal 执行 top


查看 top 的现实结果

可以看到 container1 的 CPU 占比为 1024/(1024+512)=2/3,container2 的 CPU 占比为
512/(1024+512)=1/3
将 container1 的 cpu.shares 改为 512,
#echo “512” >/sys/fs/cgroup/cpu/system.slice/docker-容器的完整长ID>/cpu.shares

可以看到两个容器的 CPU 占比趋于平均
设定 CPU 使用周期使用时间上限
cgroups 里,可以用cpu.cfs_period_us 和 cpu.cfs_quota_us 来限制该组中的所有进程在单
位时间里可以使用的 cpu 时间。cpu.cfs_period_us 就是时间周期,默认为 100000,即百毫
秒。cpu.cfs_quota_us 就是在这期间内可使用的 cpu 时间,默认 -1,即无限制。
cpu.cfs_period_us:设定时间周期(单位为微秒(μs)),必须与 cfs_quota_us 配合使用。
cpu.cfs_quota_us :设定周期内最多可使用的时间(单位为微秒(μs))。这里的配置指 task
对单个 cpu 的使用上限。
举个例子,如果容器进程需要每 1 秒使用单个 CPU 的 0.2 秒时间,可以将 cpu-period 设置为
1000000(即 1 秒),cpu-quota 设置为 200000(0.2 秒)。
当然,在多核情况下,若 cfs_quota_us 是 cfs_period_us 的两倍,就表示在两个核上
完全使用 CPU,例如如果允许容器进程需要完全占用两个 CPU,则可以将 cpu-period 设置为
100000(即 0.1 秒),cpu-quota 设置为 200000(0.2 秒)。
使用示例:
使用命令 docker run 创建容器

在宿主机上执行 top

从上图可以看到基本占了 100%的 cpu 资源
则最终生成的 cgroup 的 cpu 周期配置可以下面的目录中找到:
/sys/fs/cgroup/cpu/system.slice/docker-容器的完整长ID>/

修改容器的 cpu.cfs_period_us 和 cpu.cfs_quota_us 值

执行 top 查看 cpu 资源

从上图可以看到基本占了 50%的 cpu 资源
RT  调度策略下的配置 实时调度策略与公平调度策略中的按周期分配时间的方法类似,也是
在周期内分配一个固定的运行时间。
cpu.rt_period_us :设定周期时间。
cpu.rt_runtime_us:设定周期中的运行时间。

cpuset - CPU 绑定
对多核 CPU 的服务器,docker 还可以控制容器运行限定使用哪些 cpu 内核和内存节点,即
使用–cpuset-cpus 和–cpuset-mems 参数。对具有 NUMA 拓扑(具有多 CPU、多内存节点)的
服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。如果服务器只有一个

分页阅读: 1 2 3 4
【声明】:8090安全小组门户(https://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。