0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

KubeOS:面向云原生场景的容器操作系统

openEuler 来源:DIVE全球基础软件创新大会 作者:李元戎 2022-11-01 17:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在云原生场景下,容器和 Kubernetes 在开发、测试、生产中的应用越来越广泛,传统的操作系统往往会带来安全性、运维开销、OS 版本等方面的问题,容器操作系统即容器 OS 是针对云原生场景设计的一种轻量化操作系统。本次分享首先介绍容器 OS 的理念,然后分享在 openEuler 社区孵化的容器操作系统 KubeOS 的设计思路和解决的问题,最后深入介绍 KubeOS 的架构、功能和使用。

本文整理自华为操作系统开发工程师、KubeOS 开源项目负责人李元戎在DIVE全球基础软件创新大会2022的演讲分享,主题为“KubeOS : 面向云原生场景的容器操作系统”。

分享主要分为三部分:

1. 云原⽣场景下 OS 管理问题与解决⽅法;

2.KubeOS:⾯向云原⽣场景的容器操作系统;

3. 未来的工作。

云原⽣场景下 OS 管理问题与解决⽅法

现在说起容器,大家想到的基本上都是 Docker。

Docker 在 2013 年开源以后就立即火爆了起来,可以说 Docker 将容器技术推向了巅峰。那么 Docker 技术到底解决了一个什么样的问题呢?Docker 自己宣传的口号是:一次构建到处运行。

它一举解决了开发、测试、生产中环境不一致这困扰业界多年的问题。从更高的维度来说,Docker 其实解决的是软件到底应该通过什么样的方式进行交付。当软件的交付方式变得清晰明确以后,那么我们做托管软件的平台也就变得非常简单明了了。

Docker 提供了三个概念:容器、镜像和镜像仓库,通过 Docker Client 可以以 Restful API 的方式去管理容器的全生命周期。那么 Docker 最核心的创新是什么呢?其实就是 Docker 镜像这个概念,通过 Docker 容器镜像,可以将一个应用软件运行依赖的全部环境都打包在一起,让这个程序通过 Docker 容器运行的时候可以与操作系统是无关的。这样也就基本上实现了它所宣传的 run anywhere。

84f8dffe-572b-11ed-a3b6-dac502259ad0.png

Docker 镜像为了可以共享资源,在制作过程中引入了层的概念。也就是说如果想做一个新的容器镜像,不需要从头开始做,只需要找到一个有 Root FS 的 Base Image ,以后需要什么就可以一层一层的往上叠加。Docker 容器其实也是基于分层概念,容器运行的时候它就会在镜像上面增加一个可写层,也就是我们常说的容器层,然后容器层下面是镜像层,镜像层都是只读的。容器镜像的一个核心的特性就是 copy on right,可以把对于容器的修改全限制在容器层下,不会影响其他共享这个镜像的容器。Docker 在单机上的打包、发送、运行的性能是很优秀的,但只在单机上运行并不能发挥它最大的价值。业界更希望基于 Docker 技术可以形成云化的集群系统,然后进行业务容器的调度和编排。那我们就要说接下来的 Kubernetes 了。

Kubernetes 现在可以说已经真正成为了全球的主流技术。2017 年的时候,Kubernetes、Swarm 和 Mesos 三家容器编排系统的大战就基本上结束了,Kubernetes 成为了最后的赢家,成为了容器编排系统的事实标准。Kubernetes 的思想是将一切都视为资源,比如说 node、POD、deployment、service,这些日常的、内置的资源对于一般的系统部署升级和管理是够用的。但是在一些特定的场景下,当内置的资源不满足需求的时候,Kubernetes 又提供了一种扩展的机制,你可以把需要的新资源抽象成 Kubernetes 的 API 对象,然后注册到集群中,和其他资源一起来使用,即 CRD 机制。说起 CRD 就不得不提 operator。其实从 Kubernetes 的设计和定义来看,它其实似乎更适用于无状态的应用。

但是 CoreOS 公司它基于 Kubernetes 的声明式 API 机制提出的 Kubernetes operator 可以有效解决有状态的应用或者是分布式应用的状态描述,在 operator 当中的 API 对象不再是描述单状态应用的状态,而是去描述分布式应用集群的状态。也就是说它把一个完整的分布式应用的集群都算作 Kubernetes 它需要最终去维护的这种最终的状态。当你定义的分布式应用集群的状态发生改变以后,operator 会根据实现代码去执行相应的逻辑功能,然后达到向我们预期的状态不停演进的功能。

可以说容器和 Kubernetes 促进了云原生生态的发展,在基础设施纷纷云化的情况下,云原生场景下 OS 管理的问题也就随之而来了。

8513e998-572b-11ed-a3b6-dac502259ad0.png

首先是 Kubernetes 并不能对集群节点的 OS 进行管理,所以云原生场景下 OS 管理的第一个问题,Kubernetes 和 OS 是分别独立进行管理的。Kubernetes 也需要进行更新维护,然后进行用户权限控制,这和 OS 的管理其实非常类似。所以当运维人员分别对 Kubernetes 和 OS 进行管理的时候,他往往需要进行很多冗余操作。按理来说是希望它们互相能够感知的,但是实际上这两套系统互相协调非常困难,甚至它们之间根本就没有协调。所以当 OS 升级影响到了节点可用性的时候,Kubernetes 无法进行感知。如果 OS 进行升级,又希望集群中业务不中断,运维人员首先需要锁定节点,让工作负载不再分配到这个节点,然后需要把这个节点上的 POD 调入到其他节点,然后才能去升级这个节点,最后再把这个节点解锁,恢复正常的应用,这无疑增加了运维的难度和开销。

8537db8c-572b-11ed-a3b6-dac502259ad0.png

第二个问题就是 OS 的版本管理问题。一个通用的 Linux 操作系统,一般都会内置一个软件更新升级的包管理器,通过这个包管理器,每一个包独立进行安装、升级、删除,这对于操作系统来说非常灵活。

但是在云原生场景下,往往会带来版本分裂的问题。就像图中所示,一开始这个集群中两个节点的包版本都是一致的。但是随着使用,有的包升级了,有的包没升级,或者升级的版本不一致。时间久了集群中每一台节点都会有不同的软件包,不同的版本,这样造成的版本分裂问题是很严重的。

如果 OS 和业务耦合比较紧密的话,OS 进行大版本的升级也会比较困难。业界比较主流的思想是通过改造 OS 来解决以上问题。因为容器把应用运行所需要依赖的环境都打包到了容器镜像里面。它对一个操作系统所需要的功能越来越少,所以就有了轻量级的操作系统。为了容器运行而设计的这种轻量级操作系统,我们叫它为容器 OS,也就是 Container OS,也可以叫做 Container specific OS。

那么对一个容器 OS 来说,都需要它有什么呢?首先肯定是有一个 Linux kernel,然后要有容器引擎,比如 Docker,然后还需要一些安全的机制,这些就够了。所以容器 OS 第一个特点就是极简化,它包含的软件包比较少,相应的攻击面和漏洞肯定就少,容器 OS 就更安全。第二个特点是不可变,只有在部署的时候可以修改,一旦部署就是固定的。第三个是原子更新,因为它不可变,所以只能整体进行更新。最后是应用以容器的形式运行。

KubeOS:⾯向云原⽣场景的 容器操作系统

近几年容器 OS 又有了新的发展,Kubernetes OS 除了刚才讲的容器 OS 的特征以外,最显著的特征是集成了 Kubernetes 的某些社区版本。它会把 OS 的管理交由 Kubernetes 去控制,由 Kubernetes 来控制 OS 的更新。其实业界已经有一些主流的操作系统公司推出了这样的容器 OS,KubeOS 就是 openEuler 推出的这样一款容器 OS。

8561b38a-572b-11ed-a3b6-dac502259ad0.png

KubeOS 的镜像都是基于 openEuler Repo 源进行构造的。KubeOS 部署以后,用户可以在 master 节点上只通过命令行和 yaml 文件就去管理集群所有 worker node 上面的 OS 版本。因为 KubeOS 将 OS 作为 Kubernetes 的一个组件接入到集群中, 这样 OS 和其它的业务容器就位于同等地位,可以通过 Kubernetes 统一去管理容器和 OS,实现 OS 和业务容器的协同调度。并且我们还基于 openEuler 的版本进行了一些定制化的改造,让 KubeOS 可以进行原子化更新升级,避免版本分裂的问题。

8584e170-572b-11ed-a3b6-dac502259ad0.png

下面对 KubeOS 进行一个详细的介绍。KubeOS 的第一个特性是将 OS 作为组件接入到 Kubernetes 中。我们利用 Kubernetes 的 API 扩展机制为 OS 设计了一个 CRD 的 API 对象,然后把它注册到集群中,并且依托于 Kubernetes 的 operator 扩展机制定义了一个 OS controller,去对之前注册那个 OS 对象进行管理和监控。这样就让 OS 和集群中其他的内置资源处于同等地位,都可以通过 kubernetes 进行管理。用户只需要修改 OS 的 CR,然后输入预期的 OS 版本和状态,其他操作都可以由 KubeOS 和 Kubernetes 完成。这样 OS 的管理就在云端进行了。

85a26394-572b-11ed-a3b6-dac502259ad0.png

