新增三种部署方式(原有 docker-compose 不受影响): 1. Docker embed 单容器 (docker-compose.embed.yml): - go:embed 前端嵌入后端二进制 - 不需要 nginx 容器,3容器→2容器 - 镜像仅 54.8MB (vs 原来 1.16GB) - 用法: make docker-embed 2. 二进制部署 (deploy/binary/): - make build-binary 生成单二进制 - install.sh 自动创建 systemd 服务 - 适合无 Docker 环境 - 用法: scp aiops + install.sh, bash install.sh install 3. Kubernetes 部署 (deploy/k8s/): - devops 命名空间全套 yaml - MySQL StatefulSet + Redis StatefulSet + Backend Deployment - ConfigMap + Secret + Ingress - 用法: kubectl apply -f deploy/k8s/ 核心改动: - backend/cmd/embed.go: go:embed 前端 + SPA fallback 路由 - backend/Dockerfile.embed: 四阶段构建 (前端→后端embed→agent→runtime) - Makefile: build-binary + docker-embed 目标 - deploy/README.md: 四种部署方式对比文档
137 lines
3.8 KiB
YAML
137 lines
3.8 KiB
YAML
# mysql.yaml — MySQL 8.0 数据库 (StatefulSet + Service + 持久化卷)
|
||
# ----------------------------------------------------------------------------
|
||
# 组件:
|
||
# - mysql-headless (Headless Service): 为 StatefulSet 提供稳定网络标识 mysql-0
|
||
# - mysql (ClusterIP Service): 供后端以 mysql:3306 连接
|
||
# - mysql (StatefulSet): 单实例 MySQL 8.0
|
||
# 账号: 用户 aiops / 密码 aiops_pass_2026 / 数据库 aiops (密码来自 aiops-secret)
|
||
# 持久化: volumeClaimTemplates 8Gi (依赖集群 StorageClass 动态供应)
|
||
#
|
||
# 部署: kubectl apply -f mysql.yaml
|
||
# ----------------------------------------------------------------------------
|
||
---
|
||
# Headless Service — StatefulSet 稳定标识
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: mysql-headless
|
||
namespace: devops
|
||
labels:
|
||
app.kubernetes.io/name: mysql
|
||
app.kubernetes.io/component: database
|
||
spec:
|
||
clusterIP: None
|
||
selector:
|
||
app.kubernetes.io/name: mysql
|
||
ports:
|
||
- name: mysql
|
||
port: 3306
|
||
targetPort: 3306
|
||
---
|
||
# ClusterIP Service — 供应用连接
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: mysql
|
||
namespace: devops
|
||
labels:
|
||
app.kubernetes.io/name: mysql
|
||
app.kubernetes.io/component: database
|
||
spec:
|
||
type: ClusterIP
|
||
selector:
|
||
app.kubernetes.io/name: mysql
|
||
ports:
|
||
- name: mysql
|
||
port: 3306
|
||
targetPort: 3306
|
||
---
|
||
# StatefulSet
|
||
apiVersion: apps/v1
|
||
kind: StatefulSet
|
||
metadata:
|
||
name: mysql
|
||
namespace: devops
|
||
labels:
|
||
app.kubernetes.io/name: mysql
|
||
app.kubernetes.io/component: database
|
||
spec:
|
||
serviceName: mysql-headless
|
||
replicas: 1
|
||
selector:
|
||
matchLabels:
|
||
app.kubernetes.io/name: mysql
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app.kubernetes.io/name: mysql
|
||
spec:
|
||
containers:
|
||
- name: mysql
|
||
image: mysql:8.0
|
||
imagePullPolicy: IfNotPresent
|
||
env:
|
||
- name: MYSQL_ROOT_PASSWORD
|
||
valueFrom:
|
||
secretKeyRef:
|
||
name: aiops-secret
|
||
key: mysql-root-password
|
||
- name: MYSQL_DATABASE
|
||
value: aiops
|
||
- name: MYSQL_USER
|
||
value: aiops
|
||
- name: MYSQL_PASSWORD
|
||
valueFrom:
|
||
secretKeyRef:
|
||
name: aiops-secret
|
||
key: database-password
|
||
- name: TZ
|
||
value: Asia/Shanghai
|
||
args:
|
||
# 字符集
|
||
- --character-set-server=utf8mb4
|
||
- --collation-server=utf8mb4_unicode_ci
|
||
# 兼容旧客户端认证方式(8.0 默认 caching_sha2_password)
|
||
- --default-authentication-plugin=mysql_native_password
|
||
ports:
|
||
- name: mysql
|
||
containerPort: 3306
|
||
livenessProbe:
|
||
exec:
|
||
command:
|
||
- sh
|
||
- -c
|
||
- 'mysqladmin ping -h 127.0.0.1 -uroot -p"$MYSQL_ROOT_PASSWORD"'
|
||
initialDelaySeconds: 30
|
||
periodSeconds: 10
|
||
timeoutSeconds: 5
|
||
readinessProbe:
|
||
exec:
|
||
command:
|
||
- sh
|
||
- -c
|
||
- 'mysqladmin ping -h 127.0.0.1 -uroot -p"$MYSQL_ROOT_PASSWORD"'
|
||
initialDelaySeconds: 10
|
||
periodSeconds: 10
|
||
timeoutSeconds: 5
|
||
resources:
|
||
requests:
|
||
cpu: 250m
|
||
memory: 1Gi
|
||
limits:
|
||
cpu: "1"
|
||
memory: 2Gi
|
||
volumeMounts:
|
||
- name: data
|
||
mountPath: /var/lib/mysql
|
||
# ---- 持久化卷 (8Gi) ----
|
||
volumeClaimTemplates:
|
||
- metadata:
|
||
name: data
|
||
spec:
|
||
accessModes: ["ReadWriteOnce"]
|
||
resources:
|
||
requests:
|
||
storage: 8Gi
|
||
# storageClassName: standard # 按集群实际 StorageClass 调整,留空使用默认
|