容器技术发展和编排技术演进之路

news2024/12/24 10:45:17

目录

Jail 时代

1979 年 贝尔实验室发明 chroot

2000 年 FreeBSD 4.0 发行 FreeBSD Jail

2001 年 Linux VServer 发行

2004 年 Solaris Containers 发行

云时代

2006 年 google 推出 Process Containers

2008 年 LXC 推出

2011 年 CloudFoundry 推出 Warden

2013 年 LMCTFY 启动

2013 年 Docker 推出到风靡全球

云原生时代

Google &Docker 竞争

2013 年 CoreOS 发布和 Docker 由合作终止

2014 年 6 月 Google 发布开源的容器编排引擎 Kubernetes(K8S)

2014 年 12 月 CoreOS 发布开源容器引擎 Rocket(rkt)

2015年 Docker 推出容器集群编排组件 Swarm

2015 年 6 月 Docker 成立 OCI

2015 年 7 月 Google 带头成立 CNCF

k8s 成为云原生事实标准

2016 年 发布 CRI 标准

2016 年 Docker 捐献 containerd

2016 年 CRI-O 发布

2017 年 containerd 确定作为标准 CRI

编排与容器的技术演进之路

DockerClient

RUNC&Shim

​编辑CRI-Containerd

CRI-O

Containerd

实际生产的集群采用的什么运行时组件?


Jail 时代

容器不是一个新概念或者新技术,很早就有了,只是近几年遇到了云计算,整个技术被彻底引爆了。

1979 贝尔实验室发明 chroot

chroot 系统调用是在 1979 年开发第 7 Unix 期间引入的。贝尔实验室在 Unix V7 开发过程中,发现当一个系统软件编译和安装完成后,整个测试环境的变量就会发生 改变,下一次测试需要重新配置环境信息。

设计者们思考能否隔离出来一个独立的环境,来构建和搭建测试环境,所以发明了 chroot可以把一个进程的文件系统起来。

chroot 系统调用可以将进程及其子进程的根目录更改为文件系统中的新位置。隔离以 后,该进程无法访问到外面的文件,因此这个被隔离出来的新环境像监狱一样,被命 名为 Chroot Jail (监狱)。后续测试只需要把测试信息放到 Jail 就可以完成测试了。

这一进步是进程隔离的开始:为每个进程隔离文件访问。所以 chroot 可以认为是容器技术的鼻祖。

2000 FreeBSD 4.0 发行 FreeBSD Jail

2000 时一家小型共享环境托管提供商提出了 FreeBSD Jail,以实现其服务与其 客户服务之间的明确分离,以实现安全性和易于管理。每个 Jail 是一个在主机上运 行的虚拟环境,有自己的文件、进程、用户和超级用户帐户,为每个系统分配一个 IP

FreeBSD Jail 仅仅有 chroot 的文件系统隔离,并且扩充了独立的进程和网络空间

2001 Linux VServer 发行

FreeBSD Jails 一样,Linux VServer 是一种监狱机制,可以对计算机系统上的资源 (文件系统、网络地址、内存)进行分区。

2004 Solaris Containers 发行

2004 Solaris Containers 的第一个公开测试版发布,结合系统资源控制和区域进 行隔离,并添加了快照和克隆能力。

这个时期的进程隔离技术大多以 Jail 模式为核心,基本实现了进程相关资源的隔离操 作,没有更大的应用场景发展有限。

2006 年,Google 101 划提出云的概念,对当前的主流开发模式产生深远的影响。 也许以后我们会更多考虑如果出现比现在多 1000 , 10000 倍的数据量的时候,我们 该如何处理?要想让发挥潜能,与此相关的编程和操作就应该与使用互联网一样简 单。随后,亚马逊、IBM 等行业巨头也陆续宣布各自的划,宣告技术时代的 来临。

云计算需要处理海量数据、超高并发、快速扩展等问题,此时不仅仅需要隔离还需要 能够对资源进行控制和调配。

2006 google Process Containers

Process ContainersGoogle 2006 年推出)旨在限制、统计和隔离一组进程的 资源使用CPU、内存、磁盘 I/O、网络)。一年后它更名为“Control Groups (cgroups)”并最终合并到 Linux 内核 2.6.24

2008 LXC

LXCLinux 容器)是 Linux 容器管理器的第一个、最完整的实现。它是在 2008 使用 cgroups Linux 命名空间实现的,它可以在单个 Linux 核上运行,不需要任何补丁。

同年谷歌推出 GAEGoogle App Engine),首次开发平台当做一种服务来提供,采 用云计算技术,跨越多个服务器和数据中心来虚拟化应用程序。

同时 Google GAE 使用了 Borg Kubernetes 前身)来对容器进行编排和调度。 LXC Borg 其实就相当于最早的 docker k8s.

