zoukankan      html  css  js  c++  java
  • docker资源隔离实现方式

    默认情况下,一个容器没有资源限制,几乎可以使用宿主主机的所有资源。
    docker提供了控制内存、cpu、block io。但是实际上主要是namespace和cgroup控制资源的隔离

    Docker的隔离性主要运用Namespace 技术。传统上Linux中的PID是唯一且独立的,在正常情况下,用户不会看见重复的PID。然而在Docker采用了Namespace,从而令相同的PID可于不同的Namespace中独立存在。如,A Container 之中PID=1是A程序,而B Container之中的PID=1同样可以是A程序。虽然Docker可透过Namespace的方式分隔出看似是独立的空间,然而Linux内核(Kernel)却不能Namespace,所以即使有多个Container,所有的system call其实都是通过主机的内核处理,这便为Docker留下了不可否认的安全问题。

    namespace(命名空间)可以隔离哪些

    • 文件系统需要是被隔离的
    • 网络也是需要被隔离的
    • 进程间的通信也要被隔离
    • 针对权限,用户和用户组也需要隔离
    • 进程内的PID也需要与宿主机中的PID进行隔离
    • 容器也要有自己的主机名
    • 有了以上的隔离,我们认为一个容器可以与宿主机和其他容器是隔离开的。
    • 恰巧Linux 的namespace可以做到这些。


    使用Namespace进行容器的隔离有什么缺点呢?
      最大的缺点就是隔离不彻底
      1)容器知识运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核
      2)在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间即如果某个容器修改了时间,那整个宿主机的时间都会随之修改
      3)容器给应用暴露出来的攻击面比较大,在生产环境中,没有人敢把运行在物理机上的Linux容器暴露在公网上


    Linux的 cgroups
    强大内核工具cgroups
    cgroups是Linux的另外一个强大的内核工具,有了cgroups,不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控任务(进程或县城)启停等。说白了就是:cgroups可以限制、记录任务组所使用的物理资源(包括CPU,Memory,IO等),是构建Docker等一系列虚拟化管理工具的基石。

    cgroups 的作用
      cgroups 为不同用户层面的资源管理提供了一个统一接口,从单个的资源控制到操作系统层面的虚拟化,cgroups提供了4大功能。

    • 资源限制

    cgroups可以对任务使用的资源总额进行限制。
    如 设定应用运行时使用的内存上限,一旦超过配额就发出OOM提示

    • 优先级分配

    通过分配的CPU时间片数量以及磁盘IO带宽大小,实际上就相当于控制了任务运行的优先级

    • 资源统计

    cgroups可以统计系统的资源使用量
    如CPU使用时长,内存用量等,这个功能非常适用于计费

    • 任务控制

    cgroups 可以对任务进行挂起、恢复等操作

  • 相关阅读:
    Serialization and deserialization are bottlenecks in parallel and distributed computing, especially in machine learning applications with large objects and large quantities of data.
    Introduction to the Standard Directory Layout
    import 原理 及 导入 自定义、第三方 包
    403 'Forbidden'
    https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
    These interactions can be expressed as complicated, large scale graphs. Mining data requires a distributed data processing engine
    mysqldump --flush-logs
    mysql dump 参数
    mysql dump 参数
    如果是在有master上开启了该参数,记得在slave端也要开启这个参数(salve需要stop后再重新start),否则在master上创建函数会导致replaction中断。
  • 原文地址:https://www.cnblogs.com/--smile/p/11810027.html
Copyright © 2011-2022 走看看