KubeOS 的第二个特性是 OS 是进行原子升级的,KubeOS 中不提供包管理器,软件包的变化即 OS 版本的变化,也就是说每一个 OS 的版本都会对应一个确定的 OS 镜像,或者说一组确定的 RPM 包的组合。如图所示,软件包的更新即为 OS 版本的更新,这样可以让任何时候集群中的 OS 的版本是确定的、一致的,有助于大规模应用的部署。并且我们 OS 是尽量轻量化的,只包含 Kubernetes 和容器运行所需要的组件,这样不仅减少攻击面,让 OS 更加安全,也可以进行快速的更新,快速的升级。

868ebff0-572b-11ed-a3b6-dac502259ad0.png

如图是 KubeOS 的架构设计,KubeOS 一共分成三个模块,第一个模块 OS operator 部署在 master 节点上的,它是全局的 OS 管理器,会监控集群中所有节点的 OS 的状态。当用户去更改集群中 OS 信息的时候,比如说指定了新的版本,Operator 会感知到,然后把升级任务下发到各个节点上。OSProxy 它就是部署在每一个节点上,它就是单节点的 OS 管理器,会监控当前节点的状态,当他接到 Operator 下发的升级任务时,会去做比如说封锁节点、迁移 Pod 这些操作,并且把需要升级的 OS 信息转发给 OS Agent,OS Agent 是真正的 OS 升级的执行单元,它接收来自于 OS Proxy 的相关信息,完成升级和重启操作。

86a7dc24-572b-11ed-a3b6-dac502259ad0.png

如图是 KubeOS 的文件系统布局的设计,首先是 Root 分区,因为 KubeOS 我们采用了双分区升级的方式,每一个分区它会存放一个 OS 的版本,所以说分成了 RootA 和 RootB,每次升级的时候会下载 OS 镜像到另外一个分区,在下次启动的时候将启动目录切换到另外一个分区,就完成了双分区的升级,并且 KubeOS 文件系统是只读的,这也是为了安全性的考虑,但是我们还是提供了一个 persist 分区,用它存放持久性的用户数据,它其中有一个 Union Path,它采用 overlay 的形式,在镜像上增加叠加层,还有一个 Writable Path,它主要使用 bind mount 形式,直接在镜像上面增加了一个可写层,最后是 Boot 分区,存放的是 grub2 文件。

86eb2c2c-572b-11ed-a3b6-dac502259ad0.png

最后我们再介绍一下 KubeOS 的升级流程。首先第一步,用户通过修改 OS 的 Yaml 文件,指定要升级的 OS 信息,比如 OS 的版本、存放镜像的地址,以及一次升级的 OS 的数量。

当集群中 OS 的状态发生了变化以后,OS Operator 就会感知到这个变化,去查询集群中所有节点的状态,若发现和当前节点的状态不一致,就会把需要升级的节点标记为升级节点,相当于把任务下发到各个节点了。

OSProxy 监控发现当前的节点被标记为升级节点了,就开始执行升级操作,从集群中获取要升级到的 OS 的版本,它把当前节点的所有 Pod 进行驱逐,并把当前节点锁定,把 OS 的信息发送给 OS Agent,Os Agent 接收到相关的信息以后,从一开始用户指定的升级镜像存放的服务器下载镜像,然后设置启动分区,进行重启和升级。升级以后 OS Proxy 看当前节点的状态发现已经升级完成了,就把当前节点重新解锁,并且取消升级标记。

未来的工作

我们接下来要做什么?首先我们需要去不断丰富 KubeOS 的功能,比如提供系统配置下发的功能,提供更多的安全策略。第二点是要不断完善,比如更全面的支持,提供支持更多的架构,更多的容器引擎等等。还有就是让 KubeOS 的使用和部署变得更加方便,比如提供一键式的部署。

审核编辑:郭婷


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为
    +关注

    关注

    218

    文章

    36187

    浏览量

    262669
  • 操作系统
    +关注

    关注

    37

    文章

    7436

    浏览量

    129612

