容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。为此,容器利用操作系统 (OS) 虚拟化形式,这里会利用操作系统的功能(在 Linux 内核中,即名称空间和 cgroups 原语)来隔离进程,并控制这些进程有权访问的 CPU、内存和磁盘的数量。容器小巧轻便、速度快且可移植,提供快捷弹性伸缩,结合 Kubernetes 或 Mesos 这类管理平台,有着强大的弹性管理能力。
面对容器,很多人逃不出虚拟机时代的思维定式,认为容器就是一个轻量级虚拟机。容器和虚拟机确实有很多相同点,它们都提供了一种虚拟化途径,充分利用服务器空闲资源,提高了资源利用率。对于最终用户,也无需感知程序运行的环境是虚拟机还是容器。它们都提供资源限制和隔离,可以限制CPU和内存等资源的使用,提供用户隔离、进程隔离、网络隔离等功能。它们也都可以将环境打包为镜像,通过镜像去启动多个副本。
看似相同的各个特点背后却是完全不同的设计思路。虚拟机模仿的是真实的物理硬件,而容器完全是针对云环境设计的。与虚拟机不同,容器不需要在每个实例中都包含访客操作系统,只需利用主机操作系统的功能和资源即可。容器提倡开箱即用,建议每个容器只运行一个应用,而虚拟机的使用方式和物理服务器没有区别,会运行很多程序。虚机通过虚拟出一套复杂的硬件环境来安装操作系统,而容器是基于内核层面的虚拟化,减少了操作系统开销,镜像规模也要小得多。
容器与虚拟机的区别可以总结为:虚拟机在云上模拟物理服务器,而容器从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性 分布式优势,即为云原生。云原生应用也就是面向“云”而设计的应用,在使用云原生技术后,开发者无需考虑底层的技术实现,可以充分发挥云平台的弹性和分布式优势,实现快速部署、按需伸缩、不停机交付等。
容器时代的程序架构要求底层基础架构和平台具有可编程性、弹性、复原能力、模块化能力。可编程性:基础结构支持通过声明性 API 和策略进行预配和管理。弹性:可以使用业务流程协调程序以自动化和策略驱动的方式动态扩展和缩减基础结构资源。复原能力:基础结构服务是松散耦合的单元,可以独立运行以提供容错能力。模块化:基础架构为服务的独立打包(如容器或无服务器功能)提供抽象。例如 Kubernetes 对上述四个属性的实现:Kubernetes 是可编程的,Kubernetes 对象模型上的所有操作 都通过集群控制平面中的 API 服务器执行。Kubernetes 通过横向扩展方法支持弹性。可以通过添加和删除 Pod 和/或节点的实例来增加和减少服务的容量。Kubernetes 通过部署提供服务的容器的多个实例来保持复原能力。如果 Pod 由于某种原因失败,Kubernetes 将尝试自动重启 Pod。Kubernetes 采用模块化设计,提供基于容器部署服务队列的抽象,并支持基于自定义资源定义 (CRD) 的 Kubernetes 软件扩展。
以 Kubernetes 为例,容器管理平台的部署也会遇到很多问题。问题之一,是建立集群以运行生产工作负载的复杂性。Kubernetes 集群的生产级操作需要许多组件 ,用户通常没有足够的技术能力;问题之二,是尽管 Kubernetes可以在多种类型的基础架构上运行,但多架构同时存在导致云原生平台的底层基础设施(即支持 Kubernetes 集群的计算、存储和网络资源)过于复杂,不方便管理;问题之三,是如果用户为了避免上述问题,使用单一的基础设施或直接购买 Kubernetes 的第三方商用版本,则容易被供应商绑定,减少自主性。
存储资源盘活系统(Storage Resource Reutilization System, SRRS)。SRRS 可以在存储层面解决上述问题。SRRS 是一款纯用户态的绿色软件,只有150MB左右的安装包,不需要ROOT权限就可以安装在任何Linux操作系统上,不独占硬盘、操作系统,以2GB内存把各服务器中分散的磁盘整合成高性能的存储资源池,通过分布式双控制器架构保证了低延迟、高可用、易拓展;支持x86、ARM、龙芯等异构、非对称服务器混合部署,通过功能全面完善的控制台、命令行与API来统一调度管理所有存储设备;通过强大的兼容性和硬件异构性充分利用全部存储资源。
SRRS 与 Kubernetes一样,可在多种类型的基础设施上运行,向上提供标准的 iSCSI 接口,完全适配 Kubernetes 的 容器存储接口 CSI 。SRRS 通过命令行、WEB页面、API管理统一的虚拟资源池,通过三个命令行 即可完成部署,不需要用户拥有太高的技术能力。SRRS 可基于异构硬件进行部署,兼容x86、ARM、龙芯等平台设备,具备绿色用户态的特性,可以让用户不关注复杂的基础设施,并且不依赖任何单一供应商。