admin 管理员组文章数量: 1184232
2024年3月25日发(作者:element品牌介绍)
Docker的内核,性能与调优
首先我们抛出3个问题:
1.
docker容器的内核与宿主机内核是怎样的关系?
2.
容器在运行时如何调用系统资源?
3.
docker的性能参数有没有作用范围?
能够将这3个问题全部解答,关于docker的内核与调优策略
便有了一定程度的认识。
一、容器与宿主机的内核关系 —— 共享内核
docker镜像是一个“应用程序和它运行依赖环境”的封装。
当镜像运行起来后,即是docker容器。运行时的容器本质是
操作系统下的一个进程,这些进程共享同一个宿主机OS的内
核。
与传统VM相比,docker是一种操作系统虚拟化技术,并不需
要在镜像内安装GuestOS。
docker在共享宿主机内核的基础上包装内核提供的一系列
API,这些API中最重要的就是namespace和cgroup。通过
namespace实现隔离,通过cgroup实现资源限制。
二、Namespace--命名空间
•
PIDnamespace:每当在此空间中启动一个程序,内核就
给它分配唯一的ID。与宿主机所见的不同,容器内的进
程都有自己的进程ID空间。
•
MNTnamespace:每个容器都有自己目录挂载的命名空
间。
•
NETnamespace:每个容器都有自己单独的网络栈,其中
的socket和网卡设备都是其他容器不能访问的。
•
UTSnamespace:在此命名空间中的进程拥有自己的主机
名和NIS域名。
•
IPCnamespace:拥有相同IPC命名空间的进程才可以利
用“共享内存、信号量、消息队列”方式进行通信。
•
User namespace:用于隔离容器中的UID,GID和根目录
三、Cgroup--控制组
顾名思义,控制和分组是用来对进程进行分层分组,在组的粒
度上实现资源限制和策略控制。每个容器中的进程都由组策略
控制。
Cgroup包含了很多控制器。
Cgroup对进程分组的控制是通过一个虚拟文件系统下的目录
节点和节点文件实现的,控制器是目录节点中的文件,文件内
容规定了系统资源的配额。
以全局cgroup为例 # ls /sys/fs/cgroup
默认的情况下,docker会在这些目录下面创建自己的节点子
目录,而每个容器都会创建自己容器ID的节点子目录;这些
目录都包含了对应层次的控制器文件,用于控制每一级的资源
配额。下文简述一些控制器的功能:
•
cpu:限制组中进程的cpu使用量
•
cpuacct:对进程的CPU使用程度进行计量
•
memory:限制组中进程的内存使用量,并计量
•
blkio:限制组中进程对块设备的IO操作
•
net_prio:用于设置组相关网络包的优先级
•
hugetlb:用于限制和报告组内进程对大页面的使用量
•
freezer:用于组内进程的挂起和解冻
版权声明:本文标题:Docker的内核,性能与调优 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1711364182a590507.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论