Sealos 基础教程:Sealos Devbox 的架构原理解析

news/2024/11/5 17:51:48/文章来源:https://www.cnblogs.com/ryanyangcs/p/18525274

今天这篇文章咱们来聊一聊 Sealos Devbox 到底是怎么设计的,据说隔壁老奶奶最喜欢看这种有技术深度的文章了。

Devbox 返璞归真,把开发者的开发精力放到开发中去,真正做到了摈弃复杂的 CI/CD,Docker,YAML 编排,除此之外还力求拉平开发与测试与运维团队之间的一切界限,从从业者的角度做到了一套环境,随处运行。

那么,代价是什么呢?

Devbox 的架构极大的阐释了 “Sealos - 一切皆应用” 的理念,通过对不同组件层级的抽象与集成,把复杂度控制在不同层级的内部,从而达到在体验和效果上的一致性。

在内部设计与架构方面,我们进行了大量复杂的工作,以确保系统的高效和解耦。这个过程涉及了不同分层级别下面的架构区别和规划,不同层级之间的技术细节与选型互不依赖,针对每一个功能点都进行了针对性的设计。

尽管内部逻辑复杂,Devbox 的核心却是让用户在几乎不需要更改现有的代码开发与上线流程的前提下能够直接无缝上云,快速且直接的体验到云原生与虚拟化的优势。在使用相同的 IDE 开发的前提下,可以提供和现有的所有开发流程完全一致的体验。

很多时候,研发同学和运维同学,开发流程和上线流程,很容易因为环境的不一致出现的问题而导致时间与精力的耗费。比如说在我的电脑上运行好好的,到了另一台电脑上就不行了,或者是同样的初始化脚本,在开发机上是可以跑起来的,但是在上线之后却出现了各种各样的问题,这种情况在 Devbox 上是不会发生的。

整体架构

整体架构图如下:

Devbox 可以大致的分为三个大部分:

  • Interface
  • Controller
  • Container Shim

Interface

用户直接交互的界面与接口的聚合部分,包括 Web 前端,插件端,API 端。

Web 前端

Sealos 内 App 的部分,完整的用户交互界面,包括创建,查看,变更,删除等等,是用户与 Devbox 交互的第一入口。

插件端

实际为 VS Code 和 Jetbrain 等 IDE 的插件,在 IDE 内展示与管理 Devbox 列表,与 API 端交互。

API 端

负责与控制器交互,鉴权 web 前端/插件端请求,聚合转换数据接口等。

Controller

Devbox 控制器负责将来自用户的请求转换为 K8s 的资源,实际创建对应 Devbox 实例的 pod,svc,ingress 等,管理对应的数据,监听与同步 Devbox 实例的所有状态,返回外部可访问的网络 URL 等。

Devbox Controller 支持如下命令:

  • 展示可用的 Runtime 集合
  • 创建/删除 Devbox
  • 展示 Devbox 的状态
  • Devbox 的关机/开机/重启
  • 变更 Devbox 的资源配置
  • 提供 IDE 端可连接的网络
    • nodePort 模式
    • wsTunnel 模式
  • 配置 Devbox 内应用监听的端口,提供对外测试用 URL
  • 发布与共享预装好的 Runtime 环境

Container Shim

负责与 kubernetes 的底层 CRI 部分进行交互,实现容器的持久化与提交到 Devbox 专属的镜像仓库,更新镜像信息等,是 Devbox 的核心部分。

一个完整的用户流程

  • 用户登录 Sealos,打开 Devbox 的 Web 界面,点击新建 Devbox,选择一个 Runtime,选择版本,调整所需的资源,点击创建。
  • 前端创建一个 Devbox 的 CR,spec 内容为上述选择的信息。
  • Controller 监听到 CR 的创建,生成所需的 image/tag,创建对应的 pod,svc 等资源,并记录到 CR 的 status 字段。
  • 前端轮询 CR 的状态更新,拿到 status 字段里面的内容渲染到一键连接的按钮上。
  • 用户点击一键连接,唤起 VS Code/Jetbrains 的插件,插件通过 API 端获取到 Devbox 的 SSH 连接信息,通过 nodePort/wsTunnel 连接到对应的 Pod 上。
  • 用户在 IDE 内开发,调试,测试.
  • 完成开发后,用户选择提交修改 (关机/定时触发)。
  • K8s 监听到 Pod 的关闭/变更请求,发送对应的 Event 到 Sealos 的 Devbox 专用的 containerd-shim(Proxy 服务)。
  • containerd-shim 根据不同的事件,执行对应的操作,比如保存用的 emptyDir,与 overlayFS 合并,commit 成一个新的镜像,提交到内部安全隔离的镜像仓库。
  • 用户重新开机/继续使用 Devbox,Controller 会监听到对应的事件,重新创建对应的 Pod,切换 Pod 的 image 为上次 Commit 的镜像。
  • 用户所有变更都保留,就像使用传统的虚拟机一样。

