a-cloud-all/k8s/README.md

240 lines
6.2 KiB
Markdown
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.

# 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推荐**
```bash
# 安装 k3d
brew install k3d
# 创建集群
k3d cluster create ruoyi --servers 1 --agents 2
# 验证
kubectl get nodes
```
**选项 B: 使用 minikube**
```bash
# 安装 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
## 部署步骤
### 一键部署所有服务
```bash
# 进入 k8s 目录
cd k8s
# 使用 kustomize 部署所有资源
kubectl apply -k .
# 查看部署状态
kubectl get pods -n ruoyi
kubectl get svc -n ruoyi
```
## 访问服务
由于 Kubernetes 的 NodePort 限制30000-32767访问方式如下
```bash
# Nginx 前端(通过 NodePort 30080
http://localhost:30080
# 或者使用端口转发访问原始端口
kubectl port-forward -n ruoyi svc/ruoyi-nginx 80:80
# 然后访问 http://localhost:80
```
## 常用管理命令
### 查看资源状态
```bash
# 查看所有 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
```
### 查看日志
```bash
# 查看 Pod 日志
kubectl logs <pod-name> -n ruoyi
# 实时查看日志
kubectl logs -f <pod-name> -n ruoyi
# 查看前 100 行日志
kubectl logs --tail=100 <pod-name> -n ruoyi
```
### 删除资源
```bash
# 删除所有资源
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:3306`
- `ruoyi-redis` - 对应配置中的 `host: ruoyi-redis`
- `ruoyi-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 无法启动
```bash
# 查看 Pod 事件
kubectl describe pod <pod-name> -n ruoyi
# 查看 Pod 日志
kubectl logs <pod-name> -n ruoyi
```
### 服务无法访问
```bash
# 检查 Service 状态
kubectl get svc -n ruoyi
# 检查 Endpoints
kubectl get endpoints -n ruoyi
```
## 下一步优化建议
1. **添加健康检查**:为所有服务添加 livenessProbe 和 readinessProbe
2. **资源限制**:添加 resources.requests 和 resources.limits
3. **配置外部化**:使用 ConfigMap 管理应用配置文件
4. **Ingress 配置**:使用 Ingress 替代 NodePort 进行流量管理
5. **监控告警**:集成 Prometheus + Grafana 监控