导语
KusionStack 是面向 Kubernetes 云原生场景的 IaC 配置代码化实际的开源一站式可编程协定栈。其根本思维是让「利用方 + 平台方」的同学可能独特基于 IaC 构建的 Konfig 模型库同一立体进行 DevOps 协同工作。明天咱们和大家分享一个好玩的 Go 代码城市利用,以及 KusionStack 是如何一键将其部署到 K8s 云原生环境的。
KusionStack 我的项目主仓库:
https://github.com/KusionStack/kusion
PART. 1
什么是代码城市(CodeCity)
CodeCity 代码城市是瑞典工程师 Richard Wettel 开发的创意利用,能够通过相似数字城市的视觉模式展现和度量代码的复杂性。其成果如图:
在 3D 模式展现的代码城市中的核心地标十分直观——最大、最高的修建总是容易追踪的焦点。因为这个极具特色的创意,CodeCity 取得了 2008 年的 ”Riconoscimento ated-ICT Ticino” 一等奖,同时也能够收费用于非商业的科研和学习用处。
明天要展现的 GoCity 是 Go 语言版本的代码城市,咱们能够通过这种形式评估 KusionStack 等 Go 语言我的项目的代码复杂度。也能够通过在线的 GoCity 查看 KusionStack/kusion 仓库的展现成果。
PART. 2
本地执行 GO 代码城市
之前的 GoCity 还是在 2021 年 10 月更新的,在最新的 Docker 和 Go1.18 环境有一些小问题,还好 KusionStack 相干同学为其提交了补丁进行了修复(_这也是开源我的项目的魅力所在,也心愿开源社区小伙伴可能参加 KusionStack 的共建_),当初能够执行以下命令装置:go install github.com/rodrigo-brito/gocity@latest。而后通过 gocity open 关上 Github 或本地仓库。
– 比方关上本地的 KusionStack/kusion 仓库
– 而后浏览器关上对应页面
本地执行一切正常!
PART. 3
Go 代码城市一键上云
作为一个相似数字城市的利用,在云原生、元宇宙等背景下,部署上云也是一个天然的需要。同时咱们也心愿通过 GoCity 展现下 KusionStack 的根本用法。在 GoCity 上云之前,咱们先尝试如何本地执行该利用。
相应的容器镜像曾经推送到 Docker Hubhttps://hub.docker.com/r/yuanhao1223/gocity,运行命令如下:
运行胜利后,可关上本地地址 http://localhost:4000/ 查看 Go 我的项目的数字城市 3D 成果。
容器化胜利后,当初筹备上云。从本地执行容器的形式能够看出,想要在 Kubernetes 部署,至多须要 Deployment 和 Service 两种资源。其中 Deployment 用来部署 Go 代码城市,Service 裸露端口,拜访无状态利用。
首先参考装置文档 https://kusionstack.io/docs/user_docs/getting-started/install/ 装置好本地 Kusion 命令,而后通过 kusion init 的在线仓库提供了相应的模板。Kusion 命令反对一键初始化配置:
输入相似以下信息:
为了不便展现,Kusion 模板曾经内置了 CodeCity 的例子。其中 code-city 模板依赖 konfig 大库中抽象化的前 / 后端模型,code-city 模板无依赖,能够自闭环。咱们抉择后者:
初始化过程中,指定了容器镜像,并且容器端口和 Service 端口均为 4000,当初进入配置目录,目录构造如下:
– 残缺的代码能够参考:
https://github.com/KusionStack/kusion-templates/tree/main/code-city-demo
为了不便本地测试,能够通过 minikube start 本地启动 MiniKube 服务。而后命令行模式切换到 code-city-kcl 目录,而后执行 kusion apply 命令失效配置。到此,开始正式上云:
kusion apply main.k
输入相似于:
查看 Deployment 的状态:
输入相似于:
应用 kubectl 端口转发:
拜访本地地址 https://localhost:4000/),点击 Example 处的链接“KusionStack/kusion”,能够看到和本地执行一样的成果:
至此,实现了 Go 代码城市的一键上云。有趣味的读者,能够基于模型库 Konfig,抉择其余模板,摸索 KusionStack 反对的其它运维场景,上面咱们将摸索代码城市外部的原理。
PART. 4
意识数字城市中的修建含意
说实话代码城市第一眼看上去更像一个电路板,要了解其中的含意须要理解几个根本的参数映射关系,如预览页面的右下角图所示:
以上的对应关系在其官网文档中也阐明,如下图所示:
其中高空的粉红色示意 Go 包对应的目录(_因为包的依赖关系可能再产生叠加_),灰色示意目录外部的文件,而蓝色示意构造体。其中示意文件的灰色建筑物的大小即文件的大小,示意构造体的蓝色建筑物的高度即办法的数量,建筑物的长宽示意构造体中属性的数量,蓝色色彩的深度示意相干代码行数。
咱们能够抉择 DiffOptions 构造体对应建筑物查看其相干的属性参数:
能够看到该构造体中有 15 个属性、3 个办法、共 156 行代码。通过点击其中的“Github 链接”按钮能够跳转到对应的地位:
因而通过这种形式咱们能够很容易查看全局有无特地高大的修建,从而判断是否存在某些文件和构造体的代码须要改良。能够说 GoCity 是一个很乏味的代码剖析工具,甚至能够集成到 Github PR 代码评审流程中。
PART. 5
剖析 GoCity 的代码架构
GoCity 代码架构次要分为代码数据提取和前端模型展现两块,如图所示:
首先 Codebase 示意要展现的代码,通过 Git Service 被拉取,而后通过 Parser 和 Position 服务提取失去对应的参数信息,而后通过前端展现。Go 语言代码次要集中在模型数据提取局部,而前端展现次要为 JS 等实现。前端展现资源文件通过 embed.FS 内嵌到程序中,GoCity 命令启动 Web 服务展现页面。代码架构比拟清晰,也是一个比拟现实可用于 Go 语言学习的开源我的项目。
PART. 6
瞻望
咱们通过 KusionStack 的形式,配合大量的 KCL 配置代码,实现了 Go 代码城市一键上云的操作。尽管云上的 Go 代码城市和本地的版本看不出什么区别,然而云上程序的整个生命周期治理将大为不同。在前面的例子中咱们将展现如何通过 KusionStack 联合 KCL 配置语言进行 IaC 形式的云原生利用的运维操作。感激关注🙏
参考链接
● https://github.com/KusionStack/kusion
● https://github.com/KusionStack/examples
● https://github.com/rodrigo-brito/gocity
● https://wettel.github.io/codecity.html
理解更多 …
KusionStack Star 一下✨:
https://github.com/KusionStack/Kusion
本周举荐浏览
KusionStack 在蚂蚁团体的摸索实际 (上)
Kusion 模型库和工具链的摸索实际
精彩回顾|KusionStack
历时两年,突破“隔行如隔山”窘境
欢送扫码关注咱们的公众号