原文标题:KubeOS : 面向云原生场景的容器操作系统

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    主流国产操作系统解析:技术特点与行业适配指南

    、消费电子等领域实现深度渗透,成为数字中国建设的重要底座。本文将聚焦主流国产操作系统,解析不同品牌的技术特点、核心优势与应用场景,为不同用户的选型提供参考。 一、银河麒麟操作系统:全领域标杆型国产
    的头像 发表于 03-27 14:27 213次阅读

    海格通信加入中关村智能终端操作系统产业联盟

    近日,海格通信(股票代码:002465)加入中关村智能终端操作系统产业联盟。双方将在智能终端操作系统在技术、应用场景与产业生态层面加强联合,开启智能终端操作系统产业协同发展的新篇章。
    的头像 发表于 01-20 17:04 1517次阅读

    操作系统体系结构

    操作系统的体系结构是一个开放的问题。正如上文所述,操作系统在核心态为应用程序提供公共的服务,那么操作系统在核心态应该提供什么服务、怎样提供服务?有关这个问题的回答形成了两种主要的体系结构:大内核和微
    发表于 01-15 08:19

    中科创达推出全新一代AI原生整车操作系统滴水OS 2.0 Pre

    整车操作系统。该系统凭借“融合体验、AI原生、更快量产”三大核心优势,通过创新的智能座舱显示布局与智能交互设计,重新定义智能汽车的体验边界。尤为值得关注的是,滴水OS 2.0 Pre 与 AIBOX深度
    的头像 发表于 01-10 16:01 1633次阅读

    从内核到生态:一次看懂HarmonyOS 6如何重写操作系统的“基础代码”

    在移动操作系统竞争进入“深水区”的当下,用户对于系统体验的期待早已不再局限于功能的简单叠加,而是追求一种从底层架构革新带来的全方位飞跃。HarmonyOS 6的正式发布,正是这样一次对操作系统
    的头像 发表于 12-31 09:09 357次阅读
    从内核到生态:一次看懂HarmonyOS 6如何重写<b class='flag-5'>操作系统</b>的“基础代码”

    EV10AS180A模数转换器支持哪些操作系统

    与这些硬件接口进行交互,从而实现对EV10AS180A的控制和数据读取。系统集成与应用场景:在将EV10AS180A集成到具体系统中时,用户可能会根据系统需求选择合适的
    发表于 11-18 09:18

    单片机的操作系统

    RTX ‌:ARM官方推荐,与CMSIS-RTOS标准兼容,支持时间片轮转调度,适合汽车电子等硬实时任务。 ‌ ‌ 都江堰操作系统(djyos) ‌:事件驱动型内核,适用于高并发场景。 ‌ 选择时需结合硬件资源(如CPU类型、内存大小)和开发需求(实时性、网络支持等
    发表于 11-14 06:18

    支持LoongArch的操作系统(ABI2.0)

    支持LoongArch的操作系统汇总(ABI2.0) 下载操作系统时架构选择loongarch64 或 loong64 或 loong。 1. 桌面系统 0x1 Debian http
    发表于 09-18 14:58

    树莓派操作系统:版本、特性及设置完整指南!

    树莓派操作系统是什么?树莓派操作系统是由树莓派基金会专为树莓派开发的官方操作系统。它基于DebianLinux发行版,并针对树莓派的ARM架构进行了专门优化。树莓派操作系统有多个版本,
    的头像 发表于 07-28 18:26 1793次阅读
    树莓派<b class='flag-5'>操作系统</b>:版本、特性及设置完整指南!

    深度智能 基座跃迁 鸿道Intewell,面向“AI+智造”的新型工业操作系统

    科东软件受邀参加“数字化与智能制造技术论坛”,带来“AI+智造”的精彩分享。在“AI+智造”深度融合的时代洪流中,工业操作系统作为底层基座的重要性日益凸显。鸿道Intewell操作系统已成为驱动中国制造业智能化跃迁的关键力量。
    的头像 发表于 07-23 17:02 717次阅读
    深度智能 基座跃迁  鸿道Intewell,<b class='flag-5'>面向</b>“AI+智造”的新型工业<b class='flag-5'>操作系统</b>

    Helm实现容器化运维高效包管理与应用部署

    在当今快速演变的云原生生态系统中,容器化技术已成为运维工程师不可或缺的核心能力。
    的头像 发表于 07-14 11:16 968次阅读

    鸿道Intewell实时操作系统有哪些应用场景

    鸿道Intewell工业操作系统作为一款国产实时操作系统(RTOS),在工业领域因其高实时性、高可靠性和强定制化能力,被广泛应用于对系统响应速度和稳定性要求苛刻的场景。以下是其典型应用
    的头像 发表于 06-26 10:15 884次阅读

    云原生环境里Nginx的故障排查思路

    本文聚焦于云原生环境下Nginx的故障排查思路。随着云原生技术的广泛应用,Nginx作为常用的高性能Web服务器和反向代理服务器,在容器化和编排的环境中面临着新的故障场景和挑战。
    的头像 发表于 06-17 13:53 1154次阅读
    <b class='flag-5'>云原生</b>环境里Nginx的故障排查思路

    聚徽厂家解码——工控机操作系统选择:Windows、Linux、QNX 如何匹配工业场景

    优势,适用于不同工业场景。 Windows:通用性与易用性的代表 特点与优势 Windows 操作系统凭借简洁直观的用户界面和丰富的软件生态,在工控领域广泛应用。无论是早期的 Windows XP,还是如今的 Windows 10、Windows 11,都能对各类专业工控
    的头像 发表于 05-29 16:28 1848次阅读

    从 Java 到 Go:面向对象的巨人与云原生的轻骑兵

    (Goroutine/Channel) 在 云原生基础设施领域 占据主导地位,它也是 Java 开发者探索云原生技术栈的关键补
    的头像 发表于 04-25 11:13 748次阅读