技术见解
5分钟阅读

容器可帮助实现部署和执行一致性

容器可以帮助开发人员和运维人员以更简单的方式实现部署和执行一致性,因此非常受欢迎。此外,容器还可以帮助改进开发和运维(DevOps)团队的交接工作。


什么是容器?

在机器上运行的容器只是主机操作系统上的一个进程,与任何其他进程无异。那么,为什么容器如此受欢迎呢?原因在于这个进程被隔离和限制的方式。这种方式很特殊,可简化开发和运维。



容器隔离并抽取资源




"容器可缩短应用交付周期,同时改进运行时执行,最终降低生产基础架构成本。"

Robert Stroud
Forrester基础架构和运维首席分析师



为什么容器至关重要

容器开始流行时, CIO.com 上的文章写道:“从一个计算环境移动到另一个环境时,如何可靠地运行软件?容器是针对这一问题的解决方案。这种移动可能是从开发人员的笔记本电脑到测试环境、从调试环境到生产环境,也可能是从数据中心的物理机到私有/公有云中的虚拟机。”

部署一致性可缩短上线时间

对于企业来说,特定开发和打包每个应用及其依赖关系,然后交接给运维人员进行部署,是一个耗时且成本高昂的过程。容器将代码和进程(应用以及库、二进制文件和配置文件)结合,可提高一致性、加快新应用的推出速度,以及升级到生产环境的速度。

执行一致性可提高质量

为了适应发布和管理流程,代码和进程均经过了预打包,因此团队可以提高发布质量,进而提高客户满意度。

更轻松实现开发人员到运维人员的交接,加快交付速度

无需为每一次的交付费神,因此开发和运维(DevOps)人员能够将更多时间投入到擅长的事情中——开发业务关键型应用和确保稳健的应用交付。


“为什么选择使用容器技术?
(如Docker、rkt、CoreOS)?”

Saurabh Gupta. "Containers and VMware Tanzu" 2016.



详细了解容器技术

容器的历史可追溯到Linux操作系统。容器利用了Linux的内核功能。Linux中容器的核心概念(cgroup、namespaces和filesystems)在独立的区域运行。容器的神奇之处在于将这些技术融为一体,以实现最大的便利性。

Cgroup(即控制组)是一种机制,用于按层级划分进程并以可控、可配置的方式按照层级分配系统资源。namespaces控制进程中可见的虚拟机(VM)视图。namespaces可让进程处理全局资源,就像该进程拥有该资源的独立实例一样。

一旦Linux控制住cgroup和namespaces,通过将文件系统挂载到进程的命名空间(namespace)中,它便控制了进程可访问的文件系统(file system)。此外,进程还拥有对大部分文件系统的只读访问权限及对少部分系统文件的读写访问权限。这些文件系统是“镜像”概念的核心:镜像(如Docker镜像)就是一组具有某种配置和元数据的序列化文件系统。当镜像部署为容器时,容器进程会扩展镜像的文件系统,作为命名空间中的挂载文件系统。

虽然企业通常可以凭借其友好的开发人员体验在容器领域占据主导地位,但是开源的容器项目(包括Docker项目)可让任何企业利用该模型。开放容器计划(OCI)这一标准机构已经就镜像制定了明确的规范:




正在考虑采用容器?请牢记以下内容。

“Docker”几乎已成为容器的代名词,作为一个术语,它有多种含义:

  • 一个表示容器技术的代名词
  • 一家获得商业风投的初创公司:“Docker, Inc.”
  • 一个没有基础监管模型的开源容器项目:“Docker project”
  • Docker, Inc.的商品品牌名称
  • 一款受欢迎的开源运行时的常用名称:“Docker Engine”
  • 一种容器镜像格式:“Docker image”
  • 一种用于简化开发和打包流程的开发人员桌面工具链:“Docker for Mac与Docker for Windows”

还有其他容器来源。

有开源容器项目以及大量其他商业版产品可用来创建容器。您需要确定自己企业最适合哪一种。

容器和虚拟化是相辅相成的。

为增强安全性和隔离程度,容器可以运行在轻量级虚拟机中。通过虚拟化可以更轻松地管理支撑容器所需的硬件基础架构(如网络、服务器和存储设备)。

容器编排功能不足以成为一个平台。

平台是指一套可配合使用的功能,为开发人员和运维人员提供一种简单的方式来部署、监控、管理、扩展、保护和连接应用。但是,容器技术是企业级平台的重要组成部分:它是部署和管理应用的核心,就运行应用而言,提供这些功能的系统只是锦上添花。

使用容器仍需要一个稳健的部署平台。

与虚拟化类似,虚拟化管理程序和机器镜像并不是一个完整的虚拟化平台,容器技术同样也只是企业级平台中的一小部分。DevOps团队发现,只是获取镜像并从中创建工作负载以作为容器并不是一个完整的解决方案:例如,将工作负载容器化并不会自动为DevOps团队提供一套他们想要的功能,以实现高可用性、弹性伸缩、流量路由、日志记录等等。VMware Tanzu等经过验证的集成平台可为团队提供想要的功能。


及时了解重要主题

时事通讯订阅

如果使用容器,仍需要一个企业级安全性和管理平台。

获取镜像并从中创建工作负载以作为容器同样无法为DevOps团队提供企业级体验,因为容器本身缺少安全性、高可用性、应用生命周期管理等功能。寻求扩展、安全性和部署一致性的企业需要一个企业级平台来提供将工作负载作为容器运行所需的各种功能。

平台要么构建,要么购买。

