新增三种部署方式(原有 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: 四种部署方式对比文档
112 lines
2.9 KiB
YAML
112 lines
2.9 KiB
YAML
# redis.yaml — Redis 7 缓存 (StatefulSet + Service + 持久化卷)
|
|
# ----------------------------------------------------------------------------
|
|
# 组件:
|
|
# - redis-headless (Headless Service): StatefulSet 稳定标识 redis-0
|
|
# - redis (ClusterIP Service): 供后端以 redis:6379 连接
|
|
# - redis (StatefulSet): 单实例 Redis 7,无密码,db 0
|
|
# 持久化: volumeClaimTemplates 2Gi + AOF/RDB 落盘
|
|
#
|
|
# 部署: kubectl apply -f redis.yaml
|
|
# ----------------------------------------------------------------------------
|
|
---
|
|
# Headless Service — StatefulSet 稳定标识
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: redis-headless
|
|
namespace: devops
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
app.kubernetes.io/component: cache
|
|
spec:
|
|
clusterIP: None
|
|
selector:
|
|
app.kubernetes.io/name: redis
|
|
ports:
|
|
- name: redis
|
|
port: 6379
|
|
targetPort: 6379
|
|
---
|
|
# ClusterIP Service — 供应用连接
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: redis
|
|
namespace: devops
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
app.kubernetes.io/component: cache
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app.kubernetes.io/name: redis
|
|
ports:
|
|
- name: redis
|
|
port: 6379
|
|
targetPort: 6379
|
|
---
|
|
# StatefulSet
|
|
apiVersion: apps/v1
|
|
kind: StatefulSet
|
|
metadata:
|
|
name: redis
|
|
namespace: devops
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
app.kubernetes.io/component: cache
|
|
spec:
|
|
serviceName: redis-headless
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: redis
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
containers:
|
|
- name: redis
|
|
image: redis:7-alpine
|
|
imagePullPolicy: IfNotPresent
|
|
command: ["redis-server"]
|
|
args:
|
|
- --appendonly yes # 开启 AOF
|
|
- --save 60 1000 # RDB: 60s 内 1000 次变更快照
|
|
- --databases 1 # 仅使用 db 0
|
|
- --maxmemory 256mb
|
|
- --maxmemory-policy allkeys-lru
|
|
ports:
|
|
- name: redis
|
|
containerPort: 6379
|
|
livenessProbe:
|
|
exec:
|
|
command: ["redis-cli", "ping"]
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 10
|
|
readinessProbe:
|
|
exec:
|
|
command: ["redis-cli", "ping"]
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 10
|
|
resources:
|
|
requests:
|
|
cpu: 50m
|
|
memory: 128Mi
|
|
limits:
|
|
cpu: 250m
|
|
memory: 256Mi
|
|
volumeMounts:
|
|
- name: data
|
|
mountPath: /data
|
|
# ---- 持久化卷 (2Gi) ----
|
|
volumeClaimTemplates:
|
|
- metadata:
|
|
name: data
|
|
spec:
|
|
accessModes: ["ReadWriteOnce"]
|
|
resources:
|
|
requests:
|
|
storage: 2Gi
|
|
# storageClassName: standard # 按集群实际 StorageClass 调整
|