目录
[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 本机磁盘。
- 删除 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 分发镜像;或者搭建私有镜像仓库。
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!