k8s,理解容器中namespace和cgroups的原理

一旦"程序"被执行起来,它就从磁盘上的二进制文件,变成了计算机内存中的数据、寄存器里的值、堆栈中的指令、被打开的文件,以及各种设备的状态信息的一个集合。像这样一个程序运行起来后的计算机执行环境的总和,就是我们今天的主角:进程。

容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个"边界"。

对于Docker等大多数Linux容器来说,Cgroups技术是用来制造约束的主要手段,而Namespace技术则是用来修改进程视图的主要方法。

除了我们刚刚用到的PID Namespace,Linux操作系统还提供了Mount、UTS、IPC、Network和User这些Namespace,用来对各种不同的进程上下文进行"障眼法"操作。

"敏捷"和"高性能"是容器相较于虚拟机最大的优势,也是它能够在PaaS这种更细粒度的资源管理平台上大行其道的重要原因。

不过,有利就有弊,基于Linux Namespace的隔离机制相比于虚拟化技术也有很多不足之处,其中最主要的问题就是:隔离得不彻底。

其次,在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子就是:时间。


众所周知,Linux下的/proc目录存储的是记录当前内核运行状态的一系列特殊文件,用户可以通过访问这些文件,查看系统以及当前正在运行的进程的信息,比如CPU使用情况、内存占用率等,这些文件也是top指令查看系统信息的主要数据来源。

但是,你如果在容器里执行top指令,就会发现,它显示的信息居然是宿主机的CPU和内存数据,而不是当前容器的数据。

造成这个问题的原因就是,/proc文件系统并不知道用户通过Cgroups给这个容器做了什么样的资源限制,即:/proc文件系统不了解Cgroups限制的存在。

相关推荐
阿无,12 小时前
RabbitMQ面试题
分布式·rabbitmq
吕海洋13 小时前
目前可用的docker源2026.08
运维·docker·容器
盛世宏博智慧档案15 小时前
全国100个分布式机房环境温湿度智能监测系统建设方案
分布式·机房·温湿度
gsls20080815 小时前
Penpot Docker 部署与 MCP 服务配置文档
运维·docker·容器·原型·penpot
天蓝不会忘记0215 小时前
k8s集群部署的方法原理
云原生·容器·kubernetes
六bring个六16 小时前
分布式设备连接对端失败问题分析
分布式·分布式软总线
红球yyds17 小时前
用anisble搭建k8s集群及原理
云原生·容器·kubernetes
Thneonl20 小时前
让恢复动作敢按下去:dry-run、审批门、自动回滚与 mutable twin
rust·kubernetes
艾伦_耶格宇20 小时前
【DOCKER容器实战】-2MySQL
运维·docker·容器
天涯明月19931 天前
ray深度研究报告
大数据·人工智能·分布式·ray