docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker Cgroup概念

Docker的进程和Cgroup概念详解

作者:AquaPluto

文章主要介绍了容器内的进程组织和关系,包括containerd-shim和容器内1号进程的角色和特点,以及信号处理机制,同时,文章还讨论了Cgroup在Linux系统中用于资源管理和控制的机制,包括CFS调度算法和Kubernetes中的资源管理,感兴趣的朋友跟随小编一起看看吧

容器里的进程组织或关系

0号进程:containerd-shim

角色:

特点:

1号进程:容器内的第一个进程

角色:

特点:

应具备的能力:

~# docker container inspect text | grep -i pid
pid:41404---------对应的就是容器内的1号进程
~# ps -elf | grep 41404
pid:41404 ppid:41382---------对应的就是容器内的0号进程

进程收到信号后的三种反应

信号是操作系统向进程发送的一种通知,用于通知进程发生了某种事件。可以用于进程间通信或控制进程行为。

两个特权信号

SIGKILL (-9)

SIGSTOP (-19):

SIGTERM(-15)信号是可以被进程忽略或者捕获的

在容器内执行 kill 命令的行为

kill -9 1

kill -19 1

kill -15 1

Cgroup 介绍

Cgroup(Control Group)是 Linux 内核提供的一种机制,用于限制、控制和监控进程组的资源使用。它允许系统管理员对一组进程的资源使用进行精细化管理,包括 CPU、内存、磁盘 I/O 等。Cgroup 是容器技术(如 Docker、Kubernetes)中实现资源隔离和管理的基础。

为何要用 Cgroup?Cgroup 的主要作用是限制容器或进程组对宿主机资源的使用,防止某个容器或进程过度占用资源,从而影响其他容器或进程的正常运行。通过 Cgroup,可以确保宿主机上的多个容器或进程能够公平、稳定地共享系统资源。

在 Linux 系统中,可以通过以下命令查看和管理 Cgroup

# 查看当前的 Cgroup 控制层级
cat /proc/cgroups
# 创建一个新的 Cgroup
mkdir /sys/fs/cgroup/cpu/my_cgroup
# 将一个进程加入到 Cgroup 中
echo "PID" > /sys/fs/cgroup/cpu/my_cgroup/tasks
# 设置 CPU 限制
echo "2" > /sys/fs/cgroup/cpu/my_cgroup/cpu.cfs_quota_us

CPU Cgroup 中与 CFS 相关的参数

CFS(Completely Fair Scheduler)是 Linux 内核中的一种调度算法,用于公平地分配 CPU 时间给各个进程。Cgroup 中与 CFS 相关的参数决定了进程组对 CPU 的使用率。

总结:

Kubernetes 中的资源管理

在 Kubernetes 中,Pod 的资源请求和限制可以通过 requests 和 limits 来设置。

但是要注意,limits 设置的上限是否能达到,还取决于宿主机的实际资源情况。如果宿主机资源不足,Pod 可能无法达到 limits 设置的上限。

memory cgroup

每个容器都有对应的 memory cgroup 控制组,位于 /sys/fs/cgroup/memory/system.slice/docker - xxx,用于管理容器内存。

主要参数:

示例: 容器启动时,rss 为 100 M,page cache 为 899 M,内存总使用量为 999 M;随着进程运行,申请更多内存后,rss 增至 200 M,page cache 减至 699 M,内存总使用量仍为 899 M,但实际进程占用的物理内存增大。

容器的可用磁盘进行配额

默认情况,容器内的可用磁盘空间是没有限制的。

容器内的文件系统 = lowerdir + upperdir

写入操作

如何解决问题?有两种方式:

到此这篇关于Docker的进程和Cgroup概念的文章就介绍到这了,更多相关Docker Cgroup概念内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文