介绍
容器已迅速成为现代数据中心的必要组成部分。容器可以构建在各类操作系统中,那么企业该如何选择最合适的操作系统来运行自己的容器?
在容器部署时,研发的负责人需要知道操作系统的哪些特性和功能对于正在发布的应用程序至关重要,以及是否存在需要额外考虑的其他因素(如可管理性和配置灵活性),不同企业的情况与需求不同,选择自然也不尽相同。
不同的操作系统,如何在特性和基本功能方面进行比较?这些差异如何影响它们支持应用程序的方式?这些都是我们必须考量的重要问题。本文中我们将比较三类具有代表性的操作系统:
传统的全功能操作系统
通用的精简操作系统
专用于容器的操作系统
在每个类别中,我们都会选择两个代表性的产品,这些产品能代表这一大类中的其他全产品或发行版。
通过本文,大家将能更清楚地了解不同操作系统类型之间的差异。IT 负责人们也将更好地了解到,为什么开发人员可以为容器化应用程序选择一个操作系统而不是另一个,以及为什么他们可能支持或质疑这些选择。
全功能操作系统
“全功能操作系统”是什么意思?为什么在容器部署的情况下,完整功能会很重要?本节将介绍为什么在传统服务器部署中使用的操作系统,也可能是为容器平台选择操作系统时的最佳答案。
首先要知道的是,这类操作系统的功能无疑是最齐全的。如果某个应用程序需要某个特定的特性或功能,全功能操作系统或许都能满足它。不过这种“齐全”也是有一定代价的: 在存储、内存和 CPU 资源方面,这类操作系统对系统的要求最高。 同时,这些功能还会增加操作系统的攻击面,为潜在的攻击者提供更多的角落和缝隙进行攻击。不论是价格成本还是安全风险,如果操作系统的这些功能都是应用程序需要的,那么这些成本也就很容易承担了;但如果只需要少量功能,相较之下性价比就略低。
这些功能齐全的操作系统,最适合的用例,是企业需要在单个 OS 实例之上的容器中部署多个不同应用程序。在这些情况下,操作系统的功能的多而全,可能是支持应用程序队列的最经济的方式。
Ubuntu
Ubuntu 已经成为许多企业在服务器、云甚至桌面上的默认操作系统。Canonical 公司为 Ubuntu 提供了非常好的支持,Ubuntu 提供各种可下载格式,包括支持物联网、容器、服务器或云的部署所需的实用程序包、shell、功能和功能集。
如今,Ubuntu 已经开始瓜分曾经由 Red Hat Linux 一家独大的领域:Ubuntu 一贯良好的声誉和企业级的支持,使得对于企业部署而言,它成为了一个稳妥的、“合理的”选择。不过,大家仍需记住的、很重要的一点是,不论在什么情况下,“合理的”都不意味着一定是“最好的”——它的功能齐全也意味着它的庞大,企业需要思考这种重与大是否适合自己。
CentOS
在全功能操作系统这一大类中,Ubuntu 已经成为企业的一大主流选择,除此之外,CentOS 则是另一个流行的、由社区驱动的开源操作系统,它是由 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。
CentOS 强调社区对特性和功能的贡献及支持,同时仍然建立在其 Red Hat 基础的稳定性上。开源不意味着 CentOS 不被大型组织使用——美国国家实验室和几大主流云提供商的服务器上都用着 CentOS。但是 Ubuntu 自称拥有比 CentOS 更快速的更新,其中包括那些更老、但经过良好测试的软件包。
精简的操作系统
容器,尽可能地将少而精的功能汇集在一起,创建完整的应用程序。那么,这类精简的操作系统缺少“完整”Linux 发行版中的哪些功能——这对您的应用程序是否重要?从另一视角来看,将应用程序部署在那些将功能剥离到极限的精简操作系统上,优势是什么?
问题的答案在于,你的应用程序究竟对操作系统有什么要求,而精简的操作系统是否能满足这些基础要求。如果没有周全的准备,在使用过程中还需要人为添加应用程序所需的各种功能和小程序,那选择这类精简操作系统可以说是失败的,因为它在大小和简单性方面的优势所剩无几。
本章节将介绍两个发行版,BusyBox 和 Alpine Linux,以及它们在适当的环境中可以带来的优势。这两个操作系统是相关的——Alpine 是基于 BusyBox 的,但是二者也存在一些关键的差异,使用户会在这二者之间做出不同选择。这些差异不仅涉及具体功能及特性,还涉及支持社区和生态系统。
BusyBox
BusyBox 很适合容器部署,恰巧因为它在设计时没有刻意考虑容器。BusyBox 被其开发人员称为“嵌入式 Linux 的瑞士军刀”,它作为一个单一的小型可执行文件,包含大多数嵌入式应用程序所需的所有功能。这也“迫使”它在容器技术出现之前,就可以开始采用类似容器的方法进行部署了。
BusyBox 可以使用 Linux 或其他 POSIX 操作系统作为其基础进行部署,并将它们与许多常见的 Linux 实用程序捆绑在一起。如此一来,它成为了一个紧凑的单文件可执行文件,其中包含“完整”Linux 发行版的许多功能——尽管这些完整版本中的不少其他功能选项,都以节省空间的名义,被从 BusyBox 中删除了。
Alpine Linux
如前所述,Alpine Linux 基于 BusyBox,但不论是目标还是细节,它都建立在更早期的 Linux 发行版上。BusyBox 是因为是单一可执行文件而体积很小, 而 Alpine Linux 则是使用强化的内核,为其前身 BusyBox 的紧凑、简单的目标增加安全性。
相较于 BusyBox,Alpine Linux 能让开发人员更容易添加功能。它的发行版基于 BusyBox 和 musl 库之上,因此在添加功能的方便性或结构紧凑度的这些维度上,Alpine Linux 一枝独秀。
Alpine Linux 这是一个极限精简的操作系统,能够生成非常小的容器镜像以进行部署,而且加固的内核使其更适用于生产以及开发、部署。
容器操作系统
容器操作系统开箱即用,拥有内置的自动化和容器编排工具。它们被设计和构建为“主机”操作系统——托管 Alpine 和 BusyBox 等容器操作系统的操作系统。既然如此,为什么它们不是每个容器部署的自动选择呢?
容器操作系统的特征在于, 它不仅仅是一个支持容器的软件,而是使用容器技术部署的软件。 “容器一直向下”的体系结构意味部署的自定义程序更高、更灵活,从而比传统的 OS 部署复杂得多。另一方面,对于早期转向容器的组织,或者对于那些不一定适合容器架构的应用程序部署中,“全容器”架构并非那么容易。
对于那些寻找容器操作系统的企业而言,Rancher OS 和 Container Linux 是两个主流的选择。本章节将介绍它们各自的优势,帮助开发人员根据自身情况做进一步选择。
RancherOS
RancherOS 中的每个进程都在 Docker 管理的单独容器中运行。对 Docker 的优化和依赖让 RancherOS 可以做到体积极小、启动极快。
除了基本的性能优势之外,RancherOS 系统服务由 Docker Compose 定义和配置。这种依赖意味着只加载和部署应用程序所需的服务,从而进一步加速和简化部署。通过与 cloud-init 集成,再次简化了部署,从而实现了广泛和高速的自动配置和部署。
Container Linux
CoreOS 的 Container Linux 专为基于云的容器部署而设计。Container Linux 已被 Red Hat 收购,针对公有云或私有云基础架构的集群部署进行了优化。
Container Linux 和内核以及必要的实用程序一起,部署在单个可执行文件中,其他的实用程序和功能都部署在容器中。
Container Linux 长期以来一直被广泛使用,可以在大多数公有云上部署。被 Red Hat 收购并没有减缓它的采用速度。Container Linux 与开源许可一起分发,并拥有一个活跃的开发人员社区。
结语
三大类可用于容器部署操作系统,开发团队应该选择哪种?
如果某个特定服务器的唯一目的是托管容器,那么像 RancherOS 和 Container Linux 这样的容器操作系统非常适合。这类操作系统的自动化、部署速度和一致的容器架构,使其成为那些希望优化容器托管环境的人的最佳选择。
如果要同时考虑容器和非容器应用程序,那么毫无疑问,像 Ubuntu 和 CentOS 这样的传统 Linux 部署也可以用作容器平台。它们的体系结构、实用程序、功能列表将使它们启动速度变慢并且需要更多系统资源,但如果启动速度和最小资源消耗不是关键考虑因素,那么这类操作系统是不错的选择。
还值得关注的是位于上述二者之间的 BusyBox 和 Alpine Linux 这样的极精简操作系统。单从容器部署的角度出发,这类操作系统可以满足需求;不过如果企业存在资源受限的非容器应用程序(例如物联网的应用程序),这些应用程序也应该作为整个应用程序环境的一部分被考虑进来。
了解不同类型操作系统的功能和限制之间的差异,对于任何用于生产的 OS 平台的讨论都至关重要。使用现代操作系统,真正的考量不应该满足于哪个操作系统可以工作,而是需要围绕哪个操作系统能最有效和最高效地完成工作。
评论