容器核心技术-Cgroups

一、Cgroups

  • Cgroups (Control Groups) 是 Linux 下用于对一个或一组进程进行资源控制和监控的机制;
  • 可以对诸如CPU使用时间、内存、磁盘I/O等进程所需的资源进行限制;
  • 不同资源的具体管理工作由相应的Cgroup 子系统(Subsystem)来实现;
  • 针对不同类型的资源限制,只要将限制策略在不同的的子系统上进行关联即可;
  • Cgroups在不同的系统资源管理子系统中以层级树(Hierarchy)的方式来组织管理:每个Cgroup都可以包含其他的子Cgroup,因此子Cgroup能使用的资源除了受本Cgroup 配置的资源参数限制,还受到父Cgroup 设置的资源限制。
  • 在cgroup中,使用 task(任务) 来表示系统的一个进程或线程。

二、子系统

  1. blkio: 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及USB等等
  2. cpu: 这个子系统使用调度程序为cgroup任务提供CPU的访问
  3. cpuacct: 产生cgroup任务的CPU资源报告
  4. cpuset: 如果是多核心的CPU,这个子系统会为cgroup任务分配单独的CPU和内存
  5. devices: 允许或拒绝cgroup 任务对设备的访问
  6. freezer: 暂停和恢复 cgroup 任务
  7. memory: 设置每个cgroup的内存限制以及产生内存资源报告
  8. net_cls: 标记每个网络包以供cgroup方便使用
  9. ns: 名称空间子系统
  10. pid: 进程标识子系统

三、示例

3.1 cpu子系统

busyloop:

package main
func main(){
  go func(){
        for{}
  }()
  for{}
}

1.运行busyloop,top查看 CPU 使用情况,CPU 占用 200%:

容器核心技术-Cgroups_第1张图片

2.通过cgroup 限制 cpu:

#在cgroup cpu 子系统目录中创建目录
#创建完之后在目录中自动生成一些文件,只需要修改文件的配置就可以
cd/sys/fs/cgroup/cpu
mkdir cpudemo

在这里插入图片描述
3.把进程添加到cgroup.procs

echo $(ps -ef | grep busyloop | grep -v grep | awk '{print $2}') > cgroup.procs
echo 10000> cpu.cfs_quota_us

容器核心技术-Cgroups_第2张图片
4.进程的cpu限制到了10%

在这里插入图片描述
cpu.cfs_period_us ,是CFS 调度的周期,默认是 100000,单位是 microseconds 也就是 100ms
cpu.cfs_quota_us 在一个调度周期里,这个控制组被允许的运行时间,比如 30000 ,就是 30ms
这两个参数进行除法 cpu.cfs_quota_us/cpu.cfs_period_us ,比如 10ms /100ms = 0.1 ,表示这个控制组被允许使用的CPU最大配额是 0.1个cpu

你可能感兴趣的:(云原生,容器,kubernetes)