后续

后续,Devbox 还会提供:

  • 开机自启动,模拟 systemd
  • 自定义 runtime
  • 开发环境共享
  • 镜像仓库对用户开放
  • 协作与权限控制

等等功能,力求在保证一致的开发运行体验的架构上,利用轻量级虚拟化的特点,提供更多的扩展能力。

颤抖吧世界,大的要来了!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复训时很好的字符串题

descriptionsolution 考虑到这么一件事情,就是我最终的字符串 \(t\) 一定是由 \(s\) 的若干段前缀拼接而成,因为如果不是前缀,换成前缀一定不劣。 然后我们拥有一个朴素的状态 \(f_{i, j}\) 表示填到第 \(i\) 个数,且最后一段是由一段长度为 \(j\) 的前缀拼接成的最大贡献。…

来一场数据集成技术与向量数据库的“双向奔赴”!

Apache SeaTunnel作为一款高效的数据集成和同步工具,一直活跃于大数据领域。Milvus作为全球领先的开源向量数据库,致力于推动向量数据管理和AI的应用。 在最新版本中,SeaTunnel Connector已正式支持向量数据库Milvus,这是SeaTunnel在助力用户提升AI应用开发效率过程中的重要…

2024-11-04_Mon_14:10 - 帕金森定律:支出永远与收入成正比

2024-11-04_Mon_14:10 - 帕金森定律:支出永远与收入成正比 ​​ 【网图,侵删】 ‍财富,不断增加净值增加净值的途径增加收入 增加存款 增加投资获利 减低消费支出永远与收入成正比穷人认为“存款,是有钱人的做的”,“我现在没钱,等我有钱了,在考虑存款” 支出永远与收入…

智慧园区算法视频分析服务器烟雾识别智慧园区安防视频监控及动态布控预警方案

智慧园区安防视频监控及动态布控预警方案是一种综合性的安全管理解决方案,智慧园区算法视频分析服务器通过结合视频监控技术、人工智能算法、大数据分析等技术,实现对工厂区域内人、车、物的全面监控和管理。一、需求和目标 1、系统建设目标:目标是构建一个重点区域的动态人…

Spring7中事务传播机制形象图解

一、Spring的7种事务传播机制Spring事务传播机制是指在多个事务方法相互调用的情况下,事务如何在方法之间进行传播和管理的机制。通过事务传播机制,可以控制事务的范围和行为,保证多个事务方法的一致性和完整性。Spring提供了七种事务传播行为,分别是:REQUIRED、SUPPORTS、…

还原经典,有激情更有情怀!霸天传奇手游详细图文架设教程

本文讲解战神引擎的传奇手游《霸天传奇》架设教程,同时免费提供该游戏链接、后台、源码和架设教程,用爱发电,分享快乐,全部免费,快来试试吧~前言 这次给大家带来的这款传奇应该是粉丝玩家呼声最高的游戏了- -,天天催我传奇啊,哈哈。我也终于找到了这款战神引擎的 1.80 精…

vite+vue3.x+uni搭建项目

vite-uniapp-template 🚀 基于 vitejs 驱动的 uniapp 最佳实践集成模板 查看演示 特点💪 Assets: 提供了全局静态资源加载工具,无感切换加载本地静态资源/远程静态资源,解决小程序环境下包大小限制问题。 📦 SubPackages: 符合心智模型的分包风格,合理的 pages 目录结…

Narak靶机渗透 (Vulnhub内网渗透)

一、渗透目标: Description Back to the Top Narak is the Hindu equivalent of Hell. You are in the pit with the Lord of Hell himself. Can you use your hacking skills to get out of the Narak? Burning walls and demons are around every corner even your trust…

乐维网管平台(四):配置化数据报表应用

在网络管理中,报表功能是一项非常重要的功能,它通过统计与分析各种类型数据,为网络管理员决策提供数据支撑。 一、配置化数据报表概述 基于不同行业、不同客户、不同应用场景,乐维网管平台提供了配置化报表功能。配置化数据报表允许用户根据实际需求,灵活配置并生成多种类…

Nuxt.js 应用中的 nitro:build:before 事件钩子详解

title: Nuxt.js 应用中的 nitro:build:before 事件钩子详解 date: 2024/11/4 updated: 2024/11/4 author: cmdragon excerpt: nitro:build:before 是 Nuxt 3 中的一个生命周期钩子,专门用于在构建 Nitro 实例之前调用。这个钩子允许开发者在 Nitro 实例构建之前执行特定的…