项目一:golang+kubernetes实现白屏化操作k8s资源

538 阅读3分钟

1、项目介绍

1.1.项目资料

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 github.com/wantong0305…

  • 编写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
  • github.com/fsnotify/fsnotify
    • 文件系统通知库,用于监听文件系统事件,配合viper实现配置的热更新
  • go.uber.org/zap
  • 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
  • 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)库