06 | 白话容器基础(二):隔离与限制
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Linux容器的基础知识,重点讨论了容器的隔离和限制技术。通过Namespace技术,容器作为宿主机上的普通进程,但通过额外设置的Namespace参数实现隔离,从而具有高性能和敏捷性。然而,基于Linux Namespace的隔离机制也存在一些不足,如多个容器共享宿主机内核、无法彻底隔离等问题。另外,文章还介绍了Linux Cgroups用于限制容器内资源使用的技术,包括CPU、内存、磁盘、网络带宽等。Cgroups通过文件系统接口暴露操作接口,用户可以通过创建目录和配置文件来限制进程的资源使用。总的来说,本文通过简洁清晰的语言,深入浅出地介绍了Linux容器的基础知识,为读者快速了解容器技术提供了重要参考。 文章通过介绍Linux容器的基础知识,重点讨论了容器的隔离和限制技术,包括Namespace技术和Linux Cgroups。通过简洁清晰的语言,深入浅出地介绍了容器作为宿主机上的普通进程,但通过额外设置的Namespace参数实现隔离,以及Cgroups用于限制容器内资源使用的技术。同时,文章也指出了基于Linux Namespace的隔离机制存在的不足,以及Cgroups对资源的限制能力的不完善之处。这些内容为读者提供了全面了解容器技术的重要参考。
《深入剖析 Kubernetes》,新⼈⾸单¥68
全部留言(198)
- 最新
- 精选
- blackpiglet1 之前遇到过,但是没有考虑如何解决,临时抱佛脚,查了 lxcfs,尝试回答一下。top 是从 /prof/stats 目录下获取数据,所以道理上来讲,容器不挂载宿主机的该目录就可以了。lxcfs就是来实现这个功能的,做法是把宿主机的 /var/lib/lxcfs/proc/memoinfo 文件挂载到Docker容器的/proc/meminfo位置后。容器中进程读取相应文件内容时,LXCFS的FUSE实现会从容器对应的Cgroup中读取正确的内存限制。从而使得应用获得正确的资源约束设定。kubernetes环境下,也能用,以ds 方式运行 lxcfs ,自动给容器注入争取的 proc 信息。 2 用的是vanilla kubernetes,遇到的主要挑战就是性能损失和多租户隔离问题,性能损失目前没想到好办法,可能的方案是用ipvs 替换iptables ,以及用 RPC 替换 rest。多租户隔离也没有很好的方法,现在是让不同的namespace调度到不同的物理机上。也许 rancher和openshift已经多租户隔离。
作者回复: 课代表出现了!
2018-09-0511667 - 三七/proc文件系统的问题我好像遇到过这个坑..当时在容器上运行的java应用,由于当时jvm参数没正确配置上,就用默认的,而容器设置的内存为4g,最后oom了,当时用命令查看容器的内存占用情况,竟然发现内存竟然有60多g。 那应该显示的是宿主机的内存了,jvm按照宿主机内存大小分配的默认内存应该大于4g 所以还没full gc 就oom了
作者回复: 这个问题确实很普遍
2018-09-10997 - 公众号:好奇心森林是不是可以理解:一个docker里面跑的进程都是docker这个进程的子进程?
作者回复: 不。是entrypoint进程的子进程。docker基本上是旁路控制的作用。
2018-09-07769 - monkey对cgroup有了更深的了解,作者能帮所有订阅的同学建个微信群方便大家交流心得吗?买的其他课程很多老师都建了交流群氛围挺好的哈。
作者回复: 我跟编辑沟通一下
2018-09-053167 - Bob请教个问题,cgroups除了限制资源上限,能否锁定下限?如果不能,那不是很容易被抢资源?
作者回复: 只有上限。所以才需要kubernetes 来帮你做调度嘛。
2018-09-06253 - 大魔王汪汪感觉理解了namespace和cgroup,自己也可以搞一个进程容器了
作者回复: 所以docker公司其实一直很担心,他知道自己门槛不高
2018-09-05649 - V V为什么说容器中无法同时运行两个不同的应用?实际上可以的。设置CMD参数为一个脚本,脚本中启动多个不同的进程。或者通过exec执行bash进入容器后,手动启动多个在后台运行的进程。
作者回复: 试想一下,你这么运行起来的后台进程异常退出后,你如何知晓?由于没没有真正的init进程,贸然这么运行起来的孤儿进程是非常棘手的
2018-09-07935 - 明珠老师,讲的太好了,言简易懂,每天都在期待新的一节课。 请教一个问题我们通常dockerpull下来的基础镜像比如:centos 7,这个镜像里面没有内核信息是吧?但是封装了systemd等进程管理工具,使得产生的新的进程都是一号进程的子进程,执行ping netstat命令,也会是这个容器一号进程的子进程? 老师这样理解对吗?
作者回复: 没毛病
2018-09-05421 - Joe Black既然容器都运行在同一个内核,我在两个容器里挂载了同一个本地目录 ,然后在一个容器里的该目录下建立一个子目录,用mount命令成功挂载远程的nfs到这个子目录上,但是在另一个容器里看还是空子目录,没有nfs服务里的内容。这该怎么解决?是不是我的方法就不对?
作者回复: 你的mount操作都被隔离在一个容器里了,另一个怎么能看到呢?
2018-09-05418 - 暮雨容器内部还能再做namespace和cgroup么?也就是容器中再做docker
作者回复: 没问题。但是要挂载对应的文件系统,开启需要的权限。
2018-09-08517