开发者故事:基于 KubeSphere LuBan 架构打造下一代云交付平台
前言
在 KubeSphere Marketplace,个人开发者的创意和才能正在逐渐崭露头角。今日,我们荣幸地向大家介绍 Shipper 云交付平台的开发者——凌波,一位云原生领域的资深专家。
凌波巧妙融合 KubeSphere 平台的特性,通过原生适配的精湛技艺,匠心独运地打造了 Shipper 平台。现在,让我们一同走进凌波的开发世界,聆听他在开发过程中的宝贵心得与独特体会。我们期待,凌波的故事能够激励更多开发者在 KubeSphere 平台上展现才华,共同推动云原生技术的创新与发展。
开发者简介
- 昵称:凌波(lingbohome)
- 邮箱:lingbo@lingbohome.com
- 博客: https://www.lingbohome.com/
- GitHub 主页:https://github.com/lingbohome
- 简介: 曾在 HIT 公司负责容器云平台设计研发及信创适配工作,对云原生相关领域技术怀有浓厚的兴趣,同时也会沉淀一些自己的思考和想法,有多年的云原生 devops 平台设计开发经验,K8s 容器云平台设计开发经验。
创作背景
云交付(Shipper),这一面向未来的云原生构建与交付平台,是我多年云原生 DevOps 经验与独到思考的结晶。它最初以 K8s 为基础,构建了一个功能强大的容器云平台。然而,当 KubeSphere v4 这一全新版本发布,其分布式云原生可扩展开放架构,尤其是 KubeSphere LuBan 架构所展现的云原生微内核与可热插拔扩展组件理念,瞬间吸引了我的注意。这一架构不仅与我在云原生领域的诸多思考不谋而合,更激发了我将理论付诸实践的强烈愿望。
在深入了解了 KubeSphere v4 后,我意识到,这不仅仅是一个堆砌功能的容器云平台,而是一个具有革命性意义的架构创新。因此,我决定将云交付(Shipper)以扩展组件的形式,适配到 KubeSphere LuBan 架构上,并通过 KubeSphere Marketplace,让更多用户能够轻松体验与使用它。
在适配过程中,我最初考虑采用 iframe 嵌入的方式,以节省开发时间。然而,在仔细研究了几个以 iframe 集成的组件后,我发现这种方式虽然简单,但扩展组件与 KubeSphere 主体之间的割裂感却十分明显,不利于后续的可持续迭代和推广。
为了追求更好的融合效果和用户沉浸式体验,我最终决定采用原生适配的方式,将云交付(Shipper)的设计基于 KubeSphere LuBan 架构重新开发。虽然这一决定意味着更大的工作量,但我相信,只有通过这样的方式,才能真正实现云交付(Shipper)与 KubeSphere 的完美融合,为用户带来更加出色的体验。在未来的日子里,我会持续迭代分多个版本完成适配,并不断改进和实现更好的想法和设计。
云交付(Shipper)简介
云交付(Shipper),是面向未来的云原生构建与交付平台,基于平台工程理念自助式、开箱即用的云原生 DevOps 平台,致力于让云原生应用的构建与交付,变得更简单、更高效,同时赋能产研、交付运维一体化高效协作,助力企业产品的业务价值快速高质量的交付给客户。
主要特性:
- 高度灵活易用易扩展的构建器,开箱即用,无需任何配置
- 社区驱动共建丰富生态,共享可重用、功能多样性的模板
- 平台内置默认模板仓库,由平台驱动维护,不定期更新和上线更多实用模板
- 高效协作,关注点分离,产研团队使用模板完成自己的需求,运维架构团队提供不同自定义模板功能的支持
- 支持触发器,轻松与第三方系统集成及构建器之间的联动,支持 cron 表达式定时执行
- 多类型制品管理,支持文本类型制品在线预览
- 基于平台工程理念的自服务式应用全生命周期管理,包括但不限于(版本化,发布,部署、运维,监控,打包交付),无需了解底层技术细节,即可轻松交付业务价值,减轻用户的使用负担
- 基于 KubeSphere 天生的多云多租户能力,团队之间资源隔离,互不干扰
- 管理端全局效能洞察看板,提供分析各维度效能度量数据、成本分析数据
- 支持面向 toB 行业的交付能力,解决 toB 产品交付痛点,降低 toB 产品交付成本
- 信创支持能力,助力企业高效高质量交付信创应用
搭建环境
我的开发环境搭建相对还是比较轻松的,因为在腾讯云上有一台测试用的单机 K8s 环境,直接通过官方文档中的 helmchart 命令一键部署了 KubeSphere,然后还需要在本地安装 create-ks-project
和 ksbuilder,分别用于初始化扩展组件前端工程目录和打包、发布扩展组件,后端扩展的话,就比较灵活了,不需要安装 KubeSphere 特定的相关开发工具,我这里后端是以 APIService 和 crd 的形式扩展的,最后打包扩展组件的时候,将后端注册到相应的 APIService 中就可以了,其它的额外的开发工具,按照平常的开发需求,按需安装即可。
如果你也在寻找一个高效、便捷的开发环境搭建方案,那么我强烈推荐你试试 KubeSphere Cloud 的轻量级集群。它能够秒级拉起整个集群环境和 KubeSphere,让你轻松享受省时省力的开发体验。
开发过程
KubeSphere 的扩展组件开发跟平时的开发流程和方式没什么太大区别,只是前端按照 KubeSphere 提供的一套组件库(Kube Design)来开发,同时 KubeSphere 还提供了许多扩展组件开发示例,可以参考官方给的这个 extension-samples 这个代码仓库,有了这些例子后,上手也就更快了,可以减轻不少开发负担。
前面提到,我的本地开发环境是连接的云上面的远程集群,这对本地前后端联调不是很友好,为了解决这个痛点,我这里使用了一个比较简单且不用额外工具的方案,大家可以视自己的实际情况参考:
通过 SSH 配置本地隧道端口转发,来进行本地联调,具体如下:
# 语法
ssh -NfR ${公网端口}:${本地地址}:${本地端口} ${公网服务器用户名}@${公网服务器地址}
# 示例
# 假设需要将本地localhost的5000端口映射到远程主机的5300端口,则使用下面的命令
ssh -NfR 5300:localhost:5000 user@10.13.0.6
# 然后就可以在远程服务器上通过127.0.0.1:5300访问到本地的localhost:5000后端服务了
这样配置后还不够,还需要将你的后端服务通过 APIService 注册到 KubeSphere ,具体如下:
apiVersion: extensions.kubesphere.io/v1alpha1
kind: APIService
metadata:
name: v1alpha1.resource.lingbohome.com
spec:
group: resource.lingbohome.com
version: v1alpha1
url: http://10.0.16.3:7500
status:
state: Available
最后再远程主机上启动一个监听在 7500 端口的 nginx 服务,来反代到 127.0.0.1:5300。
server {
listen 7500 default backlog=8192;
location / {
proxy_pass http://127.0.0.1:5300/;
client_max_body_size 2050m;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
}
}
现在就可以通过 KubeSphere 控制台本地前端联调,访问到本地的 localhost:5000 后端了。
建议
前端扩展打包后,会在扩展组件源代码目录 extensions/<extensionName>/dist 下会生成 index.js 文件,KubeSphere 提供了多种方式来托管index.js 文件,有 configmap、secret、service,因为打包后index.js 文件内容比较长且格式是紧凑的,将其存储到 configmap 和 secret 中,很容易因为格式问题导致错误,而且 index.js内容有更新时再次修改 configmap 或者 secret 也麻烦,所以这里强烈推荐使用 service 的方式,将其index.js 文件打包到容器镜像中,最后通过 deployment 部署起来,后续有更新改镜像 tag 或者覆盖之前的镜像就行了。
功能展示
后续完整的功能也在有序的推进中,下面展示了目前适配的部分功能:
云原生构建器:致力于让构建更简单、一切皆可构建为目标
构建器通过模板来执行具体的任务,模板可以独立维护和分发,当前内置了默认的模板仓库,同时也会不定期更新和上线更多实用模板,目前仓库内上线了两种实用模板:
- S2i:基于源码构建镜像,并推送到镜像仓库,支持云原生多语言构建
- helmchart-generator:helmchart 包生成器,快速自动生成 helmchart package,并支持同时推送到 chart 的经典仓库和 oci 仓库
基于 S2i 的构建器
基于 S2i 模板创建一个构建器。

配置 S2i 模板的构建器参数,然后确认即可。

运行刚刚创建的构建器,也可以在这里运行前做一些参数的临时调整。

运行之后,可以查看构建器流水线实例执行日志。

流水线执行成功后,一般都会有产物,基于 S2i 模板的构建器产物就是 docker 镜像了,可以在制品页面查看。


基于 helmchart-generator 的构建器
基于 helmchart-generator 模板创建一个构建器。

配置 helmchart-generator 模板的构建器参数,helmchart-generator 模板提供了很多可选的参数,来满足你生成 helm chart 包,根据自己的需求配置即可。



后续的运行和查看日志的操作流程都是一样的,只不过最后执行成功后,生成的制品产物不同。
基于 helmchart-generator 模板的构建器生成的制品是 helm chart 包,切到制品页面查看,可以看到生成了两种类型的 helm chart 制品,然后 oss 类型制品是可以在线导出的。

基于 KubeSphere 内置的应用功能部署 helmchart
虽然构建器也可以做到 helmchart 的部署,但觉得这样不太好,因此部署相关的功能是放在云原生交付模块去做的,那基于目前适配的功能,如何去实现部署,可以借助 KubeSphere 本身的功能。
前不久,给 KubeSphere 开源社区贡献了基于 OCI 的 Helm Chart 仓库支持,在这里配合基于 helmchart-generator 模板的构建器使用再合适不过了。
首先在应用仓库管理页面,添加基于 OCI 的 Helm Chart 仓库,仓库地址就是上面提到的生成的 oci 类型的 helmchart 制品的地址去掉 chart 基础名称就是仓库地址了,这个仓库地址其本质就是这个构建器所在 project 下面生成的所有 helmchart 制品地址。
后续这个 project 下面基于 helmchart-generator 模板的所有构建器生成的 oci 制品,都会自动同步到这个应用仓库中。


应用仓库配置完成后,就可以在内置的应用功能页面,选择应用仓库中同步过来的 helmchart 进行部署了。




基于 helmchart-generator 模板生成的 helmchart 包,符合 helm 官方的最佳实践,会在包中生成 README.md使用说明文件,在这里可以得到体现。
最后
欢迎大家体验和使用,最后希望 KubeSphere 社区能更加繁荣热闹,我也会继续完善后续的功能适配,欢迎大家找我交流。
我们将持续分享更多开发者的故事,展示他们如何将对技术的热情转化为实际的产品,为社区带来价值。敬请关注,与我们一起见证 KubeSphere Marketplace 的成长和繁荣。
本文由博客一文多发平台 OpenWrite 发布!
开发者故事:基于 KubeSphere LuBan 架构打造下一代云交付平台的更多相关文章
- 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台
背景 从传统运维到容器化的 Docker Swarm 编排,从 Docker Swarm 转向 Kubernetes,然后在 Kubernetes 运行 SpringCloud 微服务全家桶,到最终拥 ...
- 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台
背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...
- 如何快速为团队打造自己的组件库(下)—— 基于 element-ui 为团队打造自己的组件库
文章已收录到 github,欢迎 Watch 和 Star. 简介 在了解 Element 源码架构 的基础上,接下来我们基于 element-ui 为团队打造自己的组件库. 主题配置 基础组件库在 ...
- 十大众筹PC:硅谷新生代如何打造下一代计算机
十大众筹PC:硅谷新生代如何打造下一代计算机 来源:CNET科技资讯网 众筹革命已经让众多吸引人的台式机,笔电和平板PC诞生.下面就是最引人注意和最成功的典范. 尽管PC市场不再象过去那样是一 ...
- 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划
菜鸟Scrum敏捷实践系列索引 菜鸟Scrum敏捷实践系列(一)用户故事概念 菜鸟Scrum敏捷实践系列(二)用户故事验收 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划 采用Sc ...
- 借助 Flutter 跨平台特性连接 10 亿玩家 | Flutter 开发者故事
由光子工作室及 Krafton 联合研发的 PUBG MOBILE 依然保持着极高的人气,目前全球有 10 亿玩家,日活跃 5,000 万 (不包括中国大陆地区).从游戏策划伊始,团队就打算为各个平台 ...
- 基于C/S架构的3D对战网络游戏C++框架_【不定期更新通知】
由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...
- 基于C/S架构的3D对战网络游戏C++框架_01服务器端与客户端需求分析
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- [我所理解的REST] 3.基于网络应用的架构
上篇中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格).本篇来介绍一组自洽的术语,用它来描述和解释软件架构:以及列举下对于基于网络的应用来说,哪些点是需要我们重点关注的. 1 ...
- [解读REST] 4.基于网络应用的架构风格
上篇文章介绍了一组自洽的术语来描述和解释软件架构:如何利用架构属性评估一个架构风格:以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的.本篇在以上的基础上,列举一下一些常见的(RES ...
随机推荐
- OpenCV计算机视觉学习(16)——仿射变换学习笔记
如果需要其他图像处理的文章及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractic ...
- CyberDog测试视频 —— 【开箱】小米"限量"机器狗!被我玩坏了...
地址: https://www.youtube.com/watch?v=3ntAhy3thXM PS. 现在的智能机器人其实真的没有人们想象中的那么智能.感觉现在的智能机器人最为有用的功能一个是倒地自 ...
- 【转载】 关于tf.stop_gradient的使用及理解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u013745804/article/de ...
- GPG公钥的删除与注销
参考: 如何在 Gitee 上使用 GPG 我们通过在本地主机保存GPG私钥,然后在Gitee或Github上保存GPG公钥的方式来实现对git的commit和tag操作的签名. 当GPG公私秘钥对作 ...
- MPI4PY的数据类型 —— MPI4Py data type
原文地址: http://education.molssi.org/parallel-programming/03-distributed-examples-mpi4py/index.html MPI ...
- java多线程-补充-面试
1.背景 在这个课程之前我们已经讲了2个关于多线程的课程 一个是主要是关于多线程基础的: 另一个主要是关于JUC的: 今天我们对之前课程中没有讲到的或者重要的或者是童鞋们反馈的技术点做一个补充讲解 当 ...
- SMU Summer 2023 Contest Round 4
SMU Summer 2023 Contest Round 4 A. Telephone Number 满足第一个8后面存在10个字符即可 #include <bits/stdc++.h> ...
- 2023 PTA天梯赛补题(L1 & L2)
2023 天梯赛 L1 & L2 补题 L1 L1-089 最好的文档 输入输出题 #include<bits/stdc++.h> using namespace std; int ...
- Python 开发中,使用bcrypt 或 Passlib 对系统用户密码进行哈希和验证处理
在设计一个系统的时候,肯定都有会有用户身份认证的问题,一般对用户校验的时候,都是对用户存在数据库总的密码哈希值进行判断,从而避免密码泄露和反向解密,那么在Python 开发中,我们可以引入bcrypt ...
- TwinCAT3 - 实现自己的Tc2_SerialCom
目录 1,前言 2,原生Tc2_SerialCom简单使用 3,实现自己的Tc2_SerialCom 3.1,EL6inData22B,EL6outData22B 3.2,ComBuffer 3.3, ...