docker-容器实现核心技术:CGroups

容器实现核心技术:CGroups

1. CGroups 概念

  • Docker利用namespace实现了容器之间资源隔离,但是namespace不能对容器资源限制,比如CPU、内存。

  • 如果某一个容器属于CPU密集型任务,那么会影响其他容器使用CPU,导致多个容器相互影响并且抢占资源。

  • 如何对多个容器的资源使用进行限制就成了容器化的主要问题。

    ​ 答:引入Control Groups(简称CGroups),限制容器资源

  • CGroups:所有的任务就是运行在系统中的一个进程,而CGroups以某种标准将一组进程为目标进行资源分配和控制。例如CPU、内存、带宽等,并且可以动态配置。

  • CGroups主要功能:

    • 限制进程组使用的资源数量(Resourcelimitation):可以为进程组设定资源使用上限,例如内存
    • 进程组优先级控制(Prioritization):可以为进程组分配特定CPU、磁盘IO吞吐量
    • 记录进程组使用的资源数量(Accounting):例如使用记录某个进程组使用的CPU时间
    • 进程组控制(Control):可以将进程组挂起和恢复
  • ls/sys/fs/cgroup/-l查看cgroups可控制的资源:

    • blkio :对快设备的IO进行限制。
    • cpu:限制CPU时间片的分配,与cpuacct挂载同一目录。
    • cpuacct :生成cgroup中的任务占用CPU资源的报告,与cpu挂载同一目录。
    • cpuset :给cgroup中的任务分配独立的CPU(多核处理器)和内存节点。
    • devices :允许或者拒绝cgroup 中的任务访问设备。
    • freezer :暂停/恢复cgroup 中的任务。
    • hugetlb :限制使用的内存页数量。
    • memory :对cgroup 中任务的可用内存进行限制,并自动生成资源占用报告。
    • net_cls :使用等级识别符(classid)标记网络数据包,这让Linux 流量控制程序(tc)可以识别来自特定从cgroup 任务的数据包,并进行网络限制。
    • net_prio:允许基于cgroup设置网络流量的优先级。
    • perf_event:允许使用perf工具来监控cgroup。
    • pids:限制任务的数量。

2. 容器实际资源限制位置

/sys/fs/cgroup/<资源名>/docker/<容器ID>
posted @ 2020-10-19 14:35  七月流星雨  阅读(240)  评论(0编辑  收藏  举报