NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

3 类 6 种,主流容器操作系统全比较

  • 2020-05-14
  • 本文字数:3422 字

    阅读完需:约 11 分钟

3类6种,主流容器操作系统全比较

介绍

容器已迅速成为现代数据中心的必要组成部分。容器可以构建在各类操作系统中,那么企业该如何选择最合适的操作系统来运行自己的容器?


在容器部署时,研发的负责人需要知道操作系统的哪些特性和功能对于正在发布的应用程序至关重要,以及是否存在需要额外考虑的其他因素(如可管理性和配置灵活性),不同企业的情况与需求不同,选择自然也不尽相同。


不同的操作系统,如何在特性和基本功能方面进行比较?这些差异如何影响它们支持应用程序的方式?这些都是我们必须考量的重要问题。本文中我们将比较三类具有代表性的操作系统:


  • 传统的全功能操作系统

  • 通用的精简操作系统

  • 专用于容器的操作系统


在每个类别中,我们都会选择两个代表性的产品,这些产品能代表这一大类中的其他全产品或发行版。


通过本文,大家将能更清楚地了解不同操作系统类型之间的差异。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 平台的讨论都至关重要。使用现代操作系统,真正的考量不应该满足于哪个操作系统可以工作,而是需要围绕哪个操作系统能最有效和最高效地完成工作。


2020-05-14 22:261103

评论

发布
暂无评论
发现更多内容

13. 《重学 JAVA》-- 抽象类和接口

杨鹏Geek

Java 25 周年 28天写作 12月日更

云智慧智能运维算法技术黑板报 | 内容合集

云智慧AIOps社区

机器学习 大数据 智能运维 算法实践 技术专题合集

华为云消息队列服务荣获首个双擎可信云稳定性最高级认证

华为云开发者联盟

开源 安全 消息队列 可信云 DMS Kafka版

云原生时代,领域驱动设计思想(DDD)如何落地?

华为云开发者联盟

软件架构 架构设计 建模 领域驱动设计思想 领域模型

存储空间降为原来的1/7,TDengine在中移物联网轨迹数据存储中的应用

TDengine

数据库 tdengine 时序数据库

深入浅出 Java 中枚举的实现原理

恒生LIGHT云社区

Java 编程语言 枚举

Linux一学就会之LVM管理和SSM存储管理器使用

学神来啦

Linux centos 运维 lvm linux云计算

卧槽!Spring中竟然有12种定义Bean的方法?

北游学Java

Java、 SP【ring

基于JSX的全新BDD工具 - Crius

RingCentral铃盛

观测云高分通过等保三级认证,信息安全体系建设领先行业

观测云

30个类手写Spring核心原理之MVC映射功能(4)

Tom弹架构

Java spring 源码

大数据开发之数仓工具Hive(一)

@零度

大数据 hive 数仓工具

源码超度:String、StringBuffer、StringBuilder

无心水

StringBuilder StringBuffer String字符串

Linux之rm命令

入门小站

Linux

使用 scipy.fft 进行Fourier Transform:Python 信号处理

华为云开发者联盟

Python 音频 信号处理 傅立叶变换 Fourier transform

我也想说说日志,但是我不想说漏洞。

why技术

百度搜索中“鱼龙混杂”的加盟信息,如何靠AI 解决?

百度Geek说

架构 AI 后端 百度搜索

纯 Git 实现前端 CI/CD

杨成功

架构 前端 CI/CD 签约计划第二季

【软件开发】直播带货App如何开发

青山一叶秋

斗罗大陆真3D手游实力上线,带你感受魂兽猎杀的超燃时刻

华为云开发者联盟

数据库 华为云数据库 rds for mysql 3D手游 PITR

拥抱开源,共建生态!观测云 DataFlux-Func 代码全部开源

观测云

「可观测产品首发」观测云免费版正式上线!开箱即用,观测无限

观测云

Android C++系列:Linux Socket编程(二)网络套接字函数

轻口味

28天写作 Android; 12月日更

在线JSON转flow工具

入门小站

工具

前端架构师的 git 功力,你有几成火候?

杨成功

git 架构师 GitFlow git 规范 签约计划第二季

解析WeNet云端推理部署代码

华为云开发者联盟

gRPC 语音 PyTorch ASR WeNet

前端开发之cypress的自动化实践

@零度

前端 Cypress

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

洛神灬殇

Spring Cloud api 网关 SpringCloud Gateway API Gateway 12月日更

CSS之选择器(六)::before和::after

Augus

CSS 12月日更

iOS 开发者福音:iOS 项目也能支持 MQTT 5.0 啦!

EMQ映云科技

ios mqtt emq tvos osx

30个类手写Spring核心原理之AOP代码织入(5)

Tom弹架构

Java spring 源码

3类6种,主流容器操作系统全比较_文化 & 方法_Rancher_InfoQ精选文章