🚀 若依系统 (Ruoyi) Kubernetes 容器化部署完整实战手册
版本说明:本手册基于
CentOS 7+Kubernetes v1.20+Docker 20.10环境编写,修正了 NFS 权限、Docker Java 环境缺失、数据库防火墙拦截及 Service 端口映射错误等问题。
📋 0. 核心 IP 规划表 (基准配置)
| 角色 | 主机名 | IP 地址 | 关键说明 |
|---|---|---|---|
| K8s Master | k8s-master | 192.168.200.100 | 控制节点,执行 kubectl 的地方 |
| K8s Node1 | k8s-node1 | 192.168.200.101 | Ingress 入口节点 (外部访问流量入口) |
| K8s Node2 | k8s-node2 | 192.168.200.102 | 工作节点 |
| Database | db-server | 192.168.200.103 | MySQL 物理机 (非 K8s 内) |
| Harbor | harbor | 192.168.200.104 | 私有镜像仓库 |
| NFS | nfs-server | 192.168.200.106 | 共享存储服务器 |
第一阶段:基础环境互通 & NFS 客户端
操作目的:确保机器互认,且所有 K8s 节点都能挂载 NFS 盘(修正点: 之前 Node 节点缺少 nfs-utils 导致挂载失败)。
在所有 6 台机器上执行:
Bash
| |
第二阶段:MySQL 数据库部署 (IP: 192.168.200.103)
操作目的:部署数据库并允许 K8s 远程连接(修正点: 之前被防火墙拦截,且缺少用户授权)。
安装配置
Bash
1 2 3 4 5 6 7 8 9 10 11tar -xvf mysql-5.7.40.tar.gz yum -y localinstall mysql-5.7.40/* mkdir -pv /data/mysql/{data,logs} chown -R mysql:mysql /data/mysql/ # 写入配置 cat > /etc/my.cnf <<EOF systemctl enable --now mysqld安全设置与授权 (🚨 重点修正)
Bash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20# 1. 获取密码并登录 grep password /data/mysql/logs/mysql.err mysql -uroot -p'临时密码' # 2. 修改 Root 密码 set global validate_password_policy=0; set global validate_password_length=1; alter user 'root'@'localhost' identified by '123123'; flush privileges; # 3. 创建业务库与远程用户 (修复 Access denied) create database ruoyi_demo character set utf8; # 创建 ruoyi_demo 用户,允许从任意地方 (%) 登录 grant all privileges on ruoyi_demo.* to ruoyi_demo@'%' identified by '123123'; flush privileges; # 4. 导入数据 use ruoyi_demo; source /root/ry_20240601.sql; exit防火墙放行 (🚨 重点修正:修复 No route to host)
Bash
1 2# 简单粗暴方案:直接关闭防火墙 systemctl stop firewalld && systemctl disable firewalld
第三阶段:Harbor 与 Docker 信任配置 (IP: 192.168.200.104)
操作目的:让 K8s 能够从私有仓库拉取镜像(修正点: 确保所有节点信任 HTTP 仓库)。
部署 Harbor (在 104 执行)
1 2 3 4 5 6 7 8 9 10 11 12cd rpm_package/ 安装docker-compose chmod +x docker-compose mv docker-compose /usr/local/bin yum localinstall -y 03_docker_package/* docker_need_rpm_*/* cd docker_harbor/ tar xvf harbor-offline-installer-v2.30.tgz mv harbor /usr/local/ cd /usr/local/harbor/ mv harbor.yml.tmpl harbor.yml vim harbor.yml- 修改
harbor.yml:hostname 改为192.168.200.104,注释掉https部分。 - 执行
./install.sh。 - Web 界面新建公开项目:
car_prod。
- 修改
配置 Docker 信任 (在 Master, Node1, Node2, Harbor 上执行)
Bash
1 2 3 4 5 6 7 8 9 10 11 12vim /etc/docker/daemon.json # 内容: { "insecure-registries": ["192.168.200.104"], "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "storage-driver": "overlay2" } # 重启并验证登录 systemctl daemon-reload && systemctl restart docker docker login -u admin -p Harbor12345 http://192.168.200.104
第四阶段:构建镜像 (在 Harbor 104 上操作)
操作目的:构建带 Java 环境的业务镜像(修正点: 修复了之前 Dockerfile 缺少 Java 环境导致的 executable file not found 错误,并改用本地 CentOS 源)。
准备文件结构
Plaintext
1 2 3 4/data/docker/car_pro/ ├── Dockerfile ├── software/jdk-8u11-linux-x64.tar.gz (必须存在) └── project/ruoyi-admin.jar (必须是 75M 的真包,不能是假空壳)编写 Dockerfile (修正版)
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21# 使用本地 CentOS 7,不依赖外网 FROM centos:7 MAINTAINER bdqn # 解压 JDK ADD software/jdk-8u11-linux-x64.tar.gz /usr/local/ # 配置环境变量 (路径必须对) ENV JAVA_HOME /usr/local/jdk1.8.0_11 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $JAVA_HOME/bin:$PATH # 复制 Jar 包到 /opt 目录 ADD project/ /opt/ # 设置工作目录 WORKDIR /opt/ EXPOSE 80 # 启动命令 CMD ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "ruoyi-admin.jar"]构建与推送
Bash
1 2docker build -t 192.168.200.104/car_prod/ruoyi_demo:1.0 . docker push 192.168.200.104/car_prod/ruoyi_demo:1.0
第五阶段:NFS 存储服务端 (IP: 192.168.200.106)
Bash
| |
第六阶段:Kubernetes 部署 (在 Master 100 上执行)
这是核心部分,包含了所有修复后的 YAML 文件。
1. 部署 NFS 供应商 (🚨 修正权限 Bug)
使用修正后的 01_services_account_nfs.yaml,增加了 endpoints 权限,防止 CrashLoopBackOff。
执行命令:
Bash
| |
2. 部署应用 (🚨 修正数据库连接 & 挂载覆盖问题)
修正点 1:通过 env 注入数据库连接信息,指定 192.168.200.103 和 ruoyi_demo 用户。
修正点 2:修改挂载路径为 /opt/store,防止覆盖 Jar 包。
| |
YAML
| |
3. 部署 Service (🚨 修正端口映射问题)
修正点:将 targetPort 改为 80,匹配容器内 Tomcat 端口,修复 503 错误。
| |
YAML
| |
4. 部署 Ingress
Bash
| |
第七阶段:最终验证
| |
Windows 配置 Hosts:
192.168.200.101 bqdn.project.mslinux.com
浏览器访问:
至此,若依系统应能完美运行!