云原生 | Kubevela应用一键发布,了解一下


Cloud Native
ESG服务BU云原生交付中心、云基地
在云原生上的尝试、调研与分享
Kubevela
一键发布 应用分析
本期我们将介绍如何通过使用kubevela的addon插件功能,实现一键启动应用。
本次实验采用的应用为yao,yao 是一个开源的高性能应用引擎,用以快速生成业务系统、网站/APP API 接口、管理后台、自建低代码平台等。
下面附上相关地址:
addon yao gitlab地址:
https://newgitlab.digitalchina.com/wuhan/ebg_cn/kube-addon/tree/master/local-addon s/yao
yao 官网地址:
https://yaoapps.com/
话不多说,下面就开始吧~
生成系统
根据官方文档yao生成一个简单的系统需要一下几步:
# 1
安装yao命令行
在Linux或MacOS系统中执行curl命令获取安装脚本并执行:
curl -fsSL https://website.yaoapps.com/install.sh | bash
# 2
初始化项目
创建指定的目录并进入,通过init命令初始化项目:
mkdir /data/app
cd /data/app
yao init
# 3
创建数据表初始化菜单
yao migrate //在项目的根目录下运行及前一步创建的/data/app
yao run flows.setmenu //初始化菜单
# 4
运行项目
yao start //在项目的根目录下运行
转换为Addon
将其转换为addon的实现的要点分别有以下几点:
-
具有yao命令行的镜像;
-
在试用yao镜像生成的容器中初始化项目运行项目
-
将yao生成的系统服务端口映射到宿主机上;
根据以上几点要求我们分别实现:
# 1
选用具有yao命令行的镜像
首先yao官方提供了具有yao命令行的镜像 yaoapp/yao:0.10.1-amd64-dev
同时我们也可以选择试用其他的适配自己实验环境的镜像。
# 2
运行项目初始化命令
其次需要在容器中运行项目初始化的命令,这里我选择提前准备好shell脚本然后通过k8s中的configMap资源挂载到容器中执行。
# 3
端口映射到宿主机
最后yao的服务会默认监听5099端口,所以这里选择试用k8s中的NodePort Service来将端口映射到集群。
当然我们也可以通过修改环境变量的方式来更改yao生成的系统的配置。
addon代码分析
/ addon目录结构
yao-service.yaml
用来保存yao服务的启动脚本,并存储在configMap中。
apiVersion: v1
kind: ConfigMap
metadata:
name: http-configmap
namespace: default
data:
services.sh: |
#!/bin/bash
cd /data/app
yao init
yao migrate
yao run flows.setmenu
yao start
yao-service.yaml
创建yao service将pod 的端口代理到宿主机的对应端口上
apiVersion: v1
kind: Service
metadata:
namespace: default
name: yao-service
spec:
type: NodePort
selector:
app: yao-service
ports:
- port: 5099
targetPort: 5099
nodePort: 32099
yao.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: http-configmap
namespace: default
data:
services.sh: |
#!/bin/bash
cd /data/app
yao init
yao migrate
yao run flows.setmenu
yao start
yao服务的deployment,用来部署yao镜像,同时创建数据卷,并在生成的容器中挂载卷。
这里的卷有两个:
一个是用来保存yao服务本身的数据的yao-volume卷,这个卷使用服务器本地的文件系统来生成。
另一个卷是使用k8s的configMap,将之前生成的configMap中的启动脚本挂载到容器的对应位置
command参数是启动对应脚本来初始化并启动yao服务。
最后我们可以将yao的代码上传到GitHub、gitlab等服务之上并通过kubevela中添加仓库来获取yao的addon代码来实现一键启动。
那么以上就是
全部内容了,
相信一定能对你有所帮助~
本期作者
go开发工程师 冯康

