容器简史:从 20 世纪 70 年代至今
2025-1-8 10:32:0 Author: mp.weixin.qq.com(查看原文) 阅读量:2 收藏

最近对象在看容器相关的知识,就整理个文章吧

容器是一种轻量级虚拟化技术,它允许将应用程序及其依赖项打包到一个可移植的容器中。容器可以在不同的环境中运行,并且具有与原始环境相同的配置和行为。

容器的历史可以追溯到上世纪70年代末期,当时Unix V7引入了chroot系统调用,将进程及其子进程的根目录更改为文件系统的新的位置。这一进步标志着进程隔离的开始:为每个进程划分文件访问权限。Chroot于1982年添加到自由软件基金会(Free Software Foundation)的BSD中。

在20世纪90年代,Linux操作系统开始流行起来,人们开始使用Linux容器来隔离和管理应用程序。这些容器被称为LXC(Linux Container),它们提供了一种轻量级的虚拟化解决方案,可以在同一台上运行多个独立的应用程序。

随着云计算的发展,容器也得到了更广泛的应用。Docker是一个流行的开源容器平台,它于2013年发布,并迅速成为容器领域的领导者之一。Docker提供了强大的容器编排和管理工具,使得容器的部署、扩展和维护变得更加容易。

除了Docker之外,还有其他一些流行的容器平台,如Kubernetes、Containerd等。这些平台都提供了各种功能,例如自动化容器部署、负载均衡、服务发现和故障恢复等。

容器的历史

这次旅行,踏上我的 DeLorean 时光机,让我们一起回到 1979 年,那时集装箱的概念刚刚出现。

1979 年:Unix V7

请注意,是的,当时我还不到 10 岁。在 1979 年开发 Unix V7 期间,引入了chroot系统调用,将进程及其子进程的根目录更改为文件系统中的新位置。这一进步是进程隔离的开始:为每个进程隔离文件访问。Chroot于 1982 年添加到 BSD中。

2000 年:FreeBSD Jails

时间快进近二十年,到了 2000 年,一家小型共享环境托管提供商推出了 FreeBSD jail,以实现其服务与客户服务的明确分离,从而提高安全性并简化管理。FreeBSD Jails 允许管理员将 FreeBSD计算机系统划分为几个独立的小型系统(称为“jails”),并能够为每个系统和配置分配一个 IP 地址。

2001 年:Linux VServer

与 FreeBSD Jails 一样, Linux VServer是一种监狱机制,可以对计算机系统上的资源(文件系统、网络地址、内存)进行分区。该操作系统虚拟化于 2001 年推出,通过修补 Linux 内核来实现。实验性补丁仍然可用,但最后一个稳定补丁于 2006 年发布。

2004 年:Solaris 容器

2004 年, Solaris Containers的第一个公开测试版发布,它结合了系统资源控制和区域提供的边界分离,能够利用快照和从 ZFS 克隆等功能。

2005 年:Open VZ(Open Virtuzzo)

这是 Linux 的操作系统级虚拟化技术,使用经过修补的 Linux 内核进行虚拟化、隔离、资源管理和检查点。该代码并未作为官方 Linux 内核的一部分发布。

2006 年:Process容器

进程容器 (由 Google 于 2006 年推出)旨在限制、统计和隔离一组进程的资源使用情况(CPU、内存、磁盘 I/O、网络)。一年后,它被重新命名为“控制组 (cgroups)”,并最终合并到 Linux 内核 2.6.24。

2008 年:LXC

LXC(LinuX Containers)是第一个、最完整的 Linux 容器管理器实现。它于 2008 年使用 cgroups 和 Linux 命名空间实现,可在单个 Linux 内核上运行,无需任何补丁。

在2008年,Linux容器(LXC)成为第一个最完整的Linux容器管理实现。它使用控制组(cgroups)和Linux命名空间来实现,并且可以在单个Linux内核上运行而无需任何修补程序。

LXC是一种轻量级虚拟化技术,可以将一台物理服务器分割成多个独立的虚拟机实例,每个实例都可以运行自己的操作系统和应用程序。与传统的虚拟化技术相比,LXC具有更高的性能、更低的资源消耗和更简单的管理方式。

LXC最初是由Oracle公司的Chris Wilson开发的,他利用了Linux内核中已经存在的功能,如控制组和命名空间,来创建一种新的容器化技术。LXC的核心思想是通过限制进程的资源访问权限来隔离不同的容器实例,从而实现安全和高效的多租户环境。

自2008年以来,LXC已经成为Linux生态系统中最受欢迎的容器管理工具之一,许多企业和组织都采用了这种技术来部署和管理他们的应用程序和服务。此外,LXC还为其他容器技术和平台的发展奠定了基础,例如Docker和Kubernetes等。

2011:Warden

CloudFoundry 于 2011 年开始开发 Warden,早期使用 LXC,后来用自己的实现取而代之。Warden 可以隔离任何操作系统上的环境,作为守护进程运行并提供用于容器管理的 API。它开发了一种客户端-服务器模型来管理跨多个主机的容器集合,Warden 包括一项用于管理 cgroup、命名空间和进程生命周期的服务。

CloudFoundry在2011年启动了Warden。Warden是一个虚拟化技术,用于隔离应用程序的运行环境。它允许在同一个物理服务器上同时运行多个虚拟机,并为每个虚拟机提供独立的操作系统、内核和服务容器。这样可以实现更好的资源利用和更高的灵活性。

Warden的设计目标是为了简化应用程序的部署和管理。通过将应用程序封装在一个容器中,它可以轻松地移植到不同的环境中,而无需担心底层基础设施的变化。此外,Warden还提供了安全性和可扩展性方面的优势,因为它可以防止应用程序之间相互干扰,并且可以轻松地添加或删除虚拟机以满足负载需求

2013:LMCTFY

在2013年,Google推出了名为“Let Me Contain That For You(LMCTFY)”的开源容器堆栈,提供Linux应用程序容器。该系统允许应用程序成为“容器感知”,可以创建和管理自己的子容器。然而,在2015年,由于Google开始向libcontainer贡献核心LMCTFY概念,因此停止了LMCTFY的活跃部署。现在,libcontainer已经成为Open Container Foundation的一部分。

2013年:Docker

2013 年Docker出现 ,容器迅速流行起来。Docker 和容器使用齐头并进,这绝非偶然。与 Warden 一样,Docker 在其初始阶段也使用了 LXC,后来用自己的库 libcontainer 取代了该容器管理器。但毫无疑问,Docker 通过提供完整的容器管理生态系统脱颖而出。

总之,Docker是一个重要的容器化工具,它推动了容器技术的发展并改变了软件开发的方式。

2016 年:容器安全的重要性凸显

随着基于容器的应用程序的广泛采用,系统变得更加复杂,风险也随之增加,为容器安全奠定了基础。像dirty COW这样的漏洞只会进一步加深这种想法。这导致软件开发生命周期中的安全性发生了变化,使其成为容器应用程序开发(也称为 DevSecOps)每个阶段的关键部分。目标是从头开始构建安全的容器,而不会缩短上市时间。

简而言之,2016年揭示了容器安全的重要性。容器化的广泛应用使系统变得越来越复杂,风险也随之增加。这促使人们更加重视容器的安全性,并将其纳入到软件开发生命周期的各个阶段中。目的是通过从底层构建安全的容器来确保应用程序的安全性和稳定性,同时不会影响上市时间

2017年:容器工具日趋成熟

2017 年,许多容器管理工具进入主流。Kubernetes 于 2016 年被云原生计算基金会 (CNCF)采用,2017 年VMWareAzureAWSDocker宣布对其提供支持。

这也是帮助管理容器基础设施重要方面的早期工具的一年。Ceph 和REX-Ray为容器存储设定了标准,而Flannel则连接了数据中心的数百万个容器。

总的来说,2017年是容器技术成熟的一个重要里程碑,许多重要的容器管理工具和技术都开始得到广泛采用和支持。这些工具和技术的发展有助于提高容器部署和管理的效率和可靠性,使得容器成为企业应用开发和部署的主要选择之一。

CNCF 采用 rkt 和 Containerd

容器生态系统的独特之处在于它由整个社区的努力和对开源项目的承诺所驱动。Docker于 2017 年将Containerd项目捐赠给 CNCF,这体现了这一理念,而 CNCF 也在同一时间采用了rkt(发音为“rocket”)容器运行时。这促进了项目之间的更大协作,为用户提供了更多选择,并形成了一个以改善容器生态系统为中心的社区。

Kubernetes 成长

2017 年,该开源项目在成为一项更加成熟的技术方面取得了长足进步。Kubernetes支持日益复杂的应用程序类别,使企业能够同时过渡到混合云和微服务。在哥本哈根的 DockerCon 上,Docker 宣布将支持 Kubernetes 容器编排器,Azure 和 AWS 也紧随其后,推出了AKS(Azure Kubernetes 服务)EKS,这是一项与专有 ECS 相媲美的 Kubernetes 服务。它也是 CNCF 采用的第一个项目,并且拥有越来越多的第三方系统集成服务提供商

2018 年:黄金标准

2018 年,容器化成为现代软件基础设施的基础,Kubernetes 被用于大多数企业容器项目。2018 年,GitHub 上的 Kubernetes 项目有超过 1500 名贡献者(如今数量是当时的两倍多)。Kubernetes 的大规模采用推动了 AWS、Google 的 GKE (Google Kubernetes Engine)和 Azure 等云供应商提供托管 Kubernetes 服务。此外,VMWare、RedHat 和 Rancher 等领先软件供应商开始提供基于 Kubernetes 的管理平台。

基础设施提供商 VMware 于 2018 年末宣布收购帮助企业部署和管理 Kubernetes 的咨询公司 Heptio,从此开始采用 Kubernetes。

Kata containersgVisorNabla等开源项目试图通过轻量级虚拟机提供安全的容器运行时,这些虚拟机的运行方式与容器相同,但提供更强的工作负载隔离。

2018 年的另一项创新是Podman,这是一种无守护进程的开源 Linux 原生工具,旨在管理容器和 pod(容器组)。

2019 年:格局瞬息万变

这一年,容器领域发生了重大变化。新的运行时引擎开始取代 Docker 运行时引擎,其中最引人注目的是开源容器运行时引擎containerd和Kubernetes 的轻量级运行时引擎CRI-O 。

2019 年,我们看到容器领域发生了翻天覆地的变化,Docker Enterprise 被收购并拆分,导致Docker Swarm 的使用寿命被定为 2 年。与此同时,我们目睹了 rkt 容器引擎的受欢迎程度下降,尽管它仍然是 CNCF 稳定版的一部分。

VMware 先是收购了 Heptio,然后又收购了Pivotal Software (包括 PAS 和 PKS) ,加倍了对 Kubernetes 的承诺。此举旨在让企业能够在其本地环境中利用云原生部署的类似云的功能。

去年,我们还看到了无服务器技术在采用方面的进步,例如基于 Kubernetes 的无服务器工作负载管理平台Knative等平台,越来越受到各组织的青睐。

2019 年推出了基于 Kubernetes 的混合云解决方案,例如Google Anthos、AWS OutpostsAzure Arc。这些云平台模糊了云和本地环境之间的传统界限,因为您现在可以管理本地和单一供应商云集群。

2020:Kubernetes 成长

2020 年,Kubernetes 逐渐成熟并增加了多项功能,为“第二天”运营提供了急需的支持。

从 Kubernetes 中删除 Dockershim

Kubernetes 宣布弃用并随后删除 Dockershim,这震惊了整个行业。Dockershim 是一个容器运行时接口 (CRI),允许 Docker 容器在 Kubernetes 上运行。这是一个重大举措,因为 Docker 是 Kubernetes 中最流行的容器运行时之一。

删除 Dockershim 并不是拒绝 Docker,而是朝着标准化迈进。Kubernetes 希望将容器运行时接口 (CRI) 标准化,作为与所有容器运行时交互的方式,而 Dockershim 是一种非标准的、特定于 Docker 的遗留代码。删除 Dockershim 意味着开发人员需要使用符合 CRI 的运行时(如Containerd或 CRI-O)在 Kubernetes 上运行容器。

入口 API

Ingress API 自 Kubernetes 1.1 版开始提供测试版功能,现已获得多项增强。它已成为用户和负载均衡器的热门选择。Ingress API 处理对服务的外部访问,公开 HTTP 和 HTTPS 路由。它执行诸如负载平衡、提供基于名称的虚拟主机和 SSL/TLS 终止等任务。

Kubectl 节点调试

kubectl 节点调试使最终用户能够通过 kubectl 调试节点,使他们无需重新启动或进入容器即可检查正在运行的 pod。可以执行文件系统检查、其他调试实用程序执行和通过主机命名空间的初始网络请求等调试任务。

Kubernetes 旨在利用此功能消除节点调试和维护中对 SSH 的需求。从 Kubernetes 1.20 版开始,此功能默认启用。

Kubernetes 拓扑管理器

高性能工作负载通常需要结合使用 CPU 和硬件加速器来实现并行计算和高吞吐量。CPU 隔离、内存和设备分配等优化对于实现最佳性能至关重要。

Kubernetes 拓扑管理器在 1.18 版中作为测试版功能引入,它是一个 kubelet 组件,可减少延迟并提高关键应用程序的性能。它通过一个名为“提示提供程序”的接口作为各种组件的单一信息源。这使组件能够根据拓扑做出资源分配决策,为关键工作负载提供低延迟和优化性能。

2021 年:企业容器

2021 年,Kubernetes 取得了许多进展,从自动扩展和安全改进到引入新功能的第三方工具。许多供应商致力于让 Kubernetes 更加用户友好,更易于组织使用。

多集群 Kubernetes 管理

多集群管理成为 2021 年的重中之重。Cluster API、Kubernetes Multi-Cluster API、Hypershift 和 kcp 等项目旨在帮助组织更好地管理多集群 Kubernetes 环境。这些举措是为了应对GitOps、云计算和边缘计算的日益普及以及随着组织扩展而不断增长的多集群需求而出现的。

Kubernetes 自动扩缩功能的发展

Kubernetes 事件驱动自动扩展 (KEDA) 项目日趋成熟,并获得了 CNCF 的批准,因为它展示了为最终用户扩展采用的能力。作为 Kubernetes 操作员安装的 KEDA 会根据外部数据源事件添加或删除集群资源。这一发展标志着 Kubernetes 部署在行业中的增长和扩展。

MITRE ATT&CK 容器框架

容器的ATT&CK 框架旨在提供对与容器环境相关的安全风险的详细了解,以及如何检测和预防针对这些环境的攻击。它包括各种策略和技术,例如初始访问、执行、持久性、特权升级、防御规避、凭证访问、发现、横向移动、收集、泄露以及命令和控制。

该框架已成为处理容器环境的安全专业人员不可或缺的工具。它为他们提供了防御攻击和在攻击发生时有效应对所需的知识和工具。

eBPF 基金会

扩展伯克利数据包过滤器 (eBPF)是一种无需更改内核源代码或加载内核模块即可在 Linux 内核中运行沙盒程序的技术。eBPF 基金会是一个开源项目,旨在开发和推动 eBPF 技术的采用。它致力于改进 eBPF 技术并为 Linux 创建创新的高性能网络、安全和跟踪工具,这些工具已在云原生社区中得到广泛使用。

2022 年:容器技术采用率创纪录

2022 年对于云原生技术来说是重要的一年,尤其是对于 Kubernetes 而言,它已成为数字化转型和云原生工作负载的首选平台。

Kubernetes 的采用率创历史新高

Kubernetes 全年经历了巨大的增长。根据 CNCF 2022 年的一份报告,96% 的受访参与者正在使用或评估 Kubernetes,79% 的人使用了 EKS、AKS 或 GKE 等托管服务。

Kubernetes 变得广泛可用

最初,Kubernetes 似乎是一种只有大型企业才能受益的工具,因为它的学习难度高,而且需要专家才能使用。然而,可用性的提高和托管服务产品的兴起使得 Kubernetes 在 2022 年可供中小型企业使用。

Azure 容器应用

Azure 容器应用是Microsoft Azure 提供的无服务器容器服务。它允许开发人员在完全托管的平台上部署和运行容器化应用程序。Azure 容器应用支持 Linux 和 Windows 容器,并提供自动扩展、集成 CI/CD 和企业级安全性等功能。

增加边缘使用率

2022 年,人们对在边缘和裸机实例中部署 Kubernetes 的兴趣也日益浓厚。向边缘迁移的驱动因素有很多,包括需要在更靠近数据源的地方运行高吞吐量计算(例如人工智能)。包括 KubeEdge、SuperEdge 和 Akri 在内的多个 CNCF 开源项目可以促进边缘 Kubernetes 部署。

增加有状态部署的使用

虽然容器被设计为短暂且无状态的,但大多数应用程序仍然需要某种形式的持久存储。社区已经开发了几种解决方法来在 Kubernetes 中实现有状态部署。这些方法包括改进对持久卷 (PV) 的支持、Kubernetes 原生备份架构、实施自动化数据备份计划、以正确的顺序恢复以及利用与数据库类型无关的流程。

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起冲,一起学。2025 年春节推出内部云安全课程,后续涨价 159 元。每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款。


文章来源: https://mp.weixin.qq.com/s?__biz=MzU0MzkzOTYzOQ==&mid=2247489584&idx=1&sn=6ec81873fb049390a83d83d281c52878&chksm=fb029568cc751c7e19eb67fc3c809de41793098e22306ed5062cdfde33eef2d57ac0f8b67e90&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh