K8s实战:手把手教你部署RuoYi前后端分离项目(含私有镜像仓库搭建)
K8s企业级实战:RuoYi前后端分离项目全链路部署指南
在云原生技术席卷全球的今天,Kubernetes已成为企业级应用部署的事实标准。本文将带您深入探索如何基于K8s构建完整的RuoYi前后端分离项目部署方案,从私有镜像仓库搭建到服务编排的全过程,为DevOps工程师提供一套可复用的企业级解决方案。
1. 私有镜像仓库架构设计与实现
1.1 企业级镜像仓库选型考量
在容器化部署流程中,私有镜像仓库是不可或缺的基础设施。相比直接使用公共仓库,私有方案具有以下核心优势:
- 安全隔离:完全掌控镜像访问权限,避免敏感代码泄露
- 网络优化:内网传输大幅提升镜像拉取速度
- 版本管控:自定义镜像标签策略,实现精确版本控制
- 合规审计:满足企业安全合规的镜像扫描需求
主流私有仓库方案对比:
| 方案类型 | 典型代表 | 适用场景 | 维护成本 |
|---|---|---|---|
| 开源自建 | Harbor, Registry | 需要深度定制的中大型企业 | 高 |
| 商业托管 | AWS ECR, ACR | 云原生环境下的企业 | 中 |
| 轻量级部署 | Registry | 开发测试环境 | 低 |
1.2 基于Registry的轻量级实现
对于中小型团队,Docker Registry是最快捷的解决方案。以下是关键配置步骤:
# 创建认证目录 mkdir -p /docker/volume/registry/auth # 生成认证文件(使用bcrypt加密) htpasswd -Bbc /docker/volume/registry/auth/htpasswd registryadmin安全配置要点:
# config.yml 关键配置项 auth: htpasswd: realm: RegistryAuth path: /auth/htpasswd http: headers: X-Content-Type-Options: [nosniff] Strict-Transport-Security: [max-age=31536000]注意:生产环境必须启用TLS加密,可通过Let's Encrypt获取免费证书
1.3 可视化监控方案
推荐使用docker-registry-ui作为管理界面:
docker run -d \ -e REGISTRY_URL=http://registry:5000 \ -e REGISTRY_AUTH="true" \ -p 8080:80 \ joxit/docker-registry-ui:latest常见问题排查技巧:
- 镜像推送失败时检查
/var/log/registry.log - 存储空间不足时配置垃圾回收策略
- 网络问题优先验证
docker login连通性
2. RuoYi应用容器化改造
2.1 后端服务优化实践
Java应用的容器化需要特别注意JVM参数优化:
# 多阶段构建示例 FROM maven:3.8-jdk-11 AS build COPY . /app RUN mvn -f /app/pom.xml clean package FROM openjdk:11-jre-slim COPY --from=build /app/target/*.jar /app.jar ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0" ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]关键优化点:
- 使用Alpine基础镜像减少体积(约减少60%)
- 配置合理的JVM内存参数
- 分离编译和运行环境
2.2 前端Nginx深度配置
现代前端项目的Nginx配置需要关注:
server { gzip on; gzip_types text/plain application/xml application/javascript; location / { # 解决HTML5 History模式路由问题 try_files $uri $uri/ /index.html; # 启用缓存控制 expires 1y; add_header Cache-Control "public"; } location /api/ { # 后端服务代理 proxy_pass http://backend-service:8080/; proxy_set_header X-Real-IP $remote_addr; } }性能优化技巧:
- 开启Brotli压缩(比gzip提升20%压缩率)
- 配置合理的缓存策略
- 启用HTTP/2协议
3. Kubernetes集群部署架构
3.1 生产级集群规划建议
三节点最小化生产配置:
| 节点类型 | CPU | 内存 | 存储 | 数量 |
|---|---|---|---|---|
| Control Plane | 4核 | 8GB | 100GB | 1 |
| Worker | 8核 | 16GB | 200GB | 2 |
网络插件选型对比:
| 插件 | 网络性能 | 易用性 | 特性支持 |
|---|---|---|---|
| Calico | 高 | 中 | 网络策略完善 |
| Flannel | 中 | 高 | 配置简单 |
| Cilium | 极高 | 低 | eBPF高级功能 |
3.2 关键组件部署清单
数据库部署示例:
apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql replicas: 1 template: spec: containers: - name: mysql image: mysql:8.0 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: db-secret key: root-password volumeMounts: - name: mysql-data mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 50Gi重要:生产环境必须使用StatefulSet配合PersistentVolume
4. 全链路监控与运维
4.1 健康检查策略
完善的探针配置是保障稳定性的关键:
livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: exec: command: - curl - -f - http://localhost:8080/actuator/health failureThreshold: 34.2 日志收集方案
推荐EFK技术栈:
- Filebeat部署配置:
filebeat.inputs: - type: container paths: - /var/log/containers/*.log output.elasticsearch: hosts: ["elasticsearch:9200"]- 日志查询优化技巧:
- 使用KQL语法提高查询效率
- 配置合理的日志保留策略
- 对重要业务日志建立索引
4.3 性能监控指标
核心监控指标清单:
| 指标类别 | 具体指标 | 告警阈值 |
|---|---|---|
| 容器资源 | CPU使用率 | >70%持续5分钟 |
| 内存使用量 | >80% | |
| JVM | GC时间 | >1s/次 |
| 堆内存使用率 | >75% | |
| 数据库 | 活跃连接数 | >最大连接数80% |
| 查询响应时间 | >500ms |
实施部署过程中,每个环节都需要进行严格的验证测试。特别是在镜像推送阶段,建议建立自动化校验流程,确保镜像完整性和安全性。对于企业级应用,还需要考虑多环境部署策略,通过命名空间隔离开发、测试和生产环境。