2011 CloudFoundry 推出 Warden

2011 动了 Warden,早期使用 LXC后来换为自己的实现,直接对 Cgroups 以及 Linux Namespace 作。开发了一个客户端-服务器模型来管理跨多个主机的容器 集合,并且可以管理 cgroups、命名空间和进程生命周期。

2013 LMCTFY 启动

Let Me Contain That For You (LMCTFY) 2013 年作为 Google 容器堆栈的开源版本 启动,提供 Linux 序容器。应用程序可以器感知和管理它们自己的 容器。在谷歌开始和 docker 合作,后续转向了 docker 公司的 libcontainerLMCTFY 的于 2015 止。

2013 Docker 推出到风靡全球

Docker 初是一个叫做 dotCloud PaaS 服务公司的内部项目,后来该公司改名为 DockerDocker 初期与 Warden 类似,使用的也是 LXC之后才开始采用自己开发 的 libcontainer 替代 LXC它是将应用程序及其依赖打包到几乎可以在任何服务器 上运行的容器的工具。与其他只做容器的项目不同的是Docker 入了一整套管理容 器的生态系统,这包括高效、分层的容器镜像模型、全局和本地的容器注册库、清晰 的 REST API

Docker 提供了一整套的解决方案,不仅解决了容器化问题,而且解决了分发问题, 很快被各大厂商选择变成了云基础设施,厂商围绕 Docker 了生态建设。

Google &Docker

2013 CoreOS 发布和 Docker 合作终止

技术革命带来新的市场机遇,CoreOS 是其中的一员,在容器生态圈中贴有标签: 专为容器设计的操作系统 CoreOS作为互补,CoreOS+Docker 是容器部署的 灵魂伴侣。CoreOS Docker 的推广和源码社区都做出了巨大的贡献。

Docker 态扩张开始是个简单的基础单元不同,Docker 过开发或收购逐步完善容器云平台的各种组件,准备打造自己的生态圈,而这与 CoreOS 的布局 有直接竞争关系。

2014 6 Google 发布开源的容器编排引擎 KubernetesK8S

容器只是解决了容器化 ,分发问题,但是一个软件的网络问题、 负载均衡问题 、监控、部署、更新、镜像管理、发布等很多问题并没有有效的解决。

Google 内部调度系统 Borg 已经拥有 10 多年的使用容器经验,在 2014 6 推出了开源的 K8S,以支持对容器的编排和管理,完成生态的闭环。

同年 7 月,微软、Red HatIBMDockerCoreOSMesosphere Saltstack 公司,相继加入 K8S。之后的一年内,VMwareHPIntel 公司,也陆续加入。

2014 12 CoreOS 发布开源容器引擎 Rocket(rkt)

2014年底,CoreOS 式发布了 CoreOS 开源容器引擎 Rocket简称 rkt),和 Docker 式分开发展Google 2015 4 领投 CoreOS 1200 元,而 CoreOS 也发布了 Tectonic成为首个支持企业版本 kubernetes 的公司。从此,容器 江湖分为两大阵营,Google 派系和 Docker

2015年 Docker 器集群编排组件 Swarm

Docker 1.12 更高版本中,Swarm 式与 Docker 引擎集成,Docker 供 原生集群管理

两大派系的竞争愈演愈烈,行业标准的诉求越来越强烈。

2015 6 Docker OCI

Docker 司在容器运行因为高速迭代导致变更频繁,影响较大。

2015 6 22 Docker 司牵头,CoreOSGoogleRedHat 等公司共同宣 布,Docker 公司将 Libcontainer 出,并改名为 RunC 项目,交由一个完全中立的基 金会管理,然后以 RunC 依据,大家共同制定一套容器和镜像的标准和规范。 RUNC 的本质就是可以不通过 Docker Damon 直接运行容器。

规范就是 OCI,旨在定并维护容器镜像格式和容器运行时的正式规范(OCI Specifications其核心产出是 OCI Runtime Spec容器运行时规范)、OCI Image Spec(镜像格式规范)、OCI Distribution Spec 镜像分发规范)。所以 OCI 织解决 的是容器的构建、分发和运行问题。

社区们期望通过标准来约束 Docker 公司的话语权,不过 Docker 司并没有积极推动 OCI ,而且 OCI 也无法影响 Docker ,因为 Docker 已经是事实的容器标 准。

Google RedHat 等公司将方向调转到容器上面的平台层

2015 7 Google 带头成立 CNCF

Google 联合 Linux 基金会成立 CNCF Cloud Native Computing Foundation)云原 生计算基金会。旨在构建云原生基础设施。K8S 第一个纳入进来的项目,像后续有名的监控设施 Prometheus配置设施 ETCD 入进来。CNCF 织解决的是应用 管理及容器编排问题。和 OCI 同制定了一系列行业事实标准。

k8s 云原生事实标准

2016 发布 CRI 标准

Google 就和红帽主导了 CRI 标准,用于 k8s 和特定的容器运行时解耦。 CRI(Container Runtime Interface 运行时接口)本质上就是 k8s 定义的一组与容器 运行时进行交互的接口,所以只要实现了这套接口的容器运行时都可以对接 k8s

但是这个适合 Docker 是事实标准,并 CRI 没有话语权,但是又必须支持 Docker 所以就有了 dockershim,dockershim 本质其实就是 k8s docker 一个 CRI 实现。

2016 Docker containerd

containerd 作为运行时标准,Docker Docker Engine 种剥离出来,捐献给 CNCF.个时候 Google 为了将 containerd 加入到 cri ,又开发了 cri-containerd用来完 成 k8s 容器之间的交互

2016 CRI-O

CRI-O 以让开发者直接从 Kubernetes 来运行容器,这意味着 Kubernetes 可以不依赖于传统的容器引擎(比如 Docker),也能容器化工作负载。容器此时也回归 到自己的位置,如何更好的封装云原生的程序。

2016 Docker 布了一个震惊全部人的计划:放弃现有的 Swarm 项目,将容器编排和集群管理功能所有内置到 Docker

Kubernetes 的应对策略则是反其道而行之,开始在整个社区推动 架构,从 API 到容器运行时的每一层,Kubernetes 项目都为开发者暴露出了能够扩展的插件机 制,鼓励用户经过代码的方式介入到 Kubernetes 项目的每个阶段。

在进入 2017 年之后,更多的厂商愿意把宝压在 K8S ,投入到 K8S 态的建设 中来。这两年包括阿里云、腾讯、百度等中国科技企业也陆续加入 CNCF全面拥抱 容器技术与云原生。

Swarm 失败后, 社区版 Docker 项目改名为 moby Docker 流到 Docker 的企业 版上去,螳臂挡车。

2017 containerd 为标准 CRI

2017 各大厂商都开始拥抱 Kubernetes,亚马逊 AWSMicrosoft AzureVMware, 有的甚至抛弃了自家的产品。

亚马逊网络服务(AWS)于八月份以白金会员(最高级别)加入了 CNCFVMware 都作为 CNCF 白金会员注册.

Docker Inc.ocker 业版框架中添加了本地 Kubernetes 支持。Docker Swarm 技术也借鉴了 k8s 技术进一步发展。

Kubernetes 已成了容器编排领域的绝对标准, Docker 成容器事实的标准。

编排与容器的技术演进之路

核心问题:容器哪些技术过时了

DockerClient

此时 K8s 编排领域的一个选择,而 Docker 时一家独大,所以 K8s 客户端只是作为 Docker 的客户端来调用 Docker 引擎来完成服务。

 

RUNC&Shim

OCI runc,剥离 Docker Engine 的一家独大的情况,确保各个厂商都可以搭建自己的容器平台。CRI 确立了但是 Docker 接入该标准。此时催生了临时技术 shim.

CRI-Containerd

containerd 被捐献出来,谷歌开发 cri-containerd CRI

CRI-O

k8s 已经成为事实的编排标准,促使容器回归云原生本质。

 

Containerd

containerd 实现 CRI,成为 CRI 事实标准.

的什

以腾讯的 TKE腾讯商用 K8S ) ,支持选择 containerd docker 两种模式的选择。

如何选择呢?

(1). Containerd 调用链更短,组件更少,更稳定,占用节点资源更少。建议选择 Containerd

(2). 以下情况还是要用 docker​​​​​​

  • 使用 docker build/push/save/load 等命令。
    调用 docker API
    需要 docker compose 或 docker swarm。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript 【DOM】

【DOM】 原创内容,转载请注明出处! 一、DOM基本概念 DOM(Document Object Model,文档对象模型)是 JavaScript 操作 HTML 文档的接口,使文档操作变得非常优雅、简便。 DOM 最大的特点就是将 HTML 文档表示…

Pycharm找不到Conda可执行文件路径(Pycharm无法导入Anaconda已有环境)

在使用Pycharm时发现无法导入Anaconda创建好的环境,会出现找不到Conda可执行文件路径的问题。 解决 在输入框内输入D:\anaconda3\Scripts\conda.exe,点击加载环境。 注意前面目录是自己Anaconda的安装位置,之后就可以找到Anaconda的现有环…

STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

只用STM32单片机SD卡耳机插座,实现播放MP3播放器! 看过很多STM32软解MP3的方案,即不通过类似VS1053之类的解码器芯片,直接用STM32和软件库解码MP3文件,通常使用了labmad或者Helix解码库实现,Helix相对labm…

