适用于k3s的通用自动部署脚本方案

Posted by Forgus on 2026-03-25

概述

一个运行在 k3s master 节点上的通用部署脚本,支持多项目、多子应用的自动构建镜像和部署。

核心特性

  • 单脚本参数驱动,支持 -p/--project-a/--app-t/--tag 等参数
  • 自动识别项目类型(java/node/static/go/python)
  • 使用 docker buildx 构建 multi-arch 镜像(linux/amd64, linux/arm64)
  • 动态生成 K8s Deployment + Service YAML
  • 推送到本地 Zot Registry(192.168.2.40:30500)
  • 部署到 k3s 集群

使用方式

1
2
3
./deploy.sh -p text-reader -a backend -t v1.0.0
./deploy.sh -p sample-app -a app -t latest
./deploy.sh -p text-reader -a admin-frontend -t v1.0.0 --port 80 --replicas 1

架构模块

  1. 参数解析 - 命令行参数校验
  2. 项目探测 - 识别技术栈、构建方式
  3. 镜像构建 - docker buildx multi-arch
  4. K8s配置生成 - 动态生成 Deployment + Service
  5. 部署执行 - kubectl apply
  6. 状态检查 - 验证 pod 运行状态

支持的项目类型

类型 构建方式 Dockerfile基础
java Maven/Gradle eclipse-temurin:17-jre
node npm/pnpm/yarn + Vite node:20-alpine → nginx:alpine
static nginx:alpine
go go build alpine
python pip python:3.11-slim

K8s 配置生成规则

  • Deployment: 根据类型生成容器配置、资源限制、副本数
  • Service: NodePort 模式(端口范围 30000-32767)
  • 支持 --node-selector 指定调度节点
  • 支持 --env-file 注入环境变量

镜像仓库

  • 地址: 192.168.2.40:30500
  • 命名: {registry}/{project}-{app}:{tag}