项目一:golang+kubernetes实现白屏化操作k8s资源
本项目是一个简单易用的K8S管理平台,可以实现k8s资源的图形化界面管理,采用golang语言编写,使用了gin+gorm框架。
·
1、项目介绍
1.1.项目资料
- 本项目是一个简单易用的K8S管理平台,可以实现k8s资源的图形化界面管理,采用golang语言编写,使用了gin+gorm框架。更多详细介绍请见github仓库
- 后端:
- 基于开源项目开发,源仓库地址:https://github.com/noovertime7/kubemanage
- 本人fork源仓库,编写详细注释,仓库地址:https://github.com/wantong0305/kubemanage.git
- 前端:
- https://github.com/noovertime7/kubemanage-web
- 项目目录+代码结构思维导图,共享腾讯文档地址:https://docs.qq.com/mind/DTFBVT1FnbE1iV1JX
2、后端项目部署
2.1.注意事项
- 本项目用到的一些库,无法在windows 386下编译,只能在linux下编译,所以我们采用docker打包镜像,然后运行容器的方式运行
2.2.解决项目依赖
- 本项目依赖 一个mysql数据库 + 一个k8s环境,因此需要先准备好环境
2.2.1.docker运行一个mysql
docker run -d -p 3306:3306 --name mysql3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
2.2.2.mysql中创建数据库
CREATE DATABASE kubemanage;
3、启动kubemanage项目
-
进入到linux机器中
-
git clone https://github.com/wantong0305/kubemanage.git
-
编写dockerfile(目前已经在项目里写好了,这一步可以跳过),dockerfile文件如下:
# 指定基础的go编译镜像 FROM golang:alpine as build # 指定环境变量 ENV GOPROXY=https://goproxy.cn \ GO111MODULE=on \ CGO_ENABLED=0 \ GOOS=linux \ GOARCH=amd64 \ HOME=/root # 指定工作空间目录,会自动cd到这个目录 WORKDIR /build # 把项目的依赖配置文件拷贝到容器中,并下载依赖 COPY go.mod . COPY go.sum . RUN go mod download # 把项目的其他所有文件拷贝到容器中 COPY . . # 编译成可执行二进制文件 RUN go build -o app ./cmd/main.go # 指定新的运行环境,最终的运行会基于这个坏境,使得最终的镜像非常小 FROM scratch as deploy # 把编译环境中打包好的可执行文件和配置文件拷贝到当前镜像 COPY --from=build /build/app / CMD ["/app"]
-
cd 到项目目录下,编译打包镜像:
- 示例:给镜像取名kubemanage,版本号是1.0.5
docker build -t kubemanage:1.0.5 .
-
使用镜像创建容器
- 记得设置环境变量HOME,用于代码中拼接kubeconfig路径
- 将外部系统的/root/.kube/config文件,挂载到容器内部,才可以连接到k8s集群中去
- 端口号要使用恰当
docker run -d --name kube-manage -p 6180:6180 --env HOME=/root --mount type=bind,source=/root/.kube/config,target=/root/.kube/config kubemanage:1.0.5
-
这样后端项目就跑起来了,监听6180端口。
3、前端项目部署
- 前端目前包括两个版本,新版本目前仍在开发中,我们使用的是旧版本。部署步骤如下:
git clone https://github.com/noovertime7/kubemanage-web.git cd kubemanage-web npm install npm run serve
- 前端项目启动端口为5240,前端启动后,浏览器访问http://127.0.0.1:5240/ 即可体验项目
4、项目用到的框架
- github.com/spf13/cobra
- 命令行工具框架
- github.com/spf13/viper
- 配置处理框架
- 学习博客:https://www.liwenzhou.com/posts/Go/viper/
- github.com/fsnotify/fsnotify
- 文件系统通知库,用于监听文件系统事件,配合viper实现配置的热更新
- go.uber.org/zap
- 高性能日志框架
- 学习博客1:https://www.liwenzhou.com/posts/Go/zap/
- 学习博客2:https://www.cnblogs.com/jiujuan/p/17304844.html
- github.com/natefinch/lumberjack
- 配合zap实现日志切割的库
- github.com/mitchellh/mapstructure
- map结构序列化框架
- github.com/gin-gonic/gin
- gin框架,轻量级web框架
- github.com/gin-contrib/cors
- gin框架官方维护的一个中间件库,提供了一个处理跨域请求的中间件
- github.com/go-gorm/gorm
- orm框架
- 中文官方文档(文档很健全):https://gorm.io/zh_CN/docs/index.html
- github.com/satori/go.uuid
- go.uuid提供了uuid的纯go实现,可以生成和解析uuid
- golang.org/x/time/rate
- go标准扩展包的一部分,实现了基于令牌桶算法的限速器
- gopkg.in/go-playground/validator.v9
- 常用的验证器库,用于对请求参数进行数据验证,提供了多种验证器和验证规则
- 其中,gopkg.in/go-playground/validator.v9/translations 提供字段验证发生错误时的国际化翻译功能。通过使用这个包,可以方便地将验证器返回的错误信息翻译成不同的语言
- github.com/dgrijalva/jwt-go
- go语言的 一个JWT(JSON Web Token)库
更多推荐
已为社区贡献3条内容
所有评论(0)