与虚拟机相比,容器技术具有大量的优势。我们不仅要了解容器是如何实现多云应用程序可移植性的承诺,而且也要知道其不足之处。
对于那些希望跨云平台实现应用程序可移植性的企业来说,容器技术可以是一个可行的选项。通过精心规划和使用合适的工具,IT团队是可以直面挑战并在多云环境中实现容器技术优势的。
为了了解在多云环境下实现应用程序可移植性的潜在好处和风险,我们可将它与它的替代解决方案虚拟机进行比较。容器与虚拟机的不同之处在于:应用程序镜像与这些镜像中所包含的内容,以及生命周期管理等方面。
虚拟机部署要求应用程序镜像具有操作系统、中间件和应用软件的完整软件包。因此,这些镜像可以在符合应用程需求的硬件功能和资源容量(例如CPU和内存)的任何虚拟机上正常运行。只要主机服务器的虚拟机管理程序与虚拟机兼容,并且应用镜像所使用的任何都可以在云平台上使用,那么用户也就没有什么重大的执行方面问题。
另一方面,容器应用镜像并不包含操作系统或所有的中间件组件。所以,它们的正常运行主要依赖于容器主机和容器软件本身。这意味着,如果容器需要跨云供应商的不同应用程序镜像,那么它们可能会在多云环境中造成挑战。
但是,大多数容器软件都将应用打包在一个标准容器中间件集合中,然后那个容器就可以跨容器软件将要运行的任意主机上实现可移植性。只要用户能够确保每一台基础设施即服务(IaaS)主机上都部署了相同可用的操作系统和容器软件,那么这种可移植性一般来说就会正常发挥作用。但如果用户无法确保上述要求,那么容器就根本无法保持可移植性。
对于涉及容器技术的多云规划来说,可选择都基于相同容器主机操作系统和框架的公共云资源和私有云资源。如果用户所使用的操作系统或中间件功能并未在所有的操作系统发布版本中得到支持,那么就必须特别谨慎了。通过使用标准基,用户可能可以对其容器化的应用实现跨云平台的迁移而不会出现执行问题。否则,用户则需要避免多云环境部署或需要迁移至虚拟机。
多云环境容器的运行效益
尽管存在着一些规划方面的挑战,用户还是能够在多云部署中实现容器的一些优势。
例如在运行方面,Docker和其他容器系统会包括一个配置和参数架构,这个架构会将所有工作负载运行所需的组件都打包在一个单一的软件包中,从而更便于针对特定环境调试容器镜像。在虚拟机系统中,配置和参数都是根本不在管理范围内的——虚拟机的操作系统、驱动程序和应用程序都是完全与管理和底层主机隔离的。
因此,运行人员必须为每一家云供应商准备一个不同的镜像,从而带来了更多的工作量和导致错误的机会。这一点不同可以实现不同云供应商之间的容器可移植性。但是,用户将需要确保所有特定供应商组件与应用程序配置之间的无关性,以便***限度利用这个功能。换而言之,容器对特定供应商API或其他功能的依赖程度越高,迁移的难度也越大。
网络与多组件应用
网络是容器技术发挥其优越性的另一个领域。多组件应用(例如那些基于微服务器的应用)都是多云计算环境中常见的应用,而那些应用组件都必须处于联通状态。虚拟机没有特定的网络模式;应用在操作系统和中间件的支持下能够完成相当多的工作 。这就要求运行人员为应用组件建立一个网络以便能够在多云环境中实现应用程序组件在每一个IaaS平台上的可用性。不同的是,容器设定了一个通用的子网模型来实现连接,这种做法更易于管理。
管理人员可以更容易地扩展容器系统并通过容器集群提高其弹性。一个集群为应用组件定义了一系列的托管点,并且它们都是便携的。但是,在多云环境中还是需要花一点功夫提高容器组件的可扩展性和和弹性,因为一般情况下集群会共享一个子网。当他们需要跨越云平台边界时,这就可能会带来挑战,因为不同的供应商会使用不同的子网划分规则或限制(例如不同节点之间的负载平衡),而这些规则或限制会影响集群的功能。
对于扩展规模和提高跨多云部署中多组件弹性来说,虚拟机通常是更好的选择。这是因为虚拟机需要更精细的网络详细信息,从而降低迁移至另一家供应商时出现错误的风险。
诸如Docker之类的单个容器平台并不适用于多云环境中的可移植性,至少不适用于实际的IT运营环境。但是,诸如Kubernetes之类的开发运营工具可以解决这一问题,而且这些工具有可能会发展成为支持虚拟云的概念,或者是可以跨越私有云和多云的一个单一模式。