话你知容器虚拟技术

传统虚拟化技术与容器技术对比

1、传统的虚拟化技术

传统的虚拟化技术会在已有主机的基础上创建多个虚拟主机,然后在每个虚拟主机上安装独立的操作系统,并由虚拟主机的内核空间和用户空间来运行应用程序

2、docker容器技术

使用主机的硬件,在硬件之上安装一个操作系统,使用相同的内核。然后将用户空间进行隔离,从而分成多个用户空间,基于一个内核来运行。因为容器使用这种隔离用户空间的方式,使得一样可以提供多个应用程序的环境(而应用程序的环境我们称之为容器),所以可以理解为是用户空间的虚拟化技术 容器拥有更高的资源使用效率,因为其无需为每个应用分配一个独立的操作系统,可以使得应用,资源消耗较小,迁移与创建的速度更小。

区别:kvm,xen隔离的非常好,因为他们有自己的内核空间和用户空间,但是容器技术的话,整个容器只有一个内核,不同的是,各虚拟机之间隔离开的仅仅是用户空间。

容器所用到的核心技术

NameSpace:名称空间(资源隔离机制)

在内核级别:完成环境隔离的方法(类似于chroot机制)

  • PID NameSapce Linux 2.6.24 PID隔离,隔离PID号,能够在每一个隔离出来的容器当中来实现虚拟出各种你所需要的PID,使得每一个用户看到的PID号都是独立的,互不干扰
  • Network NameSpace: Linux 2.6.29 网络设备、网络栈、端口等网络资源隔离,用于网络虚拟容器隔离
  • User NameSpace Linux 3.8 用户和用户组资源隔离,完成用户隔离,每一个用户的名称空间当中都有可能可以存在所谓同样用户名的用户 linux 3.8(所以docker是依赖于linux 3.8以后的版本,或者要求更高,是3.10以后的版本)
  • IPC NameSpace Linux 2.6.19 进程间通信资源隔离(信号量、消息队列和共享内存的隔离)
  • UTS NameSpace Linux 2.6.1 主机名和域名隔离
  • Mount NameSpace linux 2.4.19 挂载点隔离(真正是实现文件系统给的隔离) 实现已挂载文件系统隔离的,期望在不同的用户空间当中所通过内核看到的挂载的文件系统应该是不一样的。

向NameSpace发起调用所使用的API

我们为了向namespace发起调用,让namespace完成某些操作

  • clone() 克隆 ,实现线程的系统调用,用来创建新线程
  • setns() 设定名称空间属性,将某进程加载到某个NameSpace去
  • unshare() 做成非共享机制,使进程脱离某个NameSpace的关联到你的新NameSpace当中的

CGroup (Linux Control Group) 控制组

一个用户空间可以将整个服务器的CPU耗尽,那么其他用户空间将无法运行,所以仅有名称空间是无法满足,所以有另一个技术,叫CGroup(linux 2.6.24)

CGroup 内核级别的技术,用于限制、控制与分离一个进程组群的资源(用户自己隔离和建立的),用于实现将进程分完组以后,组内的进程能使用多少的系统级的资源,可以在内核级上加以限制 一般用于隔离一个进程集合,为进程分配足够内存带宽然后限制其访问那些设备,从而完成限制机制

CGroup + NameSpace 结合起来就能实现容器功能

CGroup实现的功能

  • Resource limitation:资源限制
  • Prioritization:优先级控制
  • Accounting:审计和统计功能,主要是为了计费(VPS计费)
  • Control:挂起进程,恢复进程

CGroup的子系统(subsystem)

可使用 lssbusys - m 查看资源组当中的子系统 cgroup 是基于单根树状结果进行组织的 ,在 /sys/fs/cgroup

  • blkio:设定块设备的IO限制
  • cpu:使用调度程序对cpu的CGroup的任务访问,设定CPU的限制(限制CPU使用的空间)
  • cpuacct:报告cgroup当中所使用的CPU资源
  • cpuset:为cgroup中的任务制定可用的cpu和内存资源(分配内存和CPU)
  • memory:设定内存的使用限制(限制内存使用的空间),分配是按段来分配,而不是按空间分配
  • device:控制cgroup中的任务对设备的访问能力
  • freezer:实现挂起进程或恢复cgroup中的任务
  • net_cls:(classid),使用等级级别标识符来标记网络数据包,以实现基于TC完成对不同的cgroup中产生的流量控制
  • perf_event:对每一个用户空间当中的任务的运行时的性能本身分别所产生的事件进行归类统计(使用后使cgroup中的任务可以进行统一的性能测试)
  • hugetlb:对HugeTLB系统进行限制,能够实现在内存分配时的减少内存分配的次数。 CGroup中的术语
  • task(任务):指的是进程或线程
  • cgroup:一个独立的资源控制单位,可以包含一个或多个子系统。每个控制组上可以关联一个或多个子系统,一个任务只能属于一个cgroup
  • subsystem:子系统,需要关联到cgroup
  • hierarchy:资源组的层级结构,层级是有一系列cgroup以一个树状结构排列而成,每一个层级通过绑定对应的子系统进行资源控制,层级中的cgroup节点可以包含零个或多个节点,业也就是你地下还可以继续分层,而子集可以继承父级的某些资源。

AUFS: UnionFS 联合文件系统

UnionFS:能够实现把不同的物理位置的目录能够合并到同一目录中 虽然是合并,但是事实上他是一种叠加。可以合并多个,只有最上层的那个才是可写的。

  • 对于读
    • 如果合并的文件存在重复,只有最后一个合并的可被看到
    • 如果文件不重复,可以看到其他层里不重复的文件
  • 对于写
    • 合并多个目录时,只有最后一个合并的可被写
    • 在其他层看到的文件想去修改,实际上是在最上层创建一个文件进行写的操作。(他的原理有点类似PE的工作方式,比如你在PE上写,其实写的是在本地磁盘上)

docker很依赖AUFS,所以如果没有AUFS的话,不建议docker在生产环境上使用 遗憾的是centos并不支持AUFS,在ubuntu上已经支持AUFS

Device mapper:功能类似AUTFS,LVM用的就是这个技术

Linux 2.6内核引入的最重要技术之一,用于在内核中支持逻辑卷的通用设备映射技术。

  • Mappend Device:被映射出来的设备
  • Mapping Table 映射表,指明了被虚拟出来的设备和真正底层设备有哪些。(相当于从虚拟设备到真正物理设备之间的映射路径)
  • Target Device:源设备

作者:温琦鹏

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2016-12-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

高薪全栈工程师必备Linux 基础

Linux 几乎无处不在,不论是服务器构建,还是客户端开发,操作系统的基础技能对全栈来说都是必备的。 系统的选择 Linux发行版本可以大体分为两类,一类是商...

3918
来自专栏北京马哥教育

如何用几个简单的命令改善你的Linux安全

作者:lrq110120 来源:http://richylu.blog.51cto.com/1481674/1915484 本文中,我们将讨论如何通过一些Lin...

3839
来自专栏编程坑太多

『高级篇』docker之DockerSwarm的了解(27)

PS:假定运行了一个nginx服务2个实例,nginx1 和nginx2,容器内的端口是80,主机内的端口是8080, 这2个容器分别运行在node2和node...

1211
来自专栏运维小白

25.2 安装Docker

Docker安装 curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/y...

4029
来自专栏云计算

Kubernetes中的Service Mesh(第5部分):Dogfood环境和入口

原文地址:https://dzone.com/articles/a-service-mesh-for-kubernetes-part-v-dogfood-env...

2818
来自专栏何俊林

移动App 网络优化细节探讨

3286
来自专栏北京马哥教育

如何用几个简单的命令改善你的Linux安全

在最开始,我们需要问的一个问题是:Linux是已经足够被安全加固了吗?答案当然是否定的。那些娴熟的攻击者所带来的危险是与日俱增的。每天、甚至是每小时都有新的漏洞...

1726
来自专栏BY的专栏

为博客添加 Gitalk 评论插件结语

4176
来自专栏技术博文

单点登录 SSO 的实现原理

单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所...

32510
来自专栏云计算教程系列

物联网入门:搭建MQTT服务器

MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设...

3.8K9

扫码关注云+社区

领取腾讯云代金券