容器技术(序)

容器技术是继虚拟化技术之后,逐渐成为对云计算领域具有深远影响的变革技术。容器技术的发展和应用,为各行业应用云计算提供了新思路,也对云计算的交付方式、效率、PaaS 平台的构建等方面产生深远的影响,具体体现在以下几个方面:简化部署、快速启动、服务组合、易于迁移。虚拟化是云计算的重要基础,容器定义了一套从构建到执行的标准化体系,改变了传统的虚拟化技术,深度影响云计算领域,容器是云计算的未来

虚拟化技术背景

虚拟化技术被用于系统资源管理、容错、软硬件保护、增强系统安全、提升性能和节能等领域;虚拟化技术广泛地与其他技术结合,并且得到更多硬件支持,其性能损失不断降低,部分固化到硬件中

虚拟化技术的含义:将任何一种形式的资源抽象成另一种形式的技术都是虚拟化。例如虚拟内存空间和进程,如果把内存看作一个设备,虚拟内存就是将物理内存虚拟成多个内存空间,如果把内存看作一个设备,虚拟内存就是将物理内存虚拟成多个内存空间;进程的概念实际是对于物理硬件执行环境的一个抽象,每一个进程都享有一个完整的硬件执行环境,并且与其他进程相隔离;相对于进程级的虚拟化,虚拟机是另一个层面的虚拟化,即系统虚拟化。系统级虚拟化所抽象的环境是整个计算机,其抽象出的环境成为虚拟机,包括CPU、内存和I/O。在每个虚拟机中都可以运行一个操作系统,在一台计算机上可以虚拟出多个虚拟机

目前已经有网络虚拟化、微处理器虚拟化、文件虚拟化和存储虚拟化等技术。抽象来说,虚拟化是资源的逻辑表示,它不受物理限制的约束;具体来说,虚拟化技术的实现形式是在系统中加入一个虚拟化层,虚拟化层将下层的资源抽象成另一种形式的资源,提供给上层使用。通过空间上的分割、时间上的分时以及模拟,虚拟化可以将一份资源抽象成多份。反过来,虚拟化也可以将多份资源抽象成一份。虚拟化可以将纷繁复杂的物理世界改造成一个可以实现定制需求的世界

系统虚拟化是虚拟化技术中的一种,其抽象的粒度是整个计算机;硬件与操作系统之间的是硬件抽象层,在操作系统与应用程序或函数库之间的是API抽象层。硬件抽象层(Hardware Abstraction Layer, HAL)是计算机中软件所能控制的硬件的抽象接口,通常包括CPU的各种寄存器、内存管理模块、I/O端口和内存映射的I/O地址等;API抽象层是一个进程所能控制的系统功能的集合,包括创建新进程、内存申请和归还、进程间同步与共享、文件系统和网络操作等;本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。虚拟化可以发生在现代计算机系统的各个层次上,不同层次的虚拟化会带来不同的虚拟化概念

容器技术(序)

物理资源通常有一个定语成为宿主(Host),而虚拟出来的资源通常有一个定语称为客户(Guest)。例如讲一个物理计算机虚拟为一个或多个虚拟计算机,则这个物理计算机通常也被称为宿主机(Host Machine),而其上运行的虚拟计算机被称为客户机(Guest Machine);宿主机上运行的操作系统被称为宿主机操作系统(Host OS),而虚拟机中运行的操作系统被称为客户机操作系统(Guest OS)

系统虚拟化 指将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统,每个虚拟计算机系统(简称为虚拟机)都拥有自己的虚拟硬件(如CPU、内存和设备等),来提供一个独立的虚拟机执行环境。通过虚拟化层的模拟,虚拟机中的操作系统认为自己仍然是独占一个系统在运行。每个虚拟机中的操作系统可以完全不同,并且它们的执行环境是完全独立的,这个虚拟化层被称为虚拟机监控器(Virtual Machine Monitor,VMM)。VM和物理机系统可以是两个完全不同的ISA系统,不同的ISA使得虚拟机的每一条指令可以在处理器上直接运行,只有那些需要虚拟化的指令才会由VMM进行处理

