提到容器化不得不提到虚拟化,接下来分别给大家介绍!

1、什么是虚拟化?

       在以前,大多数企业将每台服务器用于一个特定的程序,因为这些不同的程序并不适用于同一个系统中,但问题是,但多数服务器在运行计算时只会使用他们整体处理能力的一小部分,不能充分利用服务器的处理能力。

虚拟化的架构图如下:
在这里插入图片描述

       虚拟化就解决了这个问题,将多台服务器整合到一台服务器中,运行多个虚拟环境,每个VM都有自己的操作系统(这些操作系统可以是不同的),可以在其上安装应用程序。

       虚拟机的设计原理彼此间是隔离的,并且与虚拟主机隔离,这意味着一个应用程序中的安全问题不会影响在另一个虚拟机中运行的另一个应用程序。同样,如果一个应用程序崩溃并需要重新启动服务器,那么可以重新启动它的VM,而不影响任何其他VM的运行。不过,这种隔离偶尔也可能被打破——这种现象称为VM逃逸。

       虚拟化还有利于可扩展性,因为VM是可移植的,例如,可能存在这样一种情况:两个应用程序在一个虚拟主机上的VM中运行,但是其中一个应用程序需要更多的资源,以至于这两个VM不能再在同一主机上共存。

       如果没有虚拟化,将一个应用程序移动到一个新服务器将是一项艰巨的任务。但是VM是以计算机文件的形式存在的,因此这个文件可以很容易地通过网络(甚至通过存储介质)复制或移动到新的虚拟主机上。事实上,VMware的vMotion和微软的Live Migration等特性甚至允许虚拟机在运行时将其移动到新的主机,以确保它们所提供的服务不会中断。

       除此之外,这对灾难恢复来说也有重要意义。如果发生灾难,虚拟机可以转移到辅助站点,且无需镜像主站点。基本上需要的只是在辅助站点上有足够数量的虚拟主机。

       Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件(有时也称为虚拟机监视器)。这可以是“裸机”hypervisor(也称为Type 1 hypervisor),例如包含自己的OS内核并直接在物理服务器上运行的VMware ESXi,也可以是内置于操作系统中的hypervisor(也称为Type 2 hypervisor),例如在Windows Server和Windows 10上运行的Microsoft的Hyper-V。

当前主流的x86虚拟化技术有开源的KVM、Xen,以及VMware ESXi、Microsoft Hyper-V

  • ESXi 虚拟化的核心任务都是通过ESXi内核完成。
  • Xen的CPU和内存虚拟化通过Xen内核完成,磁盘与网络IO虚拟化,以及虚拟化管理与调度由主机上最先启动的管理VM Dom0完成;Dom U就是用户VM,其中HVM Guest(Windows)是全虚拟化,PV Guest(Linux)是半虚拟化。
  • Hyper-V架构Xen的架构非常相似,Xen中的Dom0角色在Hyper-V 叫做Parent Partition。Hyper-V采用微内核,VMM运行在ring -1(根模式),设备驱动和GuestOS运行在Ring0,所以Hyper-V内核比较轻量,安全性和性能上有一定优势。
  • 作为Linux的一个内核模块,KVM 架构更加不同,CPU和内存虚拟化通过KVM内核完成,磁盘与网络IO虚拟化通过QEMU完成,每个VM是一个QEMU进程,由Linux进程调度器管理。

