容器技术拥有快速扩展、灵活性和易用性等诸多优势,但是其并非适合应用在所有环境当中。
容器技术在传统的虚拟化技术当中引入了大量的最新发展趋势,比如云计算、在应用程序开发方面进行的相应调整以及像Docker这样强大的新型容器架构。在奥兰多举行的2015 Gartner IT运维战略和解决方案峰会上,Gartner副总裁兼著名分析师Thomas Bittman以容器技术为主题进行了演讲。Bittman的演讲列举了一些容器技术的优势,但是同时也指出了其存在的很多缺陷。下面我们将逐个分析这些缺陷并且讨论如何进行解决。
1、不能应用在所有场景当中
Bittman认为虽然容器技术拥有很强的兼容性,但是仍然不能完全取代现有的虚拟机环境。就像虚拟化技术刚刚出现的时候,一些传统的应用程序更加适合运行在物理环境当中一样,现在,一些应用程序并不适合运行在容器虚拟化环境当中。
比如,容器技术非常适合用于开发微服务类型的应用程序——这种方式将复杂的应用程序拆分为基本的组成单元,每个组成单元部署在独立的容器当中,之后将相关容器链接在一起,形成统一的应用程序。可以通过增加新的组成单元容器的方式对应用程序进行扩展,而不再需要对整个应用程序进行重新开发。
但是另一方面,一些应用程序只能以统一整体的形式存在——它们在最初设计时就采用了这种方式,很难实现高扩展性和快速部署等特性。对于这种情况来说,容器技术反而会对应用负载造成限制。最好的检验方式就是进行大量试验,查看哪种现有应用程序能够通过容器技术发挥最大优势。一般来说,新的应用程序研发过程很可能从容器技术当中获益。而那些不能被容器化的应用程序仍然可以运行在传统hypervisor的全功能虚拟机当中。一位来自知名保险提供商的IT架构师表示应该放缓应用程序容器化趋势。“虽然容器技术非常具有吸引力,但是软件开发团队需要一段时间及时跟进,才能够真正地高效利用容器技术所带来的优势。”
2、难以解决依赖关系问题
大多数虚拟机都是相对独立的,每台虚拟机都包含自己的操作系统、驱动和应用程序组件。只要拥有合适的hypervisor,还可以将虚拟机迁移到其他任何虚拟化平台当中。但是对比来说,容器运行在物理操作系统之上,相互之间共享大量底层的操作系统内核、库文件以及二进制文件。Bittman进一步解释说容器之间的现有依赖关系可能会限其在服务器之间的可移植性。比如,位于Linux操作系统上的Docker容器就不能运行在当前版本的Windows Server操作系统上。
对于这种问题来说,当前的解决方案并不止一种——容器可以在数秒钟之内完成复制过程,操作系统也在不断发展,开始提供“micro OS”和“nano OS”等多种类型,提供了高稳定性以及快速重启等特性。从容器自身的角度来说其更加适合于这些环境,只要数据中心当中的其他服务器可用,仍然能够对其进行迁移。
随着操作系统的逐渐发展,这些依赖关系问题也在不断得到解决。比如,Windows Server 2016承诺同时支持Docker和原生Hyper-V容器。除了Docker之外,还有许多其他容器平台可供选择,比如LXC、Parallels Virtuozzo、Joyent、Canonical LXD、Spoon等等,VMware也有可能随时加入到竞争行列中来。
3、较差的隔离性
基于hypervisor的虚拟机拥有完善的隔离特性,由于系统硬件资源完全是虚拟的,由hypervisor分配给虚拟机使用,因此bug、病毒或者入侵有可能影响一台虚拟机,但是不会蔓延到其他虚拟机上。
容器的隔离性较差因为其共享同一个操作系统内核以及其他组件,在开始运行之前就已经获得了统一的底层授权(对于Linux环境来说通常是root权限)。因此,漏洞和攻击更加有可能进入到底层的操作系统,或者转移到其他容器当中——潜在的传播行为远比最初的事件更加严重。
尽管容器平台也在不断发展,开始隔离操作系统权限、减少脆弱的安全特性等,但是Bittman仍然推荐管理员通过在虚拟机当中运行容器来提升安全性。比如,可以在Hyper-V当中部署一台Linux虚拟机,在Linux虚拟机当中安装Docker容器。这样即便虚拟机当中的容器出现问题,这种漏洞也只存在于当前虚拟机当中——限制了潜在的受攻击范围。
4、潜在的蔓延问题
就像虚拟机生命周期管理对于hypervisor环境来说十分重要一样,生命周期管理对于容器来说也是至关重要的。容器可以被大量快速复制,这是容器技术的重要优势之一,但是也有可能在管理员没有注意到的情况下消耗大量计算资源。如果应用程序所在的容器不再使用时能够被及时删除,那么情况还不算太坏。但是如果对一个容器化应用程序进行扩展之后忘记将其缩减回之前的规模,那么将会为企业带来大量的(并且不必要的)云计算开销。Bittman还表示云提供商十分高兴看到这种情况发生——因为他们就是通过出租计算资源而获利的——因此用户需要自己关注容器的部署情况。
5、缺乏工具
对于这个行业来说,用于监控和管理容器的工具种类仍然十分缺乏。这并不是一种最近产生的现象,在基于hypervisor虚拟化的早期也曾经出现过可用工具十分匮乏的情况。就像优秀的虚拟机监控和管理工具逐渐增多一样,容器管理领域也在不断出现新的工具。其中包括谷歌的开源Docker管理工具Kubernetes,此外DockerUI使用基于web的前端界面替换Linux的命令行功能,Logspout能够将容器日志汇集到一个集中位置。
Bittman建议管理员可以通过将容器运行在虚拟机当中缓解容器管理工具缺乏的问题,这样就可以使用虚拟机工具来完成一些监控和管理功能了。因为虚拟机工具更加成熟和多样化,因此在容器工具逐渐成熟之前,可以将其作为临时的替代产品。
Bittman对于容器技术充满热情,认为其能够快速交付轻量级的应用程序,提升资源使用效率和扩展性;容器自身(非虚拟化I/O)还能够实现更好的性能表现;已经拥有像Docker这样优秀的开发架构,像GitHub这样吸引广泛关注的共享和协作平台。但是容器并不是一种能够满足所有虚拟化任务的解决方案,只是虚拟化工具箱提供的另外一种工具——通常可以和传统虚拟机很好地协同工作。