1. 项目概述
在云原生技术快速发展的今天,Kubernetes已成为容器编排的事实标准。但对于很多Java开发者来说,直接操作原生Kubernetes仍然存在较高的学习门槛。sealos作为一款开源的Kubernetes发行版,极大简化了集群的部署和管理流程。本文将以流行的Java开源项目若依(RuoYi)为例,详细介绍如何使用sealos部署Java后端服务的完整流程。
若依是一套基于Spring Boot的权限管理系统,包含了用户管理、角色权限、系统监控等常见功能模块,非常适合作为企业级应用的开发框架。通过sealos部署若依,开发者可以快速获得一个高可用、易扩展的生产环境,同时避免复杂的Kubernetes配置工作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 硬件需求
对于开发测试环境,建议配置:
- 至少2核CPU
- 4GB内存
- 50GB存储空间
生产环境则需要根据实际业务规模进行调整:
- 小型应用:4核CPU/8GB内存/100GB存储
- 中型应用:8核CPU/16GB内存/200GB存储
- 大型应用:16核CPU/32GB内存/500GB存储及以上
2.2 软件依赖
- 操作系统:推荐使用CentOS 7.6+或Ubuntu 18.04+等主流Linux发行版
- Docker:需要安装Docker 20.10.0及以上版本
- sealos:最新稳定版(当前为v4.1.3)
- Java环境:JDK 11或17(与若依版本匹配)
注意:若依不同版本对JDK要求不同,RuoYi v4.7.1+需要JDK 17,早期版本支持JDK 8/11
3. sealos安装与配置
3.1 sealos安装
在干净的Linux系统上执行以下命令安装sealos:
bash复制# 下载并安装sealos
wget https://github.com/labring/sealos/releases/download/v4.1.3/sealos_4.1.3_linux_amd64.tar.gz
tar -zxvf sealos_4.1.3_linux_amd64.tar.gz sealos
chmod +x sealos && mv sealos /usr/bin
# 验证安装
sealos version
3.2 集群初始化
使用sealos创建单节点Kubernetes集群(适合开发测试):
bash复制sealos run labring/kubernetes:v1.25.0 labring/calico:v3.24.1 \
--single
对于生产环境,建议使用多节点部署:
bash复制sealos run labring/kubernetes:v1.25.0 labring/calico:v3.24.1 \
--masters 192.168.0.2,192.168.0.3 \
--nodes 192.168.0.4,192.168.0.5 \
--passwd your-server-password
3.3 网络配置检查
部署完成后,检查集群状态:
bash复制kubectl get nodes
kubectl get pods -A
确保所有组件都处于Running状态,特别是CoreDNS和Calico相关Pod。
4. 若依应用部署
4.1 获取若依源码
从GitHub克隆若依项目:
bash复制git clone https://github.com/yangzongzhuan/RuoYi.git
cd RuoYi
4.2 数据库准备
若依默认使用MySQL数据库,我们可以使用sealos快速部署一个MySQL实例:
bash复制sealos run labring/mysql:8.0 \
--env MYSQL_ROOT_PASSWORD=yourpassword \
--env MYSQL_DATABASE=ruoyi \
--env MYSQL_USER=ruoyi \
--env MYSQL_PASSWORD=ruoyi123
创建数据库表结构:
bash复制mysql -h mysql-service -uroot -pyourpassword ruoyi < sql/ry_20230223.sql
mysql -h mysql-service -uroot -pyourpassword ruoyi < sql/quartz.sql
4.3 构建Docker镜像
修改若依的application.yml配置文件,更新数据库连接信息:
yaml复制spring:
datasource:
druid:
master:
url: jdbc:mysql://mysql-service:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ruoyi
password: ruoyi123
构建Docker镜像:
bash复制mvn clean package -Dmaven.test.skip=true
docker build -t ruoyi:latest .
4.4 Kubernetes部署文件
创建ruoyi-deployment.yaml:
yaml复制apiVersion: apps/v1
kind: Deployment
metadata:
name: ruoyi
spec:
replicas: 2
selector:
matchLabels:
app: ruoyi
template:
metadata:
labels:
app: ruoyi
spec:
containers:
- name: ruoyi
image: ruoyi:latest
ports:
- containerPort: 8080
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "1"
memory: "2Gi"
env:
- name: TZ
value: Asia/Shanghai
创建ruoyi-service.yaml:
yaml复制apiVersion: v1
kind: Service
metadata:
name: ruoyi-service
spec:
selector:
app: ruoyi
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: NodePort
4.5 部署应用
应用部署配置:
bash复制kubectl apply -f ruoyi-deployment.yaml
kubectl apply -f ruoyi-service.yaml
检查部署状态:
bash复制kubectl get pods -l app=ruoyi
kubectl get svc ruoyi-service
5. 高级配置与优化
5.1 配置Ingress
使用sealos安装Nginx Ingress Controller:
bash复制sealos run labring/ingress-nginx:1.5.1
创建Ingress资源文件ruoyi-ingress.yaml:
yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ruoyi-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ruoyi.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ruoyi-service
port:
number: 80
应用Ingress配置:
bash复制kubectl apply -f ruoyi-ingress.yaml
5.2 配置HTTPS
使用cert-manager自动管理SSL证书:
bash复制sealos run labring/cert-manager:v1.10.1
更新Ingress配置以支持HTTPS:
yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ruoyi-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- ruoyi.yourdomain.com
secretName: ruoyi-tls
rules:
- host: ruoyi.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ruoyi-service
port:
number: 80
5.3 监控与日志
使用sealos部署Prometheus和Grafana:
bash复制sealos run labring/prometheus:v2.40.0 labring/grafana:9.3.2
配置若依应用的监控指标采集:
yaml复制# 在Deployment中添加以下annotations
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
prometheus.io/path: "/actuator/prometheus"
6. 常见问题排查
6.1 数据库连接失败
症状:应用启动时报数据库连接错误
解决方案:
- 检查MySQL服务是否正常运行:
kubectl get pods -l app=mysql - 验证网络连通性:
kubectl exec -it ruoyi-pod -- curl mysql-service:3306 - 检查数据库权限:确保ruoyi用户有访问ruoyi数据库的权限
6.2 内存不足
症状:Pod频繁重启,日志显示OOM错误
解决方案:
- 增加Pod内存限制:修改Deployment中的resources.limits.memory
- 调整JVM参数:在Dockerfile中添加
ENV JAVA_OPTS="-Xms1g -Xmx2g" - 增加集群节点资源
6.3 性能优化建议
- 数据库连接池:调整Druid连接池参数
yaml复制spring:
datasource:
druid:
initial-size: 5
min-idle: 5
max-active: 20
- 缓存配置:启用Redis缓存
bash复制sealos run labring/redis:7.0
- JVM调优:根据实际负载调整JVM参数
dockerfile复制ENV JAVA_OPTS="-server -Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
7. 备份与恢复
7.1 数据库备份
创建定期备份任务:
bash复制kubectl create cronjob mysql-backup \
--image=labring/mysql:8.0 \
--schedule="0 2 * * *" \
--restart=OnFailure \
-- mysqldump -h mysql-service -uroot -pyourpassword ruoyi > /backup/ruoyi-$(date +\%Y\%m\%d).sql
7.2 应用配置备份
使用ConfigMap管理应用配置:
bash复制kubectl create configmap ruoyi-config --from-file=application.yml
7.3 全集群备份
使用velero进行全集群备份:
bash复制sealos run labring/velero:v1.9.2
velero backup create ruoyi-backup --include-namespaces=default
8. 扩展与定制
8.1 多环境部署
使用Kustomize管理不同环境配置:
code复制ruoyi/
├── base/
│ ├── deployment.yaml
│ └── kustomization.yaml
├── dev/
│ ├── kustomization.yaml
│ └── patch.yaml
└── prod/
├── kustomization.yaml
└── patch.yaml
8.2 CI/CD集成
结合GitHub Actions实现自动化部署:
yaml复制name: Deploy RuoYi
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: |
docker build -t ruoyi:latest .
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/ruoyi ruoyi=ruoyi:latest
8.3 微服务改造
将若依拆分为多个微服务:
- 创建独立的用户服务、权限服务、系统服务等
- 使用Spring Cloud Alibaba实现服务治理
- 部署Nacos作为注册中心:
bash复制sealos run labring/nacos:v2.1.1
9. 安全加固
9.1 网络策略
限制Pod间通信:
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: ruoyi-network-policy
spec:
podSelector:
matchLabels:
app: ruoyi
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: ruoyi
ports:
- protocol: TCP
port: 8080
9.2 安全上下文
配置Pod安全上下文:
yaml复制securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
capabilities:
drop:
- ALL
9.3 定期安全扫描
集成Trivy进行镜像扫描:
bash复制sealos run labring/trivy:0.34.0
trivy image ruoyi:latest
