Files
aiops/deploy/k8s/redis.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

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 调整