spring-ai-alibaba-admin/deploy/kubernetes/README.md
本目录包含 Spring AI Alibaba Admin 项目的 Kubernetes 部署资源文件。
deploy/kubernetes
├── namespace.yaml # 命名空间定义
├── ingress.yaml # Ingress 配置(前端访问入口)
├── middleware/ # 中间件服务
│ ├── mysql/ # MySQL 数据库
│ ├── elasticsearch/ # Elasticsearch
│ ├── kibana/ # Kibana
│ ├── redis/ # Redis
│ ├── nacos/ # Nacos 配置中心
│ ├── rocketmq/ # RocketMQ 消息队列
│ └── loongcollector/ # LoongCollector 可观测性
├── frontend/ # 前端服务
└── backend/ # 后端服务
首先需要构建前端和后端的 Docker 镜像:
make help
make build-image
Tips: 如果需要推送到私有仓库,查看
make image-push。
编辑以下文件,将镜像名称替换为你的镜像仓库地址:
deploy/frontend/frontend-deployment.yamldeploy/backend/backend-deployment.yamlkubectl apply -f deploy/namespace.yaml
必须在部署 MySQL 之前执行,这样 MySQL 首次启动时才能自动执行初始化脚本:
# 从项目根目录执行
kubectl create configmap mysql-init-scripts \
--from-file=admin-schema.sql=docker/middleware/init/mysql/admin-schema.sql \
--from-file=agentscope-schema.sql=docker/middleware/init/mysql/agentscope-schema.sql \
-n spring-ai-admin \
--dry-run=client -o yaml | kubectl apply -f -
按顺序部署中间件服务:
# MySQL(需要先部署,其他服务依赖)
kubectl apply -f deploy/middleware/mysql/
# Elasticsearch
kubectl apply -f deploy/middleware/elasticsearch/
# Kibana(依赖 Elasticsearch)
kubectl apply -f deploy/middleware/kibana/
# Redis
kubectl apply -f deploy/middleware/redis/
# Nacos
kubectl apply -f deploy/middleware/nacos/
# RocketMQ
kubectl apply -f deploy/middleware/rocketmq/
# LoongCollector
kubectl apply -f deploy/middleware/loongcollector/
# 检查所有 Pod 状态
kubectl get pods -n spring-ai-admin
# 等待所有中间件服务就绪(特别是 MySQL 和 Elasticsearch)
kubectl wait --for=condition=ready pod -l app=mysql -n spring-ai-admin --timeout=300s
kubectl wait --for=condition=ready pod -l app=elasticsearch -n spring-ai-admin --timeout=300s
必须在部署 MySQL 之前创建 ConfigMap,这样 MySQL 容器首次启动时才能自动执行初始化脚本。
MySQL deployment 会将 mysql-init-scripts ConfigMap 挂载到 /docker-entrypoint-initdb.d 目录,MySQL 官方镜像会在首次初始化数据库时自动执行该目录下的所有 .sql 文件。
# 从项目根目录执行(重要:必须在部署 MySQL 之前执行)
kubectl create configmap mysql-init-scripts \
--from-file=admin-schema.sql=docker/middleware/init/mysql/admin-schema.sql \
--from-file=agentscope-schema.sql=docker/middleware/init/mysql/agentscope-schema.sql \
-n spring-ai-admin \
--dry-run=client -o yaml | kubectl apply -f -
注意:
deploy.sh 脚本,这一步会自动处理# 部署后端服务
kubectl apply -f deploy/backend/
# 部署前端服务
kubectl apply -f deploy/frontend/
编辑 deploy/ingress.yaml,将 spring-ai-admin.local 替换为你的实际域名,然后部署:
kubectl apply -f deploy/ingress.yaml
# 查看所有服务状态
kubectl get all -n spring-ai-admin
# 查看 Ingress
kubectl get ingress -n spring-ai-admin
# 查看 Pod 日志(如有问题)
kubectl logs -f deployment/spring-ai-admin-server -n spring-ai-admin
kubectl logs -f deployment/frontend -n spring-ai-admin
后端服务的环境变量在 deploy/backend/backend-deployment.yaml 中配置。所有配置都支持通过环境变量覆盖,默认值适用于本地开发环境。
主要配置项:
SPRING_DATASOURCE_URL, SPRING_DATASOURCE_USERNAME, SPRING_DATASOURCE_PASSWORDSPRING_REDIS_HOST, SPRING_REDIS_PORT, SPRING_REDIS_DATABASESPRING_ELASTICSEARCH_URIS, SPRING_ELASTICSEARCH_URLNACOS_SERVER_ADDRROCKETMQ_ENDPOINTS, ROCKETMQ_NAME_SERVER, ROCKETMQ_DOCUMENT_INDEX_TOPIC, ROCKETMQ_DOCUMENT_INDEX_GROUPMANAGEMENT_OTLP_TRACING_EXPORT_ENDPOINT详细配置说明请参考:spring-ai-alibaba-admin-server-start/CONFIGURATION.md
所有需要持久化的服务都使用 PersistentVolumeClaim。确保你的集群已配置 StorageClass。
所有服务的资源请求和限制已在配置文件中定义,可根据实际需求调整。
可以创建一个部署脚本简化部署过程:
#!/bin/bash
set -e
echo "Creating namespace..."
kubectl apply -f deploy/namespace.yaml
echo "Deploying middleware..."
kubectl apply -f deploy/middleware/mysql/
kubectl apply -f deploy/middleware/elasticsearch/
kubectl apply -f deploy/middleware/kibana/
kubectl apply -f deploy/middleware/redis/
kubectl apply -f deploy/middleware/nacos/
kubectl apply -f deploy/middleware/rocketmq/
kubectl apply -f deploy/middleware/loongcollector/
echo "Waiting for middleware to be ready..."
kubectl wait --for=condition=ready pod -l app=mysql -n spring-ai-admin --timeout=300s || true
kubectl wait --for=condition=ready pod -l app=elasticsearch -n spring-ai-admin --timeout=300s || true
echo "Deploying applications..."
kubectl apply -f deploy/backend/
kubectl apply -f deploy/frontend/
echo "Deploying ingress..."
kubectl apply -f deploy/ingress.yaml
echo "Deployment completed!"
kubectl get all -n spring-ai-admin
# 删除所有资源
kubectl delete -f deploy/ingress.yaml
kubectl delete -f deploy/frontend/
kubectl delete -f deploy/backend/
kubectl delete -f deploy/middleware/
kubectl delete -f deploy/namespace.yaml
kubectl describe pod <pod-name> -n spring-ai-admin
kubectl logs <pod-name> -n spring-ai-admin
kubectl logs -f deployment/<deployment-name> -n spring-ai-admin
kubectl get events -n spring-ai-admin --sort-by='.lastTimestamp'
kubectl exec -it <pod-name> -n spring-ai-admin -- /bin/sh