虚拟化与容器


虚拟化按目前使用的类别分类,可分为两种,主机级别虚拟化容器级别虚拟化

1.主机级别虚拟化

  • type-I:Hypervisor
  • type-II:OS-hosted

a.type-I

这种虚拟化,hypervisor绕过我们熟知的os内核,直接接管硬件,然后自己再虚拟出对应所需要的os内核。主要产品有VMware ESXI,如下图左侧

1209823-20190103161138787-1294255260.png

b.type-II

宿主机虚拟化,hypervisor层运行于宿主机os之上,通过主机os内核来进行硬件的内核调试,主要产品有VMware workstation,如上图右侧

2.容器级别虚拟化

容器虚拟化,有别于主机虚拟化,其存在宿主机os,但其与主机级别虚拟化的type-II不一样,并非进行内核的虚拟化,而是通过namespace进行虚拟化,通过namespace的隔离,进行各程序的隔离,通过cgroups,进行资源的控制,以此来进行虚拟化。如下图

1209823-20190103161943927-1432896085.jpg

3.namespace

linux 内核从版本 2.4.19 开始陆续引入了 namespace 的概念。当一个程序运行于主机之中时,其基本要求有,系统根文件目录、运行pid进程号、主机名、网卡、ipc通信、程序运行用户这六大类。

linux将以上六类进行了内核级别的虚拟化,这六大类统称为namespace

namespace引入的相关内核版本被隔离的全局系统资源在容器环境下的隔离效果
Mount2.4.19文件系统挂接点每个容器能看到不同的文件系统层次结构
UTS2.6.19hostname每个容器能看到自己的hostname
IPC2.6.19进程间通信同一个IPC namespace的进程之间能互相通讯
PID2.6.24进程PID每个PID namespace中的进程可以有其独立的PID,每个容器可以有其PID为1的root进程
Network始于2.6.24完成于2.6.29网络相关的系统资源每个容器用有其独立的网络设备,IP地址,IP路由表,/proc/net目录,端口号
User name始于2.6.23完成于3.8用户和组ID空间每个container可以有不同的user和group id

因为centos6的内核为2.6,所以user name不支持,所以centos6天然不太支持容器,虽然可以通过升级内核来进行支持,不过建议直接使用centos7以上的系统

4.cgroups

cgroups: Linux control groups,linux为运行的任务分配cpu、ram等,当namespace为容器进行隔离之后,还需要对每个容器进行资源的使用进行控制,不能让其抢占其它容器的资源。

cgroups主要对以下内容进行资源控制

  • blkio:块设备IO
  • cpu:CPU
  • cpuacct:CPU资源使用报告
  • cpuset:多处理器平台上的cpu集合
  • devices:设备访问
  • freezer:挂起或恢复任务
  • memory:内存用量及报告
  • perf_event:对cgroup中的任务进行统一性能测试
  • net_cls:cgroup中的任务创建的数据报文的类别标识

5.AUFS

a. AUFS的概念

AUFS:Union File System,联合文件系统,主要功能是将位于不同物理位置的目录合并成同一个目录,有点类似于hadoop中hdfs的分布式存储。

b.linux的基本文件系列

linux系统启动,至少需要有两种文件系统,一种是bootfs,一种是rootfs

  • bootfs:包含 boot loader 和 kernel。用户不会修改这个文件系统。实际上,在启动(boot)过程完成后,整个内核都会被加载进内存,此时 bootfs 会被卸载掉从而释放出所占用的内存。同时也可以看出,对于同样内核版本的不同的 Linux 发行版的 bootfs 都是一致的。

  • rootfs:包含典型的目录结构,包括 /dev, /proc, /bin, /etc, /lib, /usr, and /tmp 等再加上要运行用户应用所需要的所有配置文件,二进制文件和库文件。这个文件系统在不同的Linux 发行版中是不同的。而且用户可以对这个文件进行修改。

同一个内核版本的所有linux系统的bootfs是相同的,rootfs不同

c.docker 镜像

在docker images中,其采用的是分层技术,基础镜像中的roofs会一直保持只读模式,docker利用union mount来在这个rootfs上增加更多的只读文件系统,最后它们看起来就像一个文件系统即容器的rootfs。

在docker的分层镜像中,除了支持aufs之外,还支持devicemapper,因为在aufs暂时还未被收纳入linux内核主干,ubuntu14支持aufs,所以docker在ubuntu上面使用aufs,而作为比较保留的redhat系列上,docker使用的devicemapper

1209823-20190103170601591-527434993.png

转载于:https://www.cnblogs.com/marility/p/10215062.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值