Files
aiops/deploy/k8s/mysql.yaml
T
Logan 4631b02f13 feat: 三种部署方式 — embed单容器 + 二进制部署 + K8s
新增三种部署方式(原有 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: 四种部署方式对比文档
2026-06-21 14:20:29 +08:00

137 lines
3.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 调整,留空使用默认