Skip to content

izerui/k8s-docker-devops

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

k8s-docker-devops

基于 Spring Boot 的 Kubernetes 容器化部署平台,支持多集群部署、镜像构建、模板渲染等功能。

功能特性

  • 多集群部署: 支持 Local、AWS EKS、AWS XJP、阿里云、华为云、火山引擎、天翼云等 K8s 集群
  • 多种部署类型: 支持 Jar 包部署、静态资源 (HTML) 部署
  • 镜像构建: 支持 Jib 自动构建 Docker 镜像并推送到镜像仓库
  • 模板渲染: 支持 Handlebars 模板动态生成 K8s 配置文件 (Deployment、Service、Ingress 等)
  • 通知集成: 支持企业微信发布成功/失败通知
  • CI/CD 集成: 提供 RESTful API,可与 Jenkins 等 CI 工具集成
  • 权限控制: 支持企业微信消息验证权限

支持的集群

集群名称 说明
local 本地 K8s 集群
aws AWS EKS (中国区)
awsxjp AWS EKS (日本区)
aliyun 阿里云 ACK
huawei 华为云 CCE
volc 火山引擎 VKE
ctyun 天翼云 CCE

快速开始

环境要求

  • Java 17+
  • Maven 3.6+
  • Docker (可选,用于本地构建镜像)
  • Redis (用于企业微信 token 存储)

配置说明

复制 src/main/resources/application.propertiesapplication-local.properties 并修改配置:

# 服务配置
server.port=8081
spring.application.name=devops

# 镜像仓库配置
devops.local-registry.group=YOUR_REGISTRY_DOMAIN
devops.local-registry.username=YOUR_USERNAME
devops.local-registry.password=YOUR_PASSWORD

# AWS 配置 (如使用 AWS 集群)
devops.aws.app-id=YOUR_AWS_ACCESS_KEY_ID
devops.aws.app-secret=YOUR_AWS_SECRET_ACCESS_KEY
devops.aws.eks-name=YOUR_EKS_NAME
devops.aws.eks-end-point=YOUR_EKS_ENDPOINT

# Git 仓库配置
devops.git.url=YOUR_GIT_URL
devops.git.path=/path/to/kubernetes
devops.git.username=YOUR_GIT_USERNAME
devops.git.password=YOUR_GIT_PASSWORD

# Redis 配置
spring.redis.host=YOUR_REDIS_HOST
spring.redis.port=6379

# 企业微信配置
work.weixin.callback-url=YOUR_CALLBACK_URL
work.weixin.configs[0].corp-id=YOUR_CORP_ID
work.weixin.configs[0].corp-secret=YOUR_CORP_SECRET
work.weixin.configs[0].agent-id=YOUR_AGENT_ID

构建运行

# 打包
mvn clean package

# 运行
java -jar target/k8s-docker-devops-exec.jar

API 接口

部署服务

POST /deploy

参数说明:

参数 必填 说明
app 应用名称
version 版本号
type 部署类型: jar / html
cluster 集群名称: local/aws/aliyun/huawei 等
space 命名空间
port 容器端口
file 部署文件 (jar 包或静态资源 zip)
arguments 启动参数

请求示例 (curl):

curl -X POST "http://localhost:8081/deploy" \
  -H "accept: */*" \
  -H "Content-Type: multipart/form-data" \
  -F "app=my-app" \
  -F "version=1.0.0" \
  -F "type=jar" \
  -F "port=8080" \
  -F "cluster=local" \
  -F "space=dev" \
  -F "file=@./target/my-app.jar"

模板渲染测试

POST /yaml

用于测试 K8s 模板渲染,参数同 /deploy,不执行实际部署。

K8s 模板

项目使用 Handlebars 模板引擎,支持自定义 K8s 资源配置。

模板目录: src/test/resources/templates/

部署流程

系统处理请求时会按顺序执行以下处理器:

  1. PermissionCheckHandler - 权限检查
  2. JarHandler / HtmlHandler - 构建 Docker 镜像并推送
  3. K8sHandler - 生成并应用 K8s 配置
  4. SuccessNotifyHandler - 发送企业微信通知

模板变量

模板中可使用以下变量:

变量 说明 示例值
APP_NAME 应用名称 my-app
APP_VERSION 版本号 1.0.0
APP_PORT 容器端口 8080
NAME_SPACE 命名空间 dev
CLUSTER 集群名称 local
REPLICAS 副本数 3
REGISTRY_GROUP 镜像仓库地址 your-registry.com
SHORT_UUID 构建 UUID 短码 abc123xyz
TIME 构建时间 2024-01-01 12:00:00
FILE_NAME 上传文件名 app.jar
ISTIO 是否启用 Istio true/false

模板示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{APP_NAME}}-{{APP_VERSION}}
  namespace: {{NAME_SPACE}}
spec:
  replicas: {{REPLICAS}}
  selector:
    matchLabels:
      app: {{APP_NAME}}
  template:
    spec:
      containers:
        - name: {{APP_NAME}}
          image: {{REGISTRY_GROUP}}/{{NAME_SPACE}}/{{APP_NAME}}:{{SHORT_UUID}}
          ports:
            - containerPort: {{APP_PORT}}

镜像构建

使用 Docker

# 构建镜像
docker build -f Dockerfile -t devops .

# 推送镜像
docker tag devops YOUR_REGISTRY_DOMAIN/library/devops
docker push YOUR_REGISTRY_DOMAIN/library/devops

使用 Jib

mvn jib:build

目录结构

k8s-docker-devops/
├── src/main/java/com/github/izerui/devops/
│   ├── controller/      # REST API 控制器
│   ├── context/          # 配置上下文 (DevopsProperties, RequestContext 等)
│   ├── handler/          # 处理器链 (JarHandler, K8sHandler 等)
│   └── support/          # 集群实现、工具类
│       └── impl/         # 各集群具体实现
│           ├── LocalCluster.java
│           ├── AwsCluster.java
│           ├── AliyunCluster.java
│           ├── HuaweiCluster.java
│           ├── VolcCluster.java
│           └── CtyunCluster.java
├── src/main/resources/
│   └── application.properties  # 配置文件
├── src/test/
│   ├── java/             # 测试代码
│   └── resources/
│       ├── templates/    # K8s YAML 模板
│       └── handlebars/   # Handlebars 模板
└── target/               # 编译输出

处理器说明

系统采用责任链模式处理部署请求,主要处理器包括:

处理器 说明
PermissionCheckHandler 企业微信消息验证权限
JarHandler Jar 包镜像构建与推送
HtmlHandler 静态资源镜像构建与推送
K8sHandler K8s 资源配置生成与应用
SuccessNotifyHandler 企业微信发布通知

配置项详解

集群授权

devops.permission.authorize-cluster-names[0]=aws
devops.permission.authorize-cluster-names[1]=huawei
devops.permission.authorize-cluster-names[2]=aliyun

多镜像仓库配置

# 开发环境镜像仓库
devops.local-registry.group=YOUR_REGISTRY_DOMAIN
devops.local-registry.username=YOUR_USERNAME
devops.local-registry.password=YOUR_PASSWORD

# 生产环境镜像仓库
devops.prod-registry.group=YOUR_REGISTRY_DOMAIN
devops.prod-registry.username=YOUR_USERNAME
devops.prod-registry.password=YOUR_PASSWORD

集群通知配置

devops.cluster-notify.local=k8s-local
devops.cluster-notify.aws=k8s
devops.cluster-notify.huawei=k8s

许可证

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors