• blackpiglet
    2018-09-05
    1 之前遇到过,但是没有考虑如何解决,临时抱佛脚,查了 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已经多租户隔离。
    展开

    作者回复: 课代表出现了!

     1
     237
  • Jeff.W
    2018-09-13
    可怜的容器,被Namespace欺骗,又被Cgroups限制,在这样的环境下,还发挥着自己生命的意义-与应用程序同生命周期,同生共死~
     2
     97
  • monkey
    2018-09-05
    对cgroup有了更深的了解,作者能帮所有订阅的同学建个微信群方便大家交流心得吗?买的其他课程很多老师都建了交流群氛围挺好的哈。

    作者回复: 我跟编辑沟通一下

     10
     41
  • snakorse
    2018-09-05
    不太明白,既然都是用的宿主内核,那容器内还有不同的操作系统(centos,ubuntu)之分吗?如果有,那是如何做到的呢?
     1
     34
  • atompi
    2018-09-05
    1. 把宿主机的 /var/lib/lxcfs/proc/* 文件挂载到容器的/proc/*
    2. 既然有人提到了Windows运行容器的疑问,那就从这里说开。虚拟机可以通过vbox、VMware、Hyper-V直接运行在各种支持虚拟化的操作系统上,而 Linux 容器只能运行在Linux内核的操作系统之上,而且内核版本也有所限制(详见namespace、Cgroups在Linux内核中的发展史)。对于前面仁兄所说的Docker可以在Windows10上运行,并不是直接运行在Windows操作系统中,而是通过Hyper-V的支持,借助docker-machine,相当于是在Linux内核的虚拟机上运行的容器,实际上还是跑在Linux内核之上。
    
     29
  • 三七
    2018-09-10
    /proc文件系统的问题我好像遇到过这个坑..当时在容器上运行的java应用,由于当时jvm参数没正确配置上,就用默认的,而容器设置的内存为4g,最后oom了,当时用命令查看容器的内存占用情况,竟然发现内存竟然有60多g。 那应该显示的是宿主机的内存了,jvm按照宿主机内存大小分配的默认内存应该大于4g 所以还没full gc 就oom了

    作者回复: 这个问题确实很普遍

    
     19
  • 天秤vs永恒
    2018-09-05
    对 Namespace 和 Cgroups 的理解又加深了很多!
    
     18
  • lesliexlxiao
    2018-09-21
    参照老师的教程在 /sys/fs/cgroup/cpu 下建立了 container 目录,做完实践想删除该文件夹。
    执行:rm -rf container/
    报错:cannot remove ‘container/cpu.rt_period_us’: Operation not permitted
    执行:lsattr
    报错:lsattr: Inappropriate ioctl for device While reading flags on ./container
    请教下老师,该如何删除该目录。为什么现在 root 权限也删除不了该目录呢
    展开
     5
     15
  • 波
    2018-09-14
    把复杂的问题讲得如此简单易懂,这才叫专家,👍
    
     12
  • paingain
    2018-09-07
    是不是可以理解:一个docker里面跑的进程都是docker这个进程的子进程?

    作者回复: 不。是entrypoint进程的子进程。docker基本上是旁路控制的作用。

     1
     10
  • A-
    2018-09-05
    这篇文章写的真不错,终于明白cgroup是干嘛的了。再有,我能在这里打招聘广告吗?

    作者回复: 不太好,这里还是交流技术为主

    
     10
  • 暮雨
    2018-09-08
    容器内部还能再做namespace和cgroup么?也就是容器中再做docker

    作者回复: 没问题。但是要挂载对应的文件系统,开启需要的权限。

    
     7
  • Bob
    2018-09-06
    请教个问题,cgroups除了限制资源上限,能否锁定下限?如果不能,那不是很容易被抢资源?

    作者回复: 只有上限。所以才需要kubernetes 来帮你做调度嘛。

    
     7
  • 钱晓明
    2018-09-05
    既然容器都运行在同一个内核,我在两个容器里挂载了同一个本地目录 ,然后在一个容器里的该目录下建立一个子目录,用mount命令成功挂载远程的nfs到这个子目录上,但是在另一个容器里看还是空子目录,没有nfs服务里的内容。这该怎么解决?是不是我的方法就不对?

    作者回复: 你的mount操作都被隔离在一个容器里了,另一个怎么能看到呢?

    
     7
  • 岁月~静好
    2018-09-05
    相对于虚拟机来说,容器没有专门的cpu内存等,没有虚拟的操作系统,只是通过namespace重命名的进程运行买物理机上,没有实质性的隔离,会发生容器内的应用越狱等情况。但可以通过cgroup来限制容器的cpu内存等的使用,现有问题是top,/pro下查看到的还是物理界机的相关信息。不知道理解的是否正确?

    作者回复: 是的呢

    
     7
  • pytimer
    2018-09-05
    为什么容器不添加磁盘限制?

    作者回复: 技术上没有问题,但对上层编排系统的挑战比较大

    
     7
  • 淸曉
    2018-12-25
    运行完docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash
    并没有在容器里和外面的/sys/fs/cgroup/cpu/ 找到docker/ 目录。
    容器里:
    root@21e3e814d573:/# cat /sys/fs/cgroup/cpu/
    cgroup.clone_children cpu.shares
    cgroup.event_control cpu.stat
    cgroup.procs cpuacct.stat
    cpu.cfs_period_us cpuacct.usage
    cpu.cfs_quota_us cpuacct.usage_percpu
    cpu.rt_period_us notify_on_release
    cpu.rt_runtime_us tasks

    容器外:
    [root@adsl-172-0-194-80 ~]# cat /sys/fs/cgroup/cpu/
    cgroup.clone_children cpu.rt_period_us
    cgroup.event_control cpu.rt_runtime_us
    cgroup.procs cpu.shares
    cgroup.sane_behavior cpu.stat
    container/ notify_on_release
    cpuacct.stat release_agent
    cpuacct.usage system.slice/
    cpuacct.usage_percpu tasks
    cpu.cfs_period_us user.slice/ cpu.cfs_quota_us

    请问老师这是什么情况?
    展开
     5
     6
  • V V
    2018-09-07
    为什么说容器中无法同时运行两个不同的应用?实际上可以的。设置CMD参数为一个脚本,脚本中启动多个不同的进程。或者通过exec执行bash进入容器后,手动启动多个在后台运行的进程。

    作者回复: 试想一下,你这么运行起来的后台进程异常退出后,你如何知晓?由于没没有真正的init进程,贸然这么运行起来的孤儿进程是非常棘手的

    
     6
  • microshaoft
    2018-09-07
    讲讲端口,环境变量,网络如何复用隔离的,容器内执行关机命令是如何被限制的
    
     5
  • A:春哥大魔王
    2018-09-05
    感觉理解了namespace和cgroup,自己也可以搞一个进程容器了

    作者回复: 所以docker公司其实一直很担心,他知道自己门槛不高

    
     5
我们在线,来聊聊吧