DevOps和容器:本地或云端,如何选择?

在本地,还是去云端?这一辩论由来已久,尤其是在云计算兴起时,那时人们一直在反复思考是该将工作负载保留在本地数据中心还是迁移到云主机上。


但是,Docker带来的技术革命把这场辩论引入了一个新的层面。随着越来越多的机构采用容器,他们迫切地想知道,托管容器的最佳位置是本地还是云端。


如你所想,其实根本不存在适用于每个人的单一标准答案。在本文中,我们将分析云和本地容器部署的利与弊,以及您所在的组织若想要做出正确选择,应该考虑哪些因素。



首先,让我们快速回顾一下DevOps、容器和云之间的基本关系。从多方面评测,DevOps和容器的组合不失为在云中做IT的一种方法。毕竟,许多人把应用系统迁移到云上的主要原因就在于容器最大限度地提高了可伸缩性和灵活性,这也是DevOps运动的关键目标。像虚拟化和持续交付似乎完全适用于云(或云计算环境),并且很有可能的是,如果DevOps起源于敏捷世界,它将自然而然发展出适用云计算的IT实践进程。



然而,这是否意味着容器化、DevOps和持续交付在某种程度上不适用本地部署,甚至与本地部署根本不相关?不尽然,“本地部署”已经有所改变了,它现在具有云的许多特性,包括高度虚拟化,以及通过抽象实现硬件约束的相对独立性。


一般而言,本地系统符合“私有云”的定义,并且它们能够很好地适用于DevOps核心的自动化开发和操作周期。


事实上,DevOps/容器领域的许多主要厂商(包括AWS和Docker)为本地部署提供了强大的支持,而复杂强大的容器管理工具(如Rancher)旨在实现跨公共/私有云边界无缝工作。可以毫不夸张地说,容器,对于云或本地部署而言已经没有太大区别了。



为什么要在本地部署容器?


本地资源


也许最直接的原因在于需要直接访问和使用如存储或特定于处理器的操作等硬件功能。 例如,如果你使用一个图形芯片阵列进行矩阵密集型计算,你可能会被绑定到本地硬件。


容器,和虚拟机一样,总是需要一定程度的抽象,但本地运行的容器会将应用程序和底层metal之间的抽象层数减少到最小。您可以通过容器直接访问底层操作系统硬件,这对于裸机上的虚拟机或公共云中的容器而言,就难以实现了。


本地监控


同样,您也可能需要容器来监视、控制和管理本地设备。在工业环境或研究设施中,这可能是重要考虑因素。当然,您也可以使用更传统的软件类型执行监控和控制的功能,但是,容器化和持续交付的结合使您能够根据制造过程或研究程序的变化快速更新和调整软件。


本地安全控制


当涉及到在内部部署容器时,安全性也可能是其中一个主要考虑因素。由于容器从底层操作系统访问资源,它们具有潜在的安全漏洞,为了保证容器安全,必须采取向容器系统添加安全功能这类积极措施。


大多数容器部署系统都具有内置的安全功能。然而,本地部署为添加额外安全层起到了积极作用。除通过控制对物理设施的访问之外,内部容器部署还能够利用底层硬件的内置安全功能来提升安全性。


传统基础架构和云迁移


如果你不能放弃现有的内部部署基础架构怎么办?如果一家公司有相当数量的资金投资在硬件上,或者根本不愿意或者不能够一次性地从一个大型和复杂的互连的遗留应用程序迁移,那么暂且维持现有状态可能是最实用的(或最谨慎的)中短期选择。通过内部引入容器(和DevOps实践),您可以为逐渐迁移到云计算铺设一条相对容易的路径。


在本地测试,在云中部署


您还可能希望在本地开发和测试容器化的应用程序,然后在云中部署。本地开发允许您密切监控软件与部署平台之间的交互,并在受控条件下观察其操作。


通过将应用程序在云中的行为与其在已知的受控环境中的行为进行比较,可以使隔离未预料到的部署后问题变得更容易。它还允许您在一个可信任的环境中部署和测试基于容器的软件,而不必担心可能会泄漏给您的竞争对手。

DevOps和容器:本地或云端,如何选择?