前言

在 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 架构打造下一代云交付平台的更多相关文章

  1. 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台

    背景 从传统运维到容器化的 Docker Swarm 编排,从 Docker Swarm 转向 Kubernetes,然后在 Kubernetes 运行 SpringCloud 微服务全家桶,到最终拥 ...

  2. 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台

    背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...

  3. 如何快速为团队打造自己的组件库(下)—— 基于 element-ui 为团队打造自己的组件库

    文章已收录到 github,欢迎 Watch 和 Star. 简介 在了解 Element 源码架构 的基础上,接下来我们基于 element-ui 为团队打造自己的组件库. 主题配置 基础组件库在 ...

  4. 十大众筹PC:硅谷新生代如何打造下一代计算机

    十大众筹PC:硅谷新生代如何打造下一代计算机     来源:CNET科技资讯网 众筹革命已经让众多吸引人的台式机,笔电和平板PC诞生.下面就是最引人注意和最成功的典范. 尽管PC市场不再象过去那样是一 ...

  5. 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划

    菜鸟Scrum敏捷实践系列索引 菜鸟Scrum敏捷实践系列(一)用户故事概念 菜鸟Scrum敏捷实践系列(二)用户故事验收 菜鸟Scrum敏捷实践系列(三)用户故事的组织---功能架构的规划 采用Sc ...

  6. 借助 Flutter 跨平台特性连接 10 亿玩家 | Flutter 开发者故事

    由光子工作室及 Krafton 联合研发的 PUBG MOBILE 依然保持着极高的人气,目前全球有 10 亿玩家,日活跃 5,000 万 (不包括中国大陆地区).从游戏策划伊始,团队就打算为各个平台 ...

  7. 基于C/S架构的3D对战网络游戏C++框架 _【不定期更新通知】

    由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...

  8. 基于C/S架构的3D对战网络游戏C++框架 _01服务器端与客户端需求分析

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  9. [我所理解的REST] 3.基于网络应用的架构

    上篇中解释到什么是架构风格和应该以怎样的视角来理解REST(Web的架构风格).本篇来介绍一组自洽的术语,用它来描述和解释软件架构:以及列举下对于基于网络的应用来说,哪些点是需要我们重点关注的. 1 ...

  10. [解读REST] 4.基于网络应用的架构风格

    上篇文章介绍了一组自洽的术语来描述和解释软件架构:如何利用架构属性评估一个架构风格:以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的.本篇在以上的基础上,列举一下一些常见的(RES ...

随机推荐

  1. 一键搭建WordPress独立博客 - 图文教程使用Linux VPS通过LNMP搭建个人博客

            一键搭建WordPress独立博客 - 图文教程使用Linux VPS通过LNMP搭建个人博客 使用WordPress建立个人博客是非常方便的,建立WordPress博客首先需要选择一 ...

  2. 强化学习baseline论文—— rainbow算法中给出实验结果的54个atari2600游戏名称列表

    alien amidar assault asterix asteroids atlantis bank_heist battle_zone beam_rider berzerk bowling bo ...

  3. pycuda学习过程中的一些发现,cuda函数的初始化要在cuda内存空间初始化之后,否则会报错

    参考: https://www.cnblogs.com/devilmaycry812839668/p/15348610.html 最近在看WarpDrive的代码,其中cuda上运行的代码是使用pyc ...

  4. 使用pybind11为Python编写一个简单的C语言扩展模块

    相关: 为Python编写一个简单的C语言扩展模块 在Pybind11 出现之前为Python编写扩展模块的方法有多种,但是并没有哪种方法被认为一定比其他的好,因此也就变得在为Python编写扩展模块 ...

  5. 破局SAP实施难题、降低开发难度,定制化需求怎样快速上线?

    前言 SAP 是全球领先的业务流程管理软件供应商之一,其提供广泛的模块化解决方案和套件,所开发的软件解决方案面向各种规模的企业,帮助客户规划和设计业务流程.分析并高效设计整个价值链,以更好的了解和响应 ...

  6. 如何使用 Shebang

    什么是 Shebang? 简单来说,就是你在脚本开头看到的这个: #!/usr/bin/bash Shebang(也称为 hash-bang.pound-bang 或者 bang)是一个作为脚本文件中 ...

  7. Kubernetes-8:Deployment、DaemonSet、Job、CronJob等各控制器介绍及演示

    前文中也都已经提及过k8s都有哪些常用的控制器,本文对这些控制器进行细剖及演示一下 RS与RC与Deployment关联 RC主要作用就是用来确保容器应用副本数保持用户的期望值数目,即如果有pod异常 ...

  8. docker image 变小的办法

    https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/ https://medium.com/sciforce/st ...

  9. python 浅拷贝与深拷贝

    赋值引用 >>> a= {1:[1,2]}>>> b = a>>> b[2]=3>>> b {1: [1, 2], 2: 3} ...

  10. Goby漏洞发布 | 0day NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞【已验证】

    漏洞名称:NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞 English Name:NACOS /nacos/v1/cs/ops/data/removal ...