由于容器的核心概念缺乏平台功能的概念,企业运维人员不得不自己获取这些平台功能,具体方法是编写自己的工具,或者将一系列来自其他来源和供应商的完全不相干且成熟度不同的工具、实用程序和产品汇集起来。

Cloud Foundry从一开始就在与容器配合使用。

最初提出Cloud Foundry的理由基于两个核心理念:

  • 能够更好地利用底层基础架构
  • 能够以一种高效且易用的方式为开发人员提供一致、可随时用于生产且恢复力强的环境

容器镜像格式和运行时存在标准。

Pivotal(now part of VMware)是OCI的创始成员之一。开放容器计划(OCI)的成员共同致力于制定容器镜像格式和运行时的标准。开发和运维人员因容器化应用的可移植性而受益,CIO成员则因成员的贡献而受益。




容器与构建包

Cloud Foundry既支持开发人员构建的容器,也支持平台构建的容器。您选择使用哪一种容器,要取决于您喜欢如何管理应用依赖关系和升级。如果采用平台构建的容器,Cloud Foundry使用构建包来打包应用生命周期管理。如果采用开发人员构建的容器,则需要在平台外管理更新生命周期。




不同之处

开发人员构建的容器
平台构建的容器
以容器形式部署应用。 开发人员将源代码和所有依赖关系打包放入一个容器定义中。然后将该软件包部署到目标环境中。
以代码形式部署应用。 原始或编译的源代码由构建包打包并发布到目标环境,然后由开发人员部署这些源代码。
开发人员确定中间件。 在基于容器的部署中,开发人员选择基础镜像、语言依赖关系及构成该可移植镜像的中间件组件。运行时环境接受并运行该容器。
平台处理中间件。 构建包根据已知的良好定义组装容器,而不是开发人员选择并配置语言运行时和中间件。运行时环境接受并运行该容器。
自带语言。 容器几乎可以容纳所有基于Linux的技术。开发人员在选择语言和依赖关系方面拥有更大的空间。
所用的语言取决于现有构建包。 虽然有适用于大多数现代语言的构建包,但开发人员还是受到了可用构建包的限制。您可以选择构建自定义构建包。
开发人员负责生命周期管理。 如果语言运行时或中间件出现bug或升级,则由开发人员负责升级容器并将其重新部署到目标环境。
平台处理大部分生命周期管理事宜。 VMware Tanzu等平台获取基于构建包的应用并将部署的容器升级为最新版的运行时和中间件,而无需开发人员参与其中。



VMware与容器

VMware自2011年就开始研究容器了。我们自首次推出商业版本的产品后就在生产环境中运行容器,首先是Warden, 然后是Garden, 现在是 Garden-runC.

最近,我们推出了 Tanzu Kubernetes Grid Integrated Edition, 它是一种生产级Kubernetes,让企业能够跨私有云和公有云可靠地部署和运行容器化工作负载。TKGI具备与生俱来的高可性、监控、自动健康检查等众多功能,可减轻容器编排的后续运维负担。

与OCI保持一致

Pivotal(now part of VMware)是开放容器计划(OCI)的创始成员之一。该计划成立于2015年,是一个轻量级、开放治理结构(项目),旨在制定容器格式和运行时的行业标准。OCI目前有两个规范: 运行时规范 (runtime-spec) 和镜像规范 (image-spec)。 运行时规范介绍了如何运行解压缩到磁盘上的 “filesystem bundle”。 概括来说,实施OCI会下载OCI镜像,然后将该镜像解压到某个OCI Runtime Bundle fliesystem bundle。此时,某个OCI运行时会运行该OCI Runtime Bundle。

VMware在容器方面的研究工作与OCI的目的完全一致。第一个重要里程碑是采用OCI runC 作为Cloud Foundry的核心容器运行环境。Pivotal Web Services上的所有应用和所有受支持的VMware Tanzu版本均采用 runC详细了解OCI和Pivotal(now part of VMware)

完整的容器部署平台

Cloud Foundry的Elastic Runtime是一款经过验证的容器编排解决方案,目前可在单个集群中扩展到近 250000个容器。VMware Tanzu 是一种可从开发人员处获取有效负载(jar和war文件等编译后的工件,或预构建的容器镜像)的完整平台,可提供完整的系统以调度和运行这些有效负载。

VMware Tanzu可提供所有平台辅助服务(如负载均衡、高可用性、弹性伸缩、统一日志记录等)。开发人员可以使用cf push command手动部署(和重新部署)他们的应用。越来越多的团队希望使用持续集成/持续交付(CI/CD)管道自动化这个过程。

VMware Tanzu广泛利用了容器,因为Pivotal(now part of VMware)是OCI的积极贡献者和支持者。但是,容器只是系统的一部分。VMware Tanzu可轻松编排容器,但仅有容器编排这项功能不足以使其成为一个云原生平台。VMware Tanzu还有很多子系统配合工作,以协调、监控和支持这些容器。

Cloud Foundry的安全容器化也是行业领先的平台级安全系统的一部分,可在云端保护应用。VMware Tanzu现有的容器安全性和平台安全性中加入了AppArmor(一个强制访问控制系统[MAC],是主流Linux内核的一部分,可限制给定程序在容器内对网络、磁盘等系统资源的访问)和Seccomp(一种安全计算模式,也是主流Linux内核的一部分,可限制容器中程序可以访问的系统调用集),再加上轮换(Rotate)、重新铺设(Repave)和修复(Repair)等实践,可以大大改进默认安全状态并提高运维安全性。