下面为大家介绍一下各云使用的虚拟化技术:

  • 阿里云ECS 架构:
    云服务器ECS(Elastic Compute Service)是阿里云提供的基于KVM虚拟化的弹性计算服务,建立在阿里云⻜天分布式操作系统上。
  • 腾讯云CVM架构:
    云服务器CVM(Cloud Virtual Machine)是腾讯提供的基于KVM虚拟化的弹性计算服务,建立在腾讯云自主研发的分布式资源管理调度系统vStation上。CVM架构是在前端接入层,从租户端或运营端发起请求,在API Server上进行鉴权或参数校验,然后通过云API 传到层vStation,vStation执行资源管理调度,通过装箱算法找到合适的主机后,发送请求到物理集群层进行处理,同时vStation也调度其他关联组件(如镜像、存储、网络等)提供服务。
  • 其他云:
    其他云使用OpenStack架构较多;因为OpenStack免费开源!
    OpenStack是开源的云平台,通过不同的组件提供计算、存储、网络、数据库等多种云服务,其中计算服务Nova通过nova-API与其他组件通信,通过nova-compute对接不同的Hypervisor提供计算虚拟化服务。
    其中nova-compute组件主要提供对接不同Hypervisor的API,如XenAPI for XenServer,libvirt for KVM,VMwareAPI for VMware等

像我们在云上使用的弹性云主机大多数都是基于虚拟化技术实现的资源隔离,记得最开始使用XEN技术进行虚拟化,后面随着KVM的崛起,慢慢的虚拟化逐渐向KVM在转变。

       在经过长期的使用,虚拟化的各种缺点也暴露出来

虚拟化缺点:

  • 性能降低
  • 并非一切都可以虚拟化
  • 成本的增加
  • 服务器蔓延
  • 单点故障

2、什么是容器化

概念定义(来自维基百科):容器化是一种虚拟化技术,又称操作系统层虚拟化(Operating system level virtualization),这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)。对每个实例的拥有者与用户来说,他们使用的服务器程序,看起来就像是自己专用的。

容器化的架构图如下:

在这里插入图片描述
容器是通过一种虚拟化技术来隔离运行在主机上不同进程,从而达到进程之间、进程和宿主操作系统相互隔离、互不影响的技术。这种相互孤立进程就叫容器,它有自己的一套文件系统资源和从属进程。

相对于传统的基于虚拟机的虚拟化技术,容器化的优势在于占用服务器资源空间少,启动非常快,通常几秒内即可引导,缺点就是隔离性和安全性没有VM技术高。

当说到容器,就不得不提LXC(Linux Container),他是Docker的前生,或者说Docker是LXC的使用者。完整的LXC能力在2008年合入Linux主线,所以容器的概念在2008年就基本定型了,并不是后面Docker造出来的。关于LXC的介绍很多,大体都会说“LXC是Linux内核提供的容器技术,能提供轻量级的虚拟化能力,能隔离进程和资源”,但总结起来,无外乎就两大知识点Cgroups(Linux Control Group)和Linux Namespace。搞清楚他俩,容器技术就基本掌握了。

  • Cgroups:重点在“限制”。限制资源的使用,包括CPU、内存、磁盘的使用,体现出对资源的管理能力。
  • Namespace:重点在“隔离”。隔离进程看到的Linux视图。说大白话就是,容器和容器之间不要相互影响,容器和宿主机之间不要相互影响。

虽然LXC不是真正意义上的容器化,但是它的功能已经可以代替之前的虚拟化技术,因此云平台都抢先支持LXC,不管是OpenStack还是Cloudtsack。
与传统的虚拟化相比,容器化的优势在于:

  • 容器提供实时资源调配和可拓展性,
  • 虚拟机提供的资源调配速度较慢与虚拟机相比,
  • 容器是轻量级的与容器相比,
  • 虚拟机的性能有限与虚拟机相比,
  • 容器具有更好的资源利用率CPU虚拟化,IO虚拟化,内存虚拟化,存储虚拟化资源地址

伴随着计算机技术的突飞猛进,容器化技术现在越来越火,其中Docker起到了至关重要的作用,Docker 在国内特别是在一线互联网公司发展非常迅猛,现在Docker的使用已经是十分普遍。
Docker是基于Linux内核的Cgroup和namespace,以及AUFS类的Union FS等技术,对进程进行了封装隔离的技术。它属于操作系统层面的虚拟化技术。

后面会详细讲解

更多推荐