虚拟机可以看作是物理机的一种高效隔离的复制,有几个特点

  • 同质 指虚拟机的运行环境和物理机的环境在本质上需要是相同的,但在表现上能够有一些差异;例如,虚拟机所看到的处理器个数可以和物理机上实际的处理器个数不同,处理器主频也可以与物理机的不同
  • 高效 虚拟机中运行的软件需要由接近在物理机上直接运行的性能--大多数指令直接在硬件上运行,少量指令需要经过VMM处理器或模拟
  • 资源受控 VMM需要对系统资源由完全控制能力和管理权限,包括资源的分配、监控和回收

类虚拟化技术(Para-Virtualization)主要思想是通过客户机操作系统与虚拟化管理层的协同设计,由虚拟化管理层软件提供一个近似于原物理系统,但又不完全相同(与原系统)的虚拟平台

系统虚拟化提供了多个隔离的执行环境,具有如下功能功能

  • 封装性 以虚拟机为粒度的封装使得虚拟机运行环境保存非常便捷,虚拟机的优秀封装性使得以下应用模式可以方便地实现
  • 虚拟机快照
  • 虚拟机克隆 从虚拟机的执行环境复制出一个或多个相同的虚拟机
  • 虚拟机挂起 暂停一个运行中的虚拟机,将其运行环境保存在磁盘上
  • 虚拟机恢复 将保存在磁盘上的虚拟机运行环境恢复到内存中继续运行的操作
  • 多实例 在一个计算机上运行多个虚拟机使得资源的调度更为优化
  • 隔离 使用虚拟机,每个应用程序可以在自己的操作系统环境中独立地运行,而不会影响到其他的工作负载
  • 硬件无关性 虚拟化是资源的逻辑表示,它不受物理限制的约束。由于虚拟化层的抽象,虚拟机与底层的硬件没有直接的绑定关系
  • 特权功能 由于虚拟化层处于客户机及客户机操作系统的下层,其具有更高的特权属性。在这个层中添加新的功能有如下两个优势
  • 新的功能有高级特权级,不能被客户机操作系统绕过
  • 新的功能不需要了解客户机内部的语义,使其实现上更容易
容器技术(序)

云计算的一个核心思想是在服务器端提供集中的计算资源,同时这些计算资源要独立地服务于不同的用户,也就是在共享的同时,为每个用户提供隔离、安全、可信的工作环境。虚拟化技术将是云计算的一个基础架构,即云计算实际上是一个虚拟化的计算资源池,用来容纳各种不同的工作模式,这些模式可以快速部署到物理设施上。虚拟化的资源按照来自用户的需求多少动态调动资源,每个用户都有一个独立的计算执行环境,虚拟化为云计算的发展提供一个自适应、自管理的灵活基础架构

VMM分类

  • 按虚拟平台分类
  • 完全虚拟化 VMM虚拟的是现实存在的平台,并且客户机操作系统看来,虚拟的平台和实现的平台是一样的,客户机操作系统察觉不到是运行在一个虚拟平台上
  • 类虚拟化 VMM虚拟的平台是现实中不存在的,而是经过VMM重新定义的,这样的虚拟平台需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境,因此客户机操作系统周到其运行在虚拟平台上,并且会主动适应
  • 按VMM实现结构分类
  • Hypervisor模型 在Hypervisor模型中,VMM首先可以被看做是一个完备的操作系统,不过和传统操作系统不同的是,VMM是为虚拟化而设计的,因此还具备虚拟化功能。从架构上来看,首先,所有的物理资源如处理器、内存和I/O设备等都归VMM所有,因此,VMM承担着管理物理资源的责任;其次,VMM需要向上提供虚拟机用于运行客户机操作系统,因此,VMM还负载虚拟环境的创建和管理
容器技术(序)

  • 处理器管理代码(Processor, P)负责物理处理器的管理和虚拟化
  • 内存管理代码(Memory, M)负责物理内存的管理和虚拟化
  • 设备模型(Device Model, DM)负责I/O设备的虚拟化
  • 设备驱动(Device Driver, DR)则负责I/O设备的驱动,及物理设备的管理

VMM直接管理所有的物理资源,包括处理器、内存和I/O设备,因此,设备驱动是VMM的一部分;处理器管理代码、内存管理代码和设备模型也是VMM的一部分

