云计算 Container LXC

Container

 

Container技术和服务器虚拟化不是一样的技术,两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两者的运作思维截然不同。

简单来说,常见的传统虚拟化技术如 vSphere 或 Hyper-V 是以操作系统为中心,而 Container 技术则是一种以应用程序为中心的虚拟化技术。

传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而 Container 技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,为了和传统虚拟化技术产生的虚拟机区分,Container 技术产生的环境就称为 Container。

 

虚拟机和Container最明显的差别是虚拟机需要安装操作系统(安装 Guest OS)才能执行应用程序,而 Container 内不需要安装操作系统就能执行应用程序。Container 技术不是在 OS 外来建立虚拟环境,而是在 OS 内的核心系统层来打造虚拟执行环境,透过共享 Host OS 的作法,取代一个一个 Guest OS 的功用。Container 也因此被称为是 OS 层的虚拟化技术。

因为 Container 技术采取共享 Host OS 的作法,而不需在每一个 Container 内执行 Guest OS,因此建立 Container 不需要等待操作系统开机时间,不用 1 分钟或几秒钟就可以启用,远比需要数分钟甚至数十分钟才能开启的传统虚拟机来的快。

  1. Container技术非常适用于分布式应用框架中,这意味着底层的Container基础架构必须是模块化和非常灵活的;
  2. 以下所探讨的核心概念,很多来源于如今的虚拟化架构,比如服务发现(Service Discovery),集群管理(Cluster Management)和资源调度(Resource Scheduling);
  3. 围绕整个container技术架构的公司生态也在快速发展,多数情况下,他们都从单一的工具开始,慢慢发展为一个全栈服务。

下面是对整个技术栈自下而上的分析:

DevOps工具叫“开发工具”和“运维工具”更加直观,他们运行在本地机器上,用来启动Container,虚拟机或初始化应用包。

  • Hashicorp Vagrant,Docker Machine,VMware AppCatalyst
物理宿主机(或VM)Container实际运行的机器,可能是一个本地的笔记本电脑,一个数据服务器或一个公有云实例。

  • VMware ESX,Microsoft Hyper-V,KVM,LXD
Container OS负责和底层物理宿主机交互的操作系统(Linux或Windows),还负责提供所有container共享的OS级别的服务。

  • CoreOS,RedHat Atomic,RancherOS,Canonical Snappy,VMware Photo
Container Runtime创建、启动、停止、销毁Container的软件层。

  • Docker,Rkt,Lattice
Container管理着应用和Container OS之间的交互。也有人将其类比为虚拟机,但是container并不包含一个完整的操作系统。
Marketplace/镜像管理储存和管理container镜像的服务器(自己搭建或采用云端的SaaS应用)。

  • Docker Registry,CoreOS Registry
配置管理(Configuration Management)管理和自动化配置文件和部署的工具。

  • 比如Ansible,Chef,Puppet,Docker Compose,Terraform
Container NetworkingSDN,管理container之间包路由的网络框架。

  • 比如Docker Networking,WeaveWorks,Flannel (CoreOS)
Container集群管理帮助建立Container集群,形成服务,管理集群资源,保障可用性。

  • Docker Swarm和Hashicorp Serf。
服务发现随着更多的元素/微服务 被加入到应用中,找到这些服务并确认其是否可用变得很困难。服务发现可以在其加入网络中时,管理广播和服务许可。

  • Docker Swarm和Hashicorp Serf。
Container调度这项服务保障了container在宿主机中处于最高效的位置,容量规划,失败时重启container,需求变化时扩展应用等。

  • Kubernetes,Mesos
应用调度和container调度的功能类似,是一系列面向应用的服务,描述应用被部署时所需的资源,时间,依赖等。

  • Marathon,Chronos,Hadoop,Spark
安全在container架构中,同样需要所有的安全组件,从OS到认证服务,到数据管理。

  • CoreOS Linux,Intel Clear Containers,Docker Notary,Hashicorp Vault

Container实现——灵活性,交互性以及挑战

对于企业来说,Container技术的挑战之一在于,**选择Container技术栈意味着舍弃传统的,由ISV提供的一站式“单块架构”,**通常会令企业望而生畏。

第二个挑战在于,**初创公司常常将个人项目作为工具,**许多情况下,要么是某公司在主导这个项目,要么由一个开源社区主导。

第三个挑战在于许多工具是彼此协作和可替代的。许多早期用户会试用不同项目的组件,而不是由一个供应商或开源项目提供的技术栈。短期来讲,有助于早期采用者实现灵活性和技术的多样性。长期来看,不利于企业对稳定环境的需求,同时也会增加对新技术的学习成本。相关的公有云服务,比如Amazon Elastic Cloud Services和 Google Container Engine,可以帮助用户屏蔽技术上的复杂性。

 

 

LXC

1.LXC是什么?

LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。linux原生支持的容器,可以追溯到2009年,源于cgroup和namespaces在Linux内核方面的发展,是一种轻量级的容器虚拟化技术,最大效率隔离进程和资源。它可以把传统虚拟技术以及后来的Xen、KVM的VM进程像HOST进程一样运行管理, 所以创建和销毁都非常轻。

2.LXC可以做什么?

LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

3.LXC如何实现?

Sourceforge上有LXC这个开源项目,但是LXC项目本身只是一个为用户提供一个用户空间的工具集,用来使用和管理LXC容器。LXC真正的实现则是靠Linux内核的相关特性,LXC项目只是对此做了整合。基于容器的虚拟化技术起源于所谓的资源容器和安全容器。

LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。

4.为什么要选择LXC?

LXC是所谓的操作系统层次的虚拟化技术,与传统的HAL(硬件抽象层)层次的虚拟化技术相比有以下优势:

  1. 更小的虚拟化开销(LXC的诸多特性基本由内核特供,而内核实现这些特性只有极少的花费,具体分析有时间再说)
  2. 快速部署。利用LXC来隔离特定应用,只需要安装LXC,即可使用LXC相关命令来创建并启动容器来为应用提供虚拟执行环境。传统的虚拟化技术则需要先创建虚拟机,然后安装系统,再部署应用。

LXC跟其他操作系统层次的虚拟化技术相比,最大的优势在于LXC被整合进内核,不用单独为内核打补丁。