Mariadb高可用MHA

本节主要学习了Mariadb高可用MHA的概述,案例如何构建MHA 提示:以下是本篇文章正文内容,下面案例可供参考 一、概述 1、概念 MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。…

如何使用Kali Linux进行渗透测试?

1. 渗透测试简介 渗透测试是通过模拟恶意攻击,评估系统、应用或网络的安全性的过程。Kali Linux为渗透测试人员提供了丰富的工具和资源,用于发现漏洞、弱点和安全风险。 2. 使用Kali Linux进行渗透测试的步骤 以下是使用Kali Linux进行渗透测试的基本…

搭建WebDAV服务手机ES文件浏览器远程访问

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件…

【Unity每日一记】进行发射,位置相关的方法总结

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

绘制世界地图or中国地图

写在前面 在8月初,自己需要使用中国地图的图形,自己就此也查询相关的教程,自己也做一下小小总结,希望对自己和同学们有所帮助。 最终图形 这个系列从2022年开始,一直更新使用R语言分析数据及绘制精美图形。小杜的生信笔记主要分享小杜学习日常!如果,你对此感兴趣可以加…

【C++面向对象】--- 继承 的奥秘(下篇)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

自动化测试用例设计实例

在编写用例之间,笔者再次强调几点编写自动化测试用例的原则: 1、一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器。 2、一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统…

CAS 的执行流程 ?CAS 中 ABA 问题如何解决 ?CAS 在 Java 中有哪些实现类 ?

目录 1. CAS 的执行流程 2. CAS 中的 ABA 问题 3. 如何解决 CAS 中的 ABA 问题 4.CAS 在Java 中的实现类有哪些 1. CAS 的执行流程 CAS 比较并替换的大致流程是这样的: 它有三个操作单位:V(内存值),A(…

【C++】做一个飞机空战小游戏(八)——生成敌方炮弹(rand()和srand()函数应用)

[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

Iceberg 学习笔记

本博客对应于 B 站尚硅谷教学视频 尚硅谷数据湖Iceberg实战教程(尚硅谷&Apache Iceberg官方联合推出),为视频对应笔记的相关整理。 1. Iceberg简介 1.1 概述 为了解决数据存储和计算引擎之间的适配的问题,Netflix 开发了 I…

【算法题】螺旋矩阵IV (求解n阶折线蛇形矩阵)

一、问题的提出 n阶折线蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为nn,其中n为正整数。 题目背景 一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成,观察图片,找出填数规律。填数规则为从 1 开始填到 nn。 …

如何使用AIGC人工智能辅助开发?

文章目录 引言AIGC辅助开发的应用场景代码生成图像识别与生成自然语言处理视频剪辑与生成 AIGC辅助开发的实现步骤数据准备模型选择模型训练结果评估与优化应用开发 AIGC辅助开发的优势与局限优势局限 未来展望总结 🎉欢迎来到AIGC人工智能专栏~如何使用AIGC人工智能…

计算机网络----CRC冗余码的运算

目录 1. 冗余码的介绍及原理2. CRC检验编码的例子3. 小练习 1. 冗余码的介绍及原理 冗余码是用于在数据链路层的通信链路和传输数据过程中可能会出错的一种检错编码方法(检错码)。原理:发送发把数据划分为组,设每组K个比特&#…

【Python】解决“Tk_GetPixmap: Error from CreateDIBSection”闪退问题

解决Python使用Tkinter的Notebook切换标签时出现的“Tk_GetPixmap: Error from CreateDIBSection 操作成功完成”闪退问题 零、问题描述 在使用Tkinter的Notebook控件时,对其标签进行切换,发现切换不了,一切换就报如下图错误: …

Python学习笔记_基础篇(五)_数据类型之字典

一.基本数据类型 整数:int 字符串:str(注:\t等于一个tab键) 布尔值: bool 列表:list 列表用[] 元祖:tuple 元祖用() 字典:dict 注:所有的数据类型都存在想对…

3. 爬取自己CSDN博客列表(分页查询)(网站反爬虫策略,需要在代码中添加合适的请求头User-Agent,否则response返回空)

文章目录 步骤打开谷歌浏览器输入网址按F12进入调试界面点击网络,清除历史消息按F5刷新页面找到接口(community/home-api/v1/get-business-list)接口解读 撰写代码获取博客列表先明确返回信息格式json字段解读 Apipost测试接口编写python代码…

每天一道leetcode:646. 最长数对链(动态规划中等)

今日份题目&#xff1a; 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在&#xff0c;我们定义一种 跟随 关系&#xff0c;当且仅当 b < c 时&#xff0c;数对 p2 [c, d] 才可以跟在 p1 [a, b] 后面…