在Hypervisor模型中,由于VMM同时具备物理资源的管理功能和虚拟化功能,因此,物理资源虚拟化的效率会更高一些;在安全方面,虚拟机的安全只依赖于VMM的安全

  • 宿主模型 在宿主模型中,物理资源由宿主机操作系统管理。宿主机操作系统是传统操作系统(Window、Linux等),这些操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,实际的虚拟化功能由VMM来提供。VMM通常是宿主机操作系统独立的内核模块,有些实现中还包括用户态进程,如负责I/O虚拟化的用户态设备模型;VMM通过调用宿主机操作系统的服务来获得资源,实现处理器、内存和I/O设备的虚拟化;VMM创建出虚拟机后,通常将虚拟机作为宿主机操作系统的一个进程参与调度
容器技术(序)

优缺点与Hypervisor模型相反;宿主模型最大的优点是可以充分利用现有操作系统的设备驱动程序,VMM无须为各类I/O设备重新实现驱动程序,可以专注于物理资源的虚拟化;缺点是,由于物理资源由宿主机操作系统控制,VMM需要调用宿主机操作系统的服务来获取资源进行虚拟化,而那些系统服务在设计开发之初并没有考虑虚拟化的支持,因此,VMM虚拟化的效率和功能会收到一定影响。VMM在安全性方面依赖于宿主机操作系统内核安全性

  • 混合模型 上述两种方式的混合体,VMM依然位于最底层,用于所有的物理资源,与Hypervisor模式不同的是,VMM会主动让出大部分I/O设备的控制权,将它们交由一个运行在特权虚拟机中的特权操作系统来控制。VMM虚拟化的职责也被分担,处理器和内存的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权操作系统共同合作来完成
容器技术(序)

混合模型VMM集中上述两种模式的优点,可以利用现有操作系统的I/O设备驱动程序,不需要另外开发;VMM直接控制处理器、内存等物理资源,虚拟化的效率也较高;在安全性方面,如果对特权操作系统的权限控制得当,虚拟机的安全性只依赖于VMM

典型虚拟化产品 VMware、Microsoft、Xen、KVM

虚拟环境性能

  • 性能评价指标和优化
  • 吞吐量 单位时间内系统的处理能力
  • 延迟 指完成一个指定任务所需要花费的时间
  • 资源利用率 指完成一个任务所需要花费的系统资源

一般情况下吞吐量越高、延迟越少、资源利用率越低则表示系统的性能越好,反之则越差。通常三项指标不会同时都朝性能好的方向发展,因此,需要统筹分析考虑,综合评价性能的好坏。为了综合评价一个虚拟环境的性能,就要有不同的工具从不同的角度考量它各方面的性能

  • 性能评测工具
  • 重用操作系统的性能评测工具 sysbench、cyclesoak、hdparm、netperf
  • 面向虚拟环境的性能评测工具 vConsolidate、VMmark
  • 性能分析工具 Xenoprof、Xentrace、Xentop
  • 性能优化方法
  • 降低客户机退出事件发生频率,提高虚拟化的效率
  • 硬件加速
  • 硬件加速
  • 影子页表
  • 直接分配I/O
  • Hypercall
  • 降低客户机退出事件处理时间
  • 降低处理器利用率

容器技术的基本概念和发展背景

容器技术主要涉及两个方面

资源容器 主要是为了提高应用程序对系统资源的控制和管理能力,基于资源容器的系统可以把系统中的资源主体从运行主体(即进程)中剥离出来,从而达到对系统资源进行更精确和高效控制的目的

基于容器的虚拟化技术通过借鉴容器的核心思想,将系统中的资源主体从运行主体(虚拟机)中剥离出来,从而达到在虚拟化技术上对系统资源进行精确和高效控制的目的。虚拟机监控器负责对系统中所有的资源容器进行管理和控制,根据用户配置以及系统资源使用的实际情况进行合理分配和回收,实现跨虚拟机的进程间资源共享,但这样的资源控制机制仍然存在安全隐患。克服资源共享带来的安全隐患的有效方法,是采用一套可靠的访问控制机制来防止非法的资源共享。强制访问控制通过在所有的系统对象上添加有管理员制定的安全策略来限制正在执行的程序的访问权限,从而阻止恶意程序破坏的传播。该方法存在许多限制,无法针对单个程序提出不同的安全策略,其次它对数据和程序的完整性,以及程序的职能范围无法进行有效的控制;在次基础上,研究者提出名为Flask的MAC架构,实现将安全策略逻辑与安全机制的分离,从而能够提供更加便捷的安全策略设置和调整,以满足不同程序对安全策略的要求。SELinux是MAC机制在Linux操作系统上的实现,它涵盖了对进程、文件和套接字在内的多种系统资源的访问控制。通过引入域、角色和类型等概念实现对安全策略的细化和精确定制。虚拟化技术因其卓越的进程和系统资源隔离能力在发展的初期就被用来实现对应用程序的访问控制;将应用程序置于相对独立的运行环境中,由虚拟机监控器依照管理员制定的策略实现程序间的访问控制

安全容器 核心思想在于将访问控制机制从操作系统中剥离出来独立于运行环境,依据不同的安全策略形成虚拟的安全容器。在资源容器的基础上,对包括姿态进程、文件系统、网络和进程间通信等在内的系统资源进行访问控制

基于容器的虚拟化技术借鉴了安全容器的思想,在使用资源容器实现资源共享的基础上通过安全容器技术实现对共享资源的有效访问控制。按照不同的安全对象,诸如域、应用程序和虚拟机风分配不同的可访问资源形成虚拟的安全容器,防止其他对象对其资源进行恶意的、未授权的访问

容器发展历程

容器技术(序)

  • OS虚拟化思想起源于1979年,UNIX系统中的chroot(为了方便切换root目录),为每个进程提供了文件系统资源的隔离,这也是容器技术XXX
  • BSD于2000年吸收并改进chroot技术,发布的FreeBSD Jails除文件系统隔离,还添加了用户和网络资源等的隔离,每个Jail还能分配一个独立IP,进行一些相对独立的软件安装和配置
  • 2001年,Linux发布的Linux Vserver依旧是延续Jails的思想,在一个操作系统上隔离文件系统、CPU时间、网络地址和内存等资源,每一个分区都被称为一个security context,内部虚拟化系统被称为VPS
  • 2004年,原SUN公司发布的Solaris Containers作为Solaris 10中的特性,包含了系统资源控制和zones提供的二进制隔离,Zones作为操作系统实例內一个完全隔离的虚拟服务器存在
  • 2005年,SWsoft公司发布OpenVZ,它和Solaris Containers非常相似,通过打补丁的Linux内核来提供虚拟化、隔离、资源管理和检查点。OpenVZ标志着内核级别的虚拟化真正成为主流,之后不断有相关的技术被加入内核
  • 2006年,Google发布Process Containers记录和隔离每个进程的资源使用(包括CPU、内存、硬盘I/O、网络等),后改名为cgroups(Control Groups),并于2007年被加入V2.6.24 Linux内核中
  • 2008年,出现第一个比较完善的LXC容器技术,基于已被加入内核的cgroups和Linux namespaces实现,不需要打补丁,LXC就能运行在任意vanila内核的Linux上
  • 2011年,CloudFoundry发布Warden,与LXC不同,Warden可以工作在任何操作系统上,作为守护进程运行,还提供了管理容器的API
  • 2013年Google公司建立开源容器技术栈lmctfy,Google开启这个项目是为了通过容器实现高性能,高资源利用率,同时接近零开销的虚拟化技术。目前Kubernetes中的监控工具cAdvisor就起源于lmctfy项目;2015年,Google将lmctfy的核心技术贡献给libcontainer
  • 2013年Docker诞生,Docker最早是dotCloud内部的项目,和Warden类似,Docker最初也用了LXC,后来开发libcontainer替换LXC;与其他容器技术不同的是,Docker围绕容器构建了一套完整的生态,包括容器镜像标准、容器Registry、REST API、CLI、容器集群管理工具Docker Swarm等
  • 2014年CoreOS为改进Docker在安全方面的缺陷,重写容器引擎创建了rkt,相关容器工具产品包括:服务发现工具etcd和网络工具flannel
  • 2016年微软公司发布基于Windows的容器技术Hyper-V Container,其原理和Linux下的容器技术类似,可以保证在某个容器里运行的进程与外界是隔离的,兼顾虚拟机的安全性和容器的轻量级

容器技术框架

容器技术(序)

