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 的使用和部署变得更加方便,比如提供一键式的部署。

审核编辑:郭婷


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

    关注

    216

    文章

    34423

    浏览量

    251568
  • 操作系统
    +关注

    关注

    37

    文章

    6811

    浏览量

    123294

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

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

收藏 人收藏

    评论

    相关推荐

    华为原生鸿蒙操作系统正式发布,彻底摆脱内核依赖

    电子发烧友网报道(文/黄山明)近日,华为正式发布了原生鸿蒙操作系统,也是国内首个移动操作系统,这让其成为继苹果iOS与Android系统后,全球第三大移动
    的头像 发表于 10-24 01:07 3217次阅读

    什么是云原生MLOps平台

    云原生MLOps平台,是指利用云计算的基础设施和开发工具,来构建、部署和管理机器学习模型的全生命周期的平台。以下,是对云原生MLOps平台的介绍,由AI部落小编整理。
    的头像 发表于 12-12 13:13 92次阅读

    润和软件推出首个AI原生操作系统HopeOS V24

    近日,操作系统大会&openEuler Summit 2024在北京隆重举办。江苏润和软件股份有限公司(以下简称“润和软件”)于会上重磅发布基于openEuler 24.03 LTS版本的商业发行版——润和企业级操作系统(服务器版)HopeOS V24,这也是润和软件首个
    的头像 发表于 11-17 09:16 661次阅读

    华为原生鸿蒙操作系统正式发布

    10月22日晚,华为举行了一场盛大的发布会,正式推出了其原生鸿蒙操作系统HarmonyOS NEXT,也被称为鸿蒙5.0。这一发布标志着鸿蒙系统在功能和体验上实现了重大飞跃。
    的头像 发表于 10-23 16:52 455次阅读

    鸿蒙生态设备超10亿!原生鸿蒙发布,国产操作系统实现自主可控

    10月22日晚间,原生鸿蒙之夜暨华为全场景新品发布会正式召开,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东宣布,搭载鸿蒙操作系统,包括Open Harmony的生态设备超过10亿。我们实现了同一个
    的头像 发表于 10-23 12:04 1697次阅读
    鸿蒙生态设备超10亿!<b class='flag-5'>原生</b>鸿蒙发布,国产<b class='flag-5'>操作系统</b>实现自主可控

    面向功能安全应用的汽车开源操作系统解决方案

    在SAE 2024国际汽车安全大会上,Elektrobit的Linux专家王红燕在操作系统与芯片技术的分论坛上为大家带来了“面向功能安全应用的汽车开源操作系统解决方案”主题演讲。
    的头像 发表于 09-27 09:21 463次阅读
    <b class='flag-5'>面向</b>功能安全应用的汽车开源<b class='flag-5'>操作系统</b>解决方案

    云原生和非云原生哪个好?六大区别详细对比

    云原生和非云原生各有优劣,具体选择取决于应用场景云原生利用云计算的优势,通过微服务、容器化和自动化运维等技术,提高了应用的可扩展性、更新速
    的头像 发表于 09-13 09:53 382次阅读

    开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束

    粤港澳大湾区国家技术创新中心操作系统业务负责人柯善风做了“国创面向工业机器人的OS解决方案和落地实践”专题报告。柯善风介绍国创中心的发展情况,分享了面向工业场景、自主可控、中立普惠
    发表于 08-30 17:24

    京东云原生安全产品重磅发布

    “安全产品那么多,我怎么知道防住了?”“大家都说自己是云原生的,我看都是换汤不换药”在与客户沟通云原生安全方案的时候,经常会遇到这样的吐槽。越来越的客户已经开始了云原生化的技术架构改造,也意识到
    的头像 发表于 07-26 10:36 469次阅读
    京东<b class='flag-5'>云原生</b>安全产品重磅发布

    从积木式到装配式云原生安全

    云原生安全风险 随着云原生架构的快速发展,核心能力逐渐稳定,安全问题日趋紧急。在云原生安全领域不但有新技术带来的新风险,传统IT基础设施下的安全威胁也依然存在。要想做好云原生安全,就要
    的头像 发表于 07-26 10:35 296次阅读
    从积木式到装配式<b class='flag-5'>云原生</b>安全

    基于DPU与SmartNic的云原生SDN解决方案

    个轻量级,可移植的运行环境,逐渐成为云原生时代基础设施的事实标准。Kubernetes通过网络插件(CNI,Container Network Interface)实现灵活地配置和管理集群中的容器网络,确保容器之间的有效通信和网
    的头像 发表于 07-22 11:44 691次阅读
    基于DPU与SmartNic的<b class='flag-5'>云原生</b>SDN解决方案

    中科创达全球首发面向中央计算的AI原生整车操作系统—滴水OS

    2024年4月26日,作为全球领先的智能操作系统及端侧智能产品和技术提供商,中科创达在北京国际车展上全球首发面向中央计算的AI原生整车操作系统——滴水OS,旨在赋能汽车产业拥抱AI大模
    的头像 发表于 04-28 09:58 917次阅读

    云原生是大模型“降本增效”的解药吗?

    云原生AI正当时
    的头像 发表于 02-20 09:31 387次阅读

    华为发布原生版鸿蒙操作系统:不再兼容安卓

    华为在1月18日的发布会上,正式推出了HarmonyOS NEXT鸿蒙星河版操作系统,并面向开发者开放申请。这一新版本的鸿蒙操作系统标志着华为在操作系统领域迈出了重要的一步,不再与安卓
    的头像 发表于 01-19 15:28 1458次阅读

    米哈游大数据云原生实践

    近年来,容器、微服务、Kubernetes 等各项云原生技术的日渐成熟,越来越多的公司开始选择拥抱云原生,并开始将 AI、大数据等类型的企业应用部署运行在云原生之上。以 Spark 为
    的头像 发表于 01-09 10:41 582次阅读
    米哈游大数据<b class='flag-5'>云原生</b>实践