美文网首页
docker-隔离与限制

docker-隔离与限制

作者: 平_方 | 来源:发表于2018-11-29 15:37 被阅读0次

    1.容器,其实是一种特殊的进程而已指定了不同的namespace参数pid、mount、ipc、network、user)
    2.容器中的程序使用settimeofday(2)系统调用修改了时间,整个宿主机的时间就都会被随之修改。
    3.cgroup可以限制进程使用的资源 (/sys/fs/cgroup/)

    mount -t cgroup 
    cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
    cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
    cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
    cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
    cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
    cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
    cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
    cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
    cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
    cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
    cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
    

    输出的结果是一系列文件系统目录。
    在 /sys/fs/cgroup 下面有很多诸如 cpuset、cpu、 memory 这样的子目录,也叫子系统。
    memory,为进程设定内存使用的限制
    cpuset,为进程分配单独的 CPU 核和对应的内存节点
    blkio,为​​​块​​​设​​​备​​​设​​​定​​​I/O 限​​​制,一般用于磁盘等设备
    这些都是我这台机器当前可以被 Cgroups 进行限制的资源种类。以cpu子系统为例

    ls /sys/fs/cgroup/cpu
    cgroup.clone_children  cgroup.sane_behavior  cpuacct.usage         cpu.cfs_quota_us   cpu.shares  notify_on_release  tasks
    cgroup.event_control   container             cpuacct.usage_percpu  cpu.rt_period_us   cpu.stat    release_agent      user.slice
    cgroup.procs           cpuacct.stat          cpu.cfs_period_us     cpu.rt_runtime_us  docker      system.slice
    

    cfs_period和cfs_quota限制进程在长度为 cfs_period 的一段时间内,只能被分配到总量为 cfs_quota 的 CPU 时间.
    tasks是添加被限制的进程pid的文件
    cgroup就是一个子系统目录加上一组资源限制文件的组合。duiyu对于docker等linux容器项目来说,他们只需要在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),然后启动容器进程之后,把这个进程的pid填写到对应的控制住tasks文件就行了。
    4.容器是一个“单进程”模型。
    由于一个容器的本质就是一个进程,用户的应用进程实际上就是容器里 PID=1 的进程,也是其他后续创建的所有进程的父进程。这就意味着,在一个容器中,你没办法同时运行两个不同的应用,除非你能事先找到一个公共的 PID=1 的程序来充当两个不同的应用,会用 systemd 或者 supervisord 这样的软件来代替应用本身作为容器的启动进程。

    相关文章

      网友评论

          本文标题:docker-隔离与限制

          本文链接:https://www.haomeiwen.com/subject/jxoaqqtx.html