通过研究、梳理和分析现有的容器技术,形成容器相关的技术架构

  • 服务器层 当运行容器镜像时,容器本身需要运行在传统操作系统(物理机或VM)之上,容器并不关心服务层如何提供和管理,它期望的是能够获得这些服务器资源
  • 资源管理层 包含服务器、操作系统等资源的管理。其中如果是物理服务器,需要涉及物理机管理系统(Rocks等);如果是虚拟机,需要使用虚拟化平台。无论是哪一种形态的服务器都需要对其中的OS加一管理(Chef、Puppet、Ansible和SaltStack等工具);传统的存储和网络管理也包含在资源管理层。资源管理层的核心目标是对服务器和操作系统资源进行管理,以支持上层的容器运行引擎
  • 运行引擎层 主要指常见容器系统,如Docker、rkt、Hyper、CRI-O;这些容器系统的共通作用包括启动容器镜像、运行容器应用和管理容器实例。运行引擎又可以分为管理程序和运行时两个模块,是单机程序(类似于虚拟化软件KVM和Xen),引擎运行于服务器操作系统之上,接受上层集群系统的管理
  • 相关开源项目
  • 资源隔离 Cgroup、Hypervisor
  • 访问限制 Namespace、Hypervisor
  • 管理程序 Docker Engine、OCID、hyperd、rkt、CRI-O
  • 运行时环境 runC(Docker)、runV(Hyper)、runZ(Solaris)
  • 集群管理层 可以把容器的集群管理系统类和针对VM的集群管理系统划等号,都是通过对一组服务器运行分布式应用;区别在于,VM的集群管理系统需要运行在物理服务器上,容器集群管理系统可以运行在物理服务器和VM上
  • 容器集群管理系统包括 Kubernetes、Docker Swarm、Mesos

集群管理层涉及到的相关开源项目包括

  • 指挥调度 Docker Swarm、Kubernetes、Mesos
  • 服务发现 Etcd、Consul、Zookeeper、DNS
  • 监控 Prometheus
  • 存储 Flocker
  • 网络 Calico、Weave、Flannel
  • 应用层 指所有运行于容器之上的应用程序,以及所需辅助的系统,包括:监控、日志、安全、编排、镜像仓库等
  • 监控模块 Prometheus、cAdvisor、Sysdis等
  • 日志 Fluentd、LogStash
  • 安全 容器镜像的安全扫描、运行环境的安全隔离、集群环境的安全管理
  • 编排 Docker Compose、CoreOS Fleet
  • CI/CD Jenkins、Buildbot、Gitlab CI、Drone.io
  • 镜像仓库 Docker Hub、VMware Harbor、Huawei Dockyard
容器技术(序)

云计算架构图

容器技术的关键技术内容

  • 镜像 容器镜像包括操作系统文件、应用本身的文件、应用所依赖的软件包和库文件
  • 运行时引擎
  • 容器编排 容器启动、容器的应用部署、容器的应用部署
  • 容器集群 将多台物理机抽象为逻辑上单一调度实体的技术,为容器化的应用提供资源调度、服务发现、弹性伸缩、负责均衡等功能,同时监控和管理整个服务器集群,提供高质量、不间断的应用服务。容器集群主要包含以下技术
  • 资源调度 以集中化方式管理和调度资源,按需为容器提供CPU、内存等资源
  • 服务发现 通过全局可访问的注册中心实现任何一个应用能够获取当前环境的细节,自动加入到当前的应用集群中
  • 弹性伸缩 在资源层面,监控集群资源使用情况,自动增减主机资源;在应用层面,可通过策略自动增减用于实例来实现业务能力的弹性伸缩
  • 负载均衡 当应用压力增加,集群自动扩展服务将负载均衡至每一个运行节点;当某个节点出现故障,应用实例重新部署运行到健康的节点
  • 服务注册和发现 容器技术在构建自动化运维场景中,服务注册和发现是两个重要的环节,一般通过一个全局性的配置服务来实现
  • 热迁移 动态迁移或实施迁移,是指将整个容器的运行时状态完整保存下来,同时可以快速地在其他主机或平台上恢复运行。主要应用在两个方面
  • 有多个操作单元执行任务,热迁移能迅速地复制与迁移容器,做到无感知运行作业
  • 可以处理数据中心中集群的负载均衡,大量数据涌来无法运行计算时,可利用热迁移创建多个容器处理运算任务,调节信息数据处理峰谷,配置管理负载均衡比例,降低应用延迟

小结

文章对虚拟化技术及容器技术的发展演进做了简单介绍,作为本系列课程的序。后期更多精彩内容分享,欢迎持续关注

参考文献

[1] 《系统虚拟化 原理与实现》

[2] 《容器技术及其应用白皮书 V1.0》

容器技术专栏主题预告

1.OCI容器技术规范

2.容器镜像规范

3.容器运行时规范

4.镜像仓库规范

5.Docker


分享到:


相關文章: