- 配置 Git Submodules 架构 - 添加 14 个子模块仓库 - 配置 .gitignore 排除构建产物和运行时数据 - 添加项目文档和配置文件 |
||
|---|---|---|
| .. | ||
| 00-init | ||
| 01-mysql | ||
| 02-redis | ||
| 03-nacos | ||
| 04-gateway | ||
| 05-nginx | ||
| 06-auth | ||
| 07-system | ||
| 08-gen | ||
| 09-job | ||
| 10-file | ||
| 11-monitor | ||
| 12-approval | ||
| 13-device | ||
| 14-airline | ||
| 15-task | ||
| 16-fms | ||
| 17-media | ||
| README.md | ||
README.md
Kubernetes 部署指南
概述
本配置将若依微服务系统部署到 Kubernetes 集群,采用单命名空间架构,所有服务运行在 ruoyi 命名空间中。
目录结构
k8s/
├── namespace.yaml # 命名空间
├── mysql-service.yaml # MySQL 服务
├── mysql-statefulset.yaml # MySQL 有状态部署
├── redis-service.yaml # Redis 服务
├── redis-statefulset.yaml # Redis 有状态部署
├── nacos-service.yaml # Nacos 服务
├── nacos-statefulset.yaml # Nacos 有状态部署
├── gateway-service.yaml # 网关服务
├── gateway-deployment.yaml # 网关部署
├── auth-service.yaml # 认证服务
├── auth-deployment.yaml # 认证部署
├── system-service.yaml # 系统模块服务
├── system-deployment.yaml # 系统模块部署
├── gen-service.yaml # 代码生成服务
├── gen-deployment.yaml # 代码生成部署
├── job-service.yaml # 定时任务服务
├── job-deployment.yaml # 定时任务部署
├── file-service.yaml # 文件服务
├── file-deployment.yaml # 文件部署
├── file-pvc.yaml # 文件存储卷
├── nginx-service.yaml # Nginx 服务
├── nginx-deployment.yaml # Nginx 部署
└── kustomization.yaml # Kustomize 配置
服务端口映射
| 服务 | 容器端口 | Service 名称 | 说明 |
|---|---|---|---|
| MySQL | 3306 | ruoyi-mysql | 数据库 |
| Redis | 6379 | ruoyi-redis | 缓存 |
| Nacos | 8848/9848/9849 | ruoyi-nacos | 注册中心 |
| Gateway | 8080 | ruoyi-gateway | 网关(NodePort 30080) |
| Auth | 9200 | ruoyi-auth | 认证服务 |
| System | 9201 | ruoyi-system | 系统模块 |
| Gen | 9202 | ruoyi-gen | 代码生成 |
| Job | 9203 | ruoyi-job | 定时任务 |
| File | 9300 | ruoyi-file | 文件服务 |
| Nginx | 80 | ruoyi-nginx | 前端(NodePort 30080) |
前置条件
1. 安装 Kubernetes 集群
选项 A: 使用 k3d(推荐)
# 安装 k3d
brew install k3d
# 创建集群
k3d cluster create ruoyi --servers 1 --agents 2
# 验证
kubectl get nodes
选项 B: 使用 minikube
# 安装 minikube
brew install minikube
# 启动集群
minikube start --driver=docker --cpus=4 --memory=8192
# 验证
kubectl get nodes
2. 准备镜像
确保以下镜像已构建并可用:
- mysql-runtime
- redis-runtime
- nacos-runtime
- gateway-runtime
- ruoyi-auth-runtime
- ruoyi-modules-system-runtime
- ruoyi-modules-gen-runtime
- ruoyi-modules-job-runtime
- ruoyi-modules-file-runtime
- nginx-runtime
部署步骤
一键部署所有服务
# 进入 k8s 目录
cd k8s
# 使用 kustomize 部署所有资源
kubectl apply -k .
# 查看部署状态
kubectl get pods -n ruoyi
kubectl get svc -n ruoyi
访问服务
由于 Kubernetes 的 NodePort 限制(30000-32767),访问方式如下:
# Nginx 前端(通过 NodePort 30080)
http://localhost:30080
# 或者使用端口转发访问原始端口
kubectl port-forward -n ruoyi svc/ruoyi-nginx 80:80
# 然后访问 http://localhost:80
常用管理命令
查看资源状态
# 查看所有 Pod
kubectl get pods -n ruoyi
# 查看所有 Service
kubectl get svc -n ruoyi
# 查看 PVC 状态
kubectl get pvc -n ruoyi
# 查看详细信息
kubectl describe pod <pod-name> -n ruoyi
查看日志
# 查看 Pod 日志
kubectl logs <pod-name> -n ruoyi
# 实时查看日志
kubectl logs -f <pod-name> -n ruoyi
# 查看前 100 行日志
kubectl logs --tail=100 <pod-name> -n ruoyi
删除资源
# 删除所有资源
kubectl delete -k .
# 删除特定 Pod
kubectl delete pod <pod-name> -n ruoyi
# 删除整个命名空间(会删除所有资源)
kubectl delete namespace ruoyi
重要说明
1. Service 名称与 docker-compose 保持一致
所有 Service 名称都使用 ruoyi-* 前缀,与 docker-compose.yml 和 SQL 配置中的服务名保持一致:
ruoyi-mysql- 对应 SQL 中的jdbc:mysql://ruoyi-mysql:3306ruoyi-redis- 对应配置中的host: ruoyi-redisruoyi-nacos- 服务注册中心ruoyi-gateway- 网关服务
这样可以确保应用配置无需修改即可在 K8s 中运行。
2. 端口访问说明
- 容器端口:与 docker-compose 保持一致(如 MySQL 3306, Redis 6379, Nginx 80)
- NodePort:由于 K8s 限制,NodePort 必须在 30000-32767 范围内
- 访问方式:通过 NodePort 30080 访问,或使用
kubectl port-forward映射到本地端口
3. 单命名空间架构
- 所有服务运行在
ruoyi命名空间中 - 一个 K8s 集群只运行一套服务
- 没有端口冲突问题
- 适合开发、测试或单一生产环境
4. 持久化存储
- MySQL、Redis、Nacos 使用 StatefulSet + PVC 持久化数据
- File 服务使用 PVC 存储上传文件
- 删除 Pod 不会丢失数据
Docker Compose vs Kubernetes 对比
| 特性 | Docker Compose | Kubernetes |
|---|---|---|
| 服务名 | ruoyi-mysql | ruoyi-mysql(保持一致) |
| 端口映射 | 80:80 | NodePort 30080 |
| 服务发现 | links/depends_on | Service + DNS |
| 负载均衡 | 无 | 自动负载均衡 |
| 自动重启 | restart: always | 自动重启 Pod |
| 扩缩容 | 手动修改 | kubectl scale |
| 持久化 | volumes | PVC |
| 配置管理 | environment | ConfigMap/Secret |
故障排查
Pod 无法启动
# 查看 Pod 事件
kubectl describe pod <pod-name> -n ruoyi
# 查看 Pod 日志
kubectl logs <pod-name> -n ruoyi
服务无法访问
# 检查 Service 状态
kubectl get svc -n ruoyi
# 检查 Endpoints
kubectl get endpoints -n ruoyi
下一步优化建议
- 添加健康检查:为所有服务添加 livenessProbe 和 readinessProbe
- 资源限制:添加 resources.requests 和 resources.limits
- 配置外部化:使用 ConfigMap 管理应用配置文件
- Ingress 配置:使用 Ingress 替代 NodePort 进行流量管理
- 监控告警:集成 Prometheus + Grafana 监控