k8s部署若依微服务架构流程,v3.6.6

目录

ruoyi架构图

极简流程图

安装部署从这开始看:必要的准备

redis安装

安装MySQL

安装nacos

使用maven打包项目

使用K8S部署Ruoyi组件

部署gateway

nacos配置

编写Dockerfile启动,生成镜像

分发镜像

使用K8S启动gateway

部署auth

部署system

部署成功,网站验证

部署ui前端

成果验收

排错心得

1,nacos里配置必须写服务名称,

2,pv持久化存储问题

3,po启动顺序

4,ui的nginx容器启动失败

[5,镜像只在 master 节点存在,其他节点没有镜像](#5,镜像只在 master 节点存在,其他节点没有镜像)


若依Cloud微服务对应关系表

功能模块 对应微服务 / 组件 核心职责 K8s 环境故障影响
网关路由 / 统一入口 ruoyi-gateway 全局请求统一入口、路由转发、跨域处理、请求过滤、限流熔断 网关 Pod 异常 → 前端所有接口请求全部失效,页面可打开但所有功能按钮无法操作
用户登录 / 验证码 / 授权 ruoyi-auth 登录校验、图片验证码生成 / 校验、JWT Token 颁发与解析、用户身份鉴权 Auth Pod 异常 → 无法登录、验证码不显示 / 刷新、登录直接报错(你当前遇到的核心故障场景)
系统管理(用户 / 角色 / 菜单) ruoyi-system 用户管理、角色管理、菜单管理、部门管理、字典管理、参数配置 System Pod 异常 → 登录成功后,用户 / 角色 / 菜单等系统管理页面无法打开
代码生成功能 ruoyi-gen 提供可视化代码生成能力,根据数据库表生成前后端代码 Gen Pod 异常 → 仅代码生成功能失效,系统其他业务功能可正常使用
定时任务管理 ruoyi-job 定时任务新增、修改、执行调度、任务日志管理 Job Pod 异常 → 定时任务不再自动执行,任务管理页面无法打开
前端页面展示 ruoyi-ui(Nginx) 托管 Vue 前端静态页面、处理前端路由、反向代理接口请求 UI Pod 异常 → 浏览器无法打开登录页面,直接访问报错
服务注册与发现 / 配置中心 Nacos 所有微服务启动后向其注册实例、统一管理微服务配置、动态刷新配置 Nacos Pod 异常 → 所有微服务互相无法发现、配置无法拉取,最终全系统瘫痪
业务数据持久化 MySQL 存储系统业务数据、用户信息、权限配置、Nacos 配置库数据 MySQL Pod 异常 → 所有数据读写操作失败,登录、查询、修改等所有业务功能全部失效;无持久化时重建 Pod 会清空全量数据
缓存 / Token 存储 Redis 存储用户登录 Token、验证码、业务缓存数据 Redis Pod 异常 → 验证码无法生成 / 校验、登录态快速失效、部分业务接口报错

ruoyi架构图

极简流程图

浏览器 →【节点 IP:30088】→ nginx-service → ui Pod

↓(接口 /prod-api)

gateway-service → gateway Pod

↓路由分发

auth-service/auth Pod system-service/system Pod

↓ ↓

Redis Pod ←→ MySQL Pod

↑所有服务启动注册、拉配置

Nacos Pod

部署到 K8s 的影响:

  • 每个功能变成一个独立的 Pod,可以单独扩展、重启、升级
  • 但同时也增加了复杂度:Nacos 配置、Service 网络、镜像管理、端口转发等
  • 任何一个环节出问题,都可能导致整个系统不可用

安装部署从这开始看:必要的准备

本机配置,一主两从

节点标识 主机名 IP 地址 节点角色 操作系统
Master k8s-node01 192.168.83.11 控制平面 + 工作节点 Rocky-Linux 10.1
Node1 node1 192.168.83.12 工作节点 Rocky-Linux 10.1
Node2 node1 192.168.83.13 工作节点 Rocky-Linux 10.1

1克隆代码,本文使用3.6.6版本

bash 复制代码
git clone https://gitee.com/y_project/RuoYi-Cloud.git

2安装jdk

bash 复制代码
yum -y install java-21-openjdk-devel.x86_64

3安装maven

bash 复制代码
yum -y install maven

4安装node

bash 复制代码
[root@k8s-node01 RuoYi-Cloud]# node -v
v18.20.8

5创建K8S名称空间,将ruoyi服务放到同一个名称空间下:

bash 复制代码
kubectl create ns ruoyi-cloude

redis安装

创建redis相关资源

redis存储

bash 复制代码
[root@k8s-node01 ruoyi]# cat redis-cunchu.yaml 
# 1. Redis PersistentVolume (PV)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-pv
  namespace: ruoyi-cloud
  labels:
    app: redis
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /data/redis
    type: DirectoryOrCreate
---
# 2. Redis PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data-pvc
  namespace: ruoyi-cloud
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      app: redis
---

redis副本服务资源

bash 复制代码
[root@k8s-node01 ruoyi]# cat redis-ziyuan.yaml 
# 3. Redis Deployment (单节点模式)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-server
  namespace: ruoyi-cloud
  labels:
    app: redis-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-server
  template:
    metadata:
      labels:
        app: redis-server
    spec:
      containers:
        - name: redis
          image: redis:7.4.5
          ports:
            - containerPort: 6379
          command: ["redis-server", "--requirepass", "$(REDIS_PASSWORD)"]
          env:
            - name: REDIS_PASSWORD
              value: "redis123"
          volumeMounts:
            - name: redis-data
              mountPath: /data
          resources:
            requests:
              cpu: 200m
              memory: 128Mi
            limits:
              cpu: 300m
              memory: 256Mi
          livenessProbe:
            exec:
              command: ["redis-cli", "-a", "$(REDIS_PASSWORD)", "ping"]
            initialDelaySeconds: 5
            periodSeconds: 10
          readinessProbe:
            exec:
              command: ["redis-cli", "-a", "$(REDIS_PASSWORD)", "ping"]
            initialDelaySeconds: 5
            periodSeconds: 5
      volumes:
        - name: redis-data
          persistentVolumeClaim:
            claimName: redis-data-pvc
---
# 4. Redis Service (NodePort)
apiVersion: v1
kind: Service
metadata:
  name: redis-server-nodeport
  namespace: ruoyi-cloud
  labels:
    app: redis-server
spec:
  type: NodePort
  ports:
    - port: 6379
      targetPort: 6379
      nodePort: 30379
  selector:
    app: redis-server

创建资源

bash 复制代码
kubectl apply -f redis-ziyuan.yaml 
kubectl apply -f redis-cunchu.yaml 

检查一下,资源创建成功

安装MySQL

存储清单

bash 复制代码
[root@k8s-node01 ruoyi]# cat mysql-cunchu.yaml 
# 1. MySQL PersistentVolume (PV)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    app: mysql
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /data/mysql
    type: DirectoryOrCreate
---
# 2. MySQL PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-data-pvc
  namespace: ruoyi-cloud
  labels:
    app: mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  selector:
    matchLabels:
      app: mysql
---
# 3. MySQL ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: ruoyi-cloud
  labels:
    app: mysql
data:
  my.cnf: |
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    max_connections=1000
    default-authentication-plugin=mysql_native_password

资源清单

bash 复制代码
[root@k8s-node01 ruoyi]# cat mysql-ziyuan.yaml 
# 4. MySQL Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-server
  namespace: ruoyi-cloud
  labels:
    app: mysql-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-server
  template:
    metadata:
      labels:
        app: mysql-server
    spec:
      # ⚠️ 关键:MySQL 容器以 UID 999 运行,需确保宿主机目录权限匹配
      securityContext:
        fsGroup: 999
      containers:
        - name: mysql
          image: mysql:8.0.42
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "root123"
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
            - name: mysql-config
              mountPath: /etc/mysql/conf.d/
              readOnly: true
          resources:
            requests:
              cpu: 500m
              memory: 1Gi
            limits:
              cpu: 1000m
              memory: 2Gi
          livenessProbe:
            exec:
              command:
                - /bin/sh
                - -c
                - mysqladmin ping -h localhost -u root -p"${MYSQL_ROOT_PASSWORD}"
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
          readinessProbe:
            exec:
              command:
                - /bin/sh
                - -c
                - mysql -h localhost -u root -p"${MYSQL_ROOT_PASSWORD}" -e "SELECT 1"
            initialDelaySeconds: 10
            periodSeconds: 5
            timeoutSeconds: 5
      volumes:
        - name: mysql-data
          persistentVolumeClaim:
            claimName: mysql-data-pvc
        - name: mysql-config
          configMap:
            name: mysql-config
---
# 5. MySQL Service (NodePort)
apiVersion: v1
kind: Service
metadata:
  name: mysql-server-nodeport
  namespace: ruoyi-cloud
  labels:
    app: mysql-server
spec:
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 30306
  selector:
    app: mysql-server

检查是否创建成功

bash 复制代码
[root@k8s-node01 ruoyi]## 1. 检查资源状态.
kubectl get pv,pvc,pods,svc -n ruoyi-cloud -l app=mysql-server

# 2. 查看 MySQL 启动日志(确认无权限错误)
kubectl logs -n ruoyi-cloud -l app=mysql-server --tail=50

# 3. 进入容器验证连接
kubectl exec -it -n ruoyi-cloud $(kubectl get pod -n ruoyi-cloud -l app=mysql-server -o jsonpath='{.items[0].metadata.name}') -- mysql -u root -proot123 -e "SHOW DATABASES;"

# 4. 验证数据持久化目录
kubectl exec -n ruoyi-cloud $(kubectl get pod -n ruoyi-cloud -l app=mysql-server -o jsonpath='{.items[0].metadata.name}') -- ls -la /var/lib/mysql/
# ✅ 应看到 ibdata1、ib_logfile0 等文件

接下来创建数据库以及导入sql

bash 复制代码
[root@k8s-node01 RuoYi-Cloud]# kubectl cp ~/RuoYi-Cloud/sql/quartz.sql -n ruoyi-cloud mysql-server-7dd475dddd-czmw7:/tmp
[root@k8s-node01 RuoYi-Cloud]# kubectl cp ~/RuoYi-Cloud/sql/ry_20250523.sql -n ruoyi-cloud mysql-server-7dd475dddd-czmw7:/tmp
[root@k8s-node01 RuoYi-Cloud]# kubectl cp ~/RuoYi-Cloud/sql/ry_config_20250224.sql -n ruoyi-cloud mysql-server-7dd475dddd-czmw7:/tmp
bash 复制代码
[root@k8s-node01 RuoYi-Cloud]# kubectl exec -it -n ruoyi-cloud mysql-server-7dd475dddd-czmw7 -- bash
bash-5.1#

bash-5.1# # 1. 创建两个数据库(指定字符集,避免中文乱码)
mysql -uroot -proot123 -e "
CREATE DATABASE IF NOT EXISTS \`ry-config\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE IF NOT EXISTS \`ry-cloud\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
"

# 2. 重新导入 SQL
MYSQL_PWD=root123 mysql -uroot ry-config < /tmp/ry_config_20250224.sql
MYSQL_PWD=root123 mysql -uroot ry-cloud < /tmp/ry_20250523.sql

# 3. 验证导入结果
MYSQL_PWD=root123 mysql -uroot -e "
SELECT 'ry-config' AS db, COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='ry-config';
SELECT 'ry-cloud'  AS db, COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='ry-cloud';
"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+-------------+
| db        | table_count |
+-----------+-------------+
| ry-config |          13 |
+-----------+-------------+
+----------+-------------+
| db       | table_count |
+----------+-------------+
| ry-cloud |          19 |
+----------+-------------+

安装nacos

编写资源清单

bash 复制代码
[root@k8s-node01 ruoyi]# cat nacos.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nacos-server
  namespace: ruoyi-cloud
  labels:
    app: nacos-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nacos-server
  template:
    metadata:
      labels:
        app: nacos-server
    spec:
      containers:
        - name: nacos-server
          image: nacos/nacos-server:v2.5.1
          ports:
            - containerPort: 8848
            - containerPort: 9848
          env:
            - name: MODE
              value: "standalone"
            - name: PREFER_HOST_MODE
              value: "hostname"
            - name: NACOS_AUTH_ENABLE
              value: "true"
            - name: NACOS_AUTH_TOKEN
              value: "bmFjb3NfYXV0aF90b2tlbl8yMDI1X1JBTkRPTUNPTVBMRVNTX1N0cmluZ180MEJpdA=="
            - name: NACOS_AUTH_IDENTITY_KEY
              value: "nacos"
            - name: NACOS_AUTH_IDENTITY_VALUE
              value: "nacos"
            - name: SPRING_DATASOURCE_PLATFORM
              value: "mysql"
            - name: MYSQL_SERVICE_HOST
              value: "mysql-server-nodeport"
            - name: MYSQL_SERVICE_PORT
              value: "3306"
            - name: MYSQL_SERVICE_DB_NAME
              value: "ry-config"
            - name: MYSQL_SERVICE_USER
              value: "root"
            - name: MYSQL_SERVICE_PASSWORD
              value: "root123"
            - name: MYSQL_SERVICE_DB_PARAM
              value: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"
          resources:
            requests:
              memory: "2Gi"
              cpu: "1"
            limits:
              memory: "4Gi"
              cpu: "2"
---
apiVersion: v1
kind: Service
metadata:
  name: nacos-server-nodeport
  namespace: ruoyi-cloud
  labels:
    app: nacos-server
spec:
  type: NodePort
  ports:
    - name: http
      port: 8848
      targetPort: 8848
      nodePort: 30848
    - name: grpc
      port: 9848
      targetPort: 9848
      nodePort: 31848
  selector:
    app: nacos-server

kubectl apply -f创建,检查是否创建成功

bash 复制代码
[root@k8s-node01 ruoyi]# kubectl get po -n ruoyi-cloud -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP               NODE    NOMINATED NODE   READINESS GATES
mysql-server-7dd475dddd-czmw7   1/1     Running   0          41m     10.244.104.37    node2   <none>           <none>
nacos-server-55dc94f7f9-jj9kd   1/1     Running   0          3m36s   10.244.166.130   node1   <none>           <none>
redis-server-cbcc5c6fd-kpnmk    1/1     Running   0          77m     10.244.166.137   node1   <none>           <none>
[root@k8s-node01 ruoyi]# kubectl get svc -n ruoyi-cloud -o wide
NAME                    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE     SELECTOR
mysql-server-nodeport   NodePort   10.10.215.204   <none>        3306:30306/TCP                  42m     app=mysql-server
nacos-server-nodeport   NodePort   10.1.155.186    <none>        8848:30848/TCP,9848:31848/TCP   3m45s   app=nacos-server
redis-server-nodeport   NodePort   10.10.113.18    <none>        6379:30379/TCP                  78m     app=redis-server

访问nacos服务,默认开启鉴权,用户名和密码设置为: nacos/nacos

能看到9个配置

使用maven打包项目

bash 复制代码
[root@k8s-master RuoYi-Cloud]# pwd
/root/RuoYi-Cloud
[root@k8s-master RuoYi-Cloud]# mvn clean package -Dmaven.test.skip=true


[INFO] Reactor Summary for ruoyi 3.6.6:
[INFO] 
[INFO] ruoyi .............................................. SUCCESS [  2.842 s]
[INFO] ruoyi-common ....................................... SUCCESS [  0.002 s]
[INFO] ruoyi-common-core .................................. SUCCESS [ 30.425 s]
[INFO] ruoyi-api .......................................... SUCCESS [  0.004 s]
[INFO] ruoyi-api-system ................................... SUCCESS [  0.395 s]
[INFO] ruoyi-common-redis ................................. SUCCESS [  3.919 s]
[INFO] ruoyi-common-security .............................. SUCCESS [  0.653 s]
[INFO] ruoyi-auth ......................................... SUCCESS [ 19.541 s]
[INFO] ruoyi-gateway ...................................... SUCCESS [ 11.000 s]
[INFO] ruoyi-visual ....................................... SUCCESS [  0.001 s]
[INFO] ruoyi-visual-monitor ............................... SUCCESS [  5.527 s]
[INFO] ruoyi-common-datasource ............................ SUCCESS [  4.285 s]
[INFO] ruoyi-common-datascope ............................. SUCCESS [  0.251 s]
[INFO] ruoyi-common-log ................................... SUCCESS [  0.117 s]
[INFO] ruoyi-common-swagger ............................... SUCCESS [  1.462 s]
[INFO] ruoyi-modules ...................................... SUCCESS [  0.001 s]
[INFO] ruoyi-modules-system ............................... SUCCESS [  6.906 s]
[INFO] ruoyi-modules-gen .................................. SUCCESS [  3.079 s]
[INFO] ruoyi-modules-job .................................. SUCCESS [  4.232 s]
[INFO] ruoyi-modules-file ................................. SUCCESS [  5.479 s]
[INFO] ruoyi-common-seata ................................. SUCCESS [  9.643 s]
[INFO] ruoyi-common-sensitive ............................. SUCCESS [  0.230 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:55 min
[INFO] Finished at: 2026-08-03T17:50:18+08:00
[INFO] ------------------------------------------------------------------------

使用K8S部署Ruoyi组件

部署gateway

nacos配置

主要是改redis和mysql

编写Dockerfile启动,生成镜像

那两行地址应该写成nacos服务名称!!!

bash 复制代码
[root@k8s-node01 gateway]# ls
Dockerfile  ruoyi-gateway.jar
[root@k8s-node01 gateway]# cat Dockerfile 

# 基础镜像
FROM openjdk:8u265
 
# 维护者信息
LABEL maintainer="Nova_CaoFC"
 
# 设置工作目录
WORKDIR /app
 
# 创建日志目录并设置权限
RUN mkdir -p /var/log && chmod 777 /var/log
 
# 复制本地构建好的 jar 包到容器内
COPY ruoyi-gateway.jar /app/ruoyi-gateway.jar
 
# 暴露应用端口
EXPOSE 8080
 
# 启动命令(整合你提供的参数,优化格式)
CMD ["java", \
  "-Dspring.profiles.active=dev", \
  "-Dspring.cloud.nacos.config.file-extension=yml", \
  "-Dspring.cloud.nacos.discovery.server-addr=192.168.83.11:30848", \
  "-Dspring.cloud.nacos.config.server-addr=192.168.83.11:30848", \
  "-Dspring.cloud.nacos.config.username=nacos", \
  "-Dspring.cloud.nacos.config.password=nacos", \
  "-Dspring.cloud.nacos.discovery.username=nacos", \
  "-Dspring.cloud.nacos.discovery.password=nacos", \
  "-jar", "/app/ruoyi-gateway.jar"]
bash 复制代码
docker build -t ruoyi-gateway:v1 .

分发镜像

分发到别的node并导入,根据自己情况更改

bash 复制代码
docker save -o ruoyi-gateway-v1.tar gateway:v1

scp ruoyi-gateway-v1.tar root@192.168.83.13:/root

节点导入镜像
docker load -i /root/ruoyi-gateway-v1.tar

使用K8S启动gateway

bash 复制代码
[root@k8s-node01 ruoyi]# cat gateway.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyi-gateway
  namespace: ruoyi-cloud
  labels:
    app: ruoyi-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-gateway
  template:
    metadata:
      labels:
        app: ruoyi-gateway
    spec:
      containers:
      - name: ruoyi-gateway
        image: ruoyi-gateway:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080   # ⚠️ 改成和 Dockerfile 里 EXPOSE 一致
        resources:
          limits:
            cpu: "1"
            memory: "1Gi"
          requests:
            cpu: "500m"
            memory: "512Mi"
        env:
        - name: TZ
          value: "Asia/Shanghai"
        # 如果仍想挂载日志目录,可以保留。否则删除 volumeMounts/volumes
        volumeMounts:
        - name: log-volume
          mountPath: /var/log
      volumes:
      - name: log-volume
        emptyDir: {}
 
---
apiVersion: v1
kind: Service
metadata:
  name: ruoyi-gateway-service
  namespace: ruoyi-cloud
spec:
  selector:
    app: ruoyi-gateway
  ports:
  - port: 8080       # Service 暴露的端口
    targetPort: 8080 # Pod 内部容器监听的端口
  type: ClusterIP    # 内部访问,按需可改成 NodePort / LoadBalancer

可以看到服务,说明成功了

部署auth

参考gateway部署方法,大差不差,主要就是改文件名,9200端口

部署system

参考gateway部署方法,大差不差,主要就是改文件名,9201端口

部署成功,网站验证

bash 复制代码
[root@master ruoyi]# kubectl get po -n ruoyi-cloud 
NAME                             READY   STATUS    RESTARTS        AGE
mysql-server-7dd475dddd-6j5h2    1/1     Running   0               4h39m
nacos-server-55dc94f7f9-bn2mt    1/1     Running   2 (4h39m ago)   4h39m
redis-server-cbcc5c6fd-vt6hd     1/1     Running   0               4h39m
ruoyi-auth-8f55b74c4-8hpx6       1/1     Running   0               4h36m
ruoyi-gateway-76c64dfb97-9zw8m   1/1     Running   0               4h36m
ruoyi-system-5b6666d5fb-57pt8    1/1     Running   0               4h34m
[root@master ruoyi]# kubectl get svc -n ruoyi-cloud 
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
mysql-server-nodeport   NodePort    10.1.212.169   <none>        3306:30306/TCP                  4h39m
nacos-server-nodeport   NodePort    10.0.206.16    <none>        8848:30848/TCP,9848:31848/TCP   4h39m
redis-server-nodeport   NodePort    10.4.185.141   <none>        6379:30379/TCP                  4h39m
ruoyi-auth-service      ClusterIP   10.8.215.146   <none>        9201/TCP                        4h36m
ruoyi-gateway-service   ClusterIP   10.12.199.17   <none>        8080/TCP                        4h36m
ruoyi-system-service    ClusterIP   10.11.51.3     <none>        9200/TCP                        4h35m

部署ui前端

修改vue.config.js

打包前端应用

bash 复制代码
npm install --registry=https://registry.npmmirror.com
npm run build:prod

# DONE  Build complete. The dist directory is ready to be deployed.
# INFO  Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html

然后把打包的dist分发到各个节点

bash 复制代码
scp dist root@192.168.83.12:/root

部署nginx

bash 复制代码
[root@master ruoyi]# cat nginx-ruoyiui.yaml 

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-ui-conf
  namespace: ruoyi-cloud
data:
  default.conf: |
    server {
        listen 80;
        server_name localhost;
 
        location / {
            root /usr/share/nginx/html;
            index index.html;
            try_files $uri $uri/ /index.html;
        }
 
        location /prod-api/ {
            proxy_pass http://ruoyi-gateway-service:8080/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: ruoyi-cloud
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.29.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-html
          mountPath: /usr/share/nginx/html
        - name: nginx-ui-conf
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: default.conf
      volumes:
      - name: nginx-html
        hostPath:
          path: /root/dist
          type: Directory
      - name: nginx-ui-conf
        configMap:
          name: nginx-ui-conf
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: ruoyi-cloud
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30088
  type: NodePort

创建之后验证

bash 复制代码
[root@master ~]# kubectl get po -n ruoyi-cloud 
NAME                                READY   STATUS    RESTARTS       AGE
mysql-server-7dd475dddd-6j5h2       1/1     Running   0              5h2m
nacos-server-55dc94f7f9-bn2mt       1/1     Running   2 (5h1m ago)   5h2m
nginx-deployment-7dd9869b69-v6wk6   1/1     Running   0              3m49s
redis-server-cbcc5c6fd-vt6hd        1/1     Running   0              5h2m
ruoyi-auth-8f55b74c4-8hpx6          1/1     Running   0              4h59m
ruoyi-gateway-76c64dfb97-9zw8m      1/1     Running   0              4h59m
ruoyi-system-5b6666d5fb-57pt8       1/1     Running   1 (12m ago)    4h57m

成果验收

访问本机30088端口测试,相当于访问nginx80端口

测试各个功能正常,部署成功!

排错心得

1,nacos里配置必须写服务名称,

因为k8s内部是靠服务名Service 名称通信的,我写成宿主机ip导致连不上redis

nacos修改后需要重启相关模块加载

2,pv持久化存储问题

第一次:mysql Pod 调度到 node1

挂载 hostPath: /data/mysql,数据库文件保存在 node1 本机磁盘。

  1. 删除 Pod、重建,调度策略变化,Pod 跑到 node2

新 Pod 挂载 node2 的 /data/mysql,node2 这个目录是空文件夹。

👉 数据库是空库,之前 node1 的数据完全读取不到。

个人解决方法:加入nfs网络存储

3,po启动顺序

启动顺序不对可能导致po一直失败重启

4,ui的nginx容器启动失败

一直启动失败,查日志发现是/root/dist不存在

原来是没把dist目录发到每台节点

5,镜像只在 master 节点存在,其他节点没有镜像

现象:Pod 状态 ErrImagePull

解决:docker save/scp 分发镜像;或者搭建私有镜像仓库。

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

相关推荐
云飞云共享云桌面3 小时前
广东精密机械设备工厂8-10人共享一台SolidWorks设计服务器
运维·服务器·3d·自动化·汽车·制造
jieyucx3 小时前
【高级利用】条件竞争与逻辑漏洞:与服务器赛跑的艺术
android·运维·服务器·web安全·文件上传
tianyuanwo3 小时前
服务器OS组件研发效能度量可视系统——顶层方案设计与阶段性规划
运维·服务器·度量系统
阿里云云原生3 小时前
AI 创新实践论坛·上海站精彩回顾 & PPT 下载
云原生
阿里云云原生4 小时前
轮子还要自己造吗?SRE 团队视角:从“全栈自研”到“拥抱云原生可观测底座”的思考
云原生
黄华SJ520it4 小时前
二二复制定点裂变双轨商城系统开发:原理、架构与实战指南
运维·小程序·架构·系统开发
生活爱好者!4 小时前
NAS还能用来开视频会议?docker一键部署MiroTalk SFU
运维·docker·容器
深爱水瓶 血影S狂风5 小时前
函数调用过程探究
linux·运维·服务器
酷可达拉斯5 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash