请选择 进入手机版 | 继续访问电脑版

一文看懂docker两大核心内核技术--namespaces+cgroup

[复制链接]
术数古籍专卖疤 发表于 2022-7-4 05:13:49 | 显示全部楼层 |阅读模式
概述

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)

一文看懂docker两大核心内核技术--namespaces+cgroup-1.jpg

<hr>
1、namespaces 名称空间

很多编程语言都包含了命名空间的概念,我们可以认为命名空间是一种封装,封装本身实际上实现了代码的隔离,

在操作系统中命名空间命名空间提供的是系统资源的隔离,其中系统资源包括了:进程、网络、文件系统......

实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器,在同一个命名空间下的进程可以感知彼此的变化,而对其他命名空间的进程一无所知,这样就可以让容器中的进程产生一个错觉,仿佛他自己置身于一个独立的系统环境当中,以此达到独立和隔离的目的。

一文看懂docker两大核心内核技术--namespaces+cgroup-2.jpg


这些隔离是怎么管理起来的呢?这里就需要用到Control groups控制组。
<hr>
2、control Group 控制组

一种linux内核提供的一种可以限制、记录、隔离进程组所使用的理资源的机制。为容器而生,没有cgroups就没有今天的容器技术。

一文看懂docker两大核心内核技术--namespaces+cgroup-3.jpg


2.1、cgroup的特点是:

cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理。

cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源载分配和再利用

所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组
2.2、cgroups子系统

  • cpu 子系统,主要限制进程的 cpu 使用率。
  • cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。
  • cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
  • memory 子系统,可以限制进程的 memory 使用量。
  • blkio 子系统,可以限制进程的块设备 io。
  • devices 子系统,可以控制进程能够访问某些设备。
  • net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
  • net_prio — 这个子系统用来设计网络流量的优先级
  • freezer 子系统,可以挂起或者恢复 cgroups 中的进程。
  • ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace
  • hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。

2.3、四大功能:
    资源限制:可以对任务使用的资源总额进行限制优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等任务控制:cgroup可以对任务执行挂起、恢复等操作
<hr>
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

一文看懂docker两大核心内核技术--namespaces+cgroup-4.jpg




上一篇:5道适合夏天的汤,做着简单,饭前喝一碗,消暑补水,低脂健康
下一篇:悠悠老滋味 念念沂水老丰糕
回复

使用道具 举报

全部回复0 显示全部楼层

发表回复

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

联系客服 关注微信 下载APP 返回顶部 返回列表