写在前面:
若依(RuoYi)Cloud 是一套基于 Spring Cloud、Spring Boot、Vue 等技术栈构建的开源微服务权限管理系统,功能完整、结构清晰,广泛应用于企业级后台系统开发。在实际使用中,将 RuoYi-Cloud 部署到 Kubernetes 上,不仅可以实现微服务的高可用、自动扩缩、统一管理,还能配合 CI/CD 实现持续交付,极大提升开发运维效率。
本篇博客将详细介绍如何通过编写 YAML 文件的方式,将 RuoYi-Cloud 从中间件到业务模块逐步部署到 Kubernetes 集群中,包括 MySQL、Redis、Nacos等中间件的部署配置,以及各个微服务的启动管理等。适合有一定 K8s 基础,希望将若依微服务架构进行容器化部署的开发者与运维人员参考使用,本文分为上下两篇,上篇主要讲解各个中间件的部署,下面主要讲解各个应用服务的部署。
内容概述:
环境准备
部署中间件
1. 环境准备
基础环境
依赖组件
2. 部署中间件
部署 MySQL
--- 1. 目录结构准备
mysql
├── configmap.yaml ## 用于挂载my.cnf的配置文件
├── deployment.yaml ## 使用deployment 控制器
├── pvc.yaml ## 数据卷持久化
└── service.yaml ## 暴露端口,用于测试
--- 2. 部署pvc,这里我使用nfs挂载存储,自行准备nfs共享目录哦
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
apps: mysql
spec:
accessModes:
- ReadWriteMany
nfs:
## NFS的服务端地址和共享路径
server: 192.168.0.160
path: /data/nfs/mysql
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
apps: mysql
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
volumeName: mysql-pv
--- 3. 部署configmap,这里是为了挂载数据库的配置文件,可以自行修改my.cnf的内容
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
## 初始化数据库
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_DATABASE: "ry-cloud"
my.cnf: |-
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
--- 4. 部署deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
spec:
replicas: 1
selector:
matchLabels:
apps: mysql
template:
metadata:
labels:
apps: mysql
spec:
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
- name: mysql-config
configMap:
name: mysql-config
containers:
- name: mysql
## 这里的镜像使用我自己的私有仓库
image: 192.168.0.77:32237/uat/mysql:8.0.32-oracle
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
configMapKeyRef:
name: mysql-config
key: MYSQL_ROOT_PASSWORD
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mysql-config
key: MYSQL_DATABASE
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
- name: mysql-config
mountPath: /etc/mysql/conf.d/my.cnf
subPath: my.cnf
--- 5. 部署service,这里我用nodePort暴露端口便于测试
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
selector:
apps: mysql
type: NodePort
ports:
- port: 3306
targetPort: 3306
protocol: TCP
nodePort: 30084
使用navicat测试连接,同是将若依的sql文件导入数据库
部署 redis
--- 1. 目录结构准备
redis
├── depolyment.yaml
├── pvc.yaml
└── service.yaml
--- 2. 部署pvc,注意点同上
apiVersion: v1
kind: PersistentVolume
metadata:
name: redis-pv
labels:
apps: redis
spec:
accessModes:
- ReadWriteMany
nfs:
server: 192.168.0.160
path: /data/nfs/redis
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc
labels:
apps: redis
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
volumeName: redis-pv
--- 3. 部署deployment,注意点同上
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
spec:
replicas: 1
selector:
matchLabels:
apps: redis
template:
metadata:
labels:
apps: redis
spec:
volumes:
- name: redis-storage
persistentVolumeClaim:
claimName: redis-pvc
containers:
- name: redis
image: 192.168.0.77:32237/uat/redis:6.2.18-alpine
ports:
- containerPort: 6379
volumeMounts:
- name: redis-storage
mountPath: /data
--- 4. 部署service,注意点同上
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
selector:
apps: redis
type: NodePort
ports:
- port: 6379
targetPort: 6379
protocol: TCP
nodePort: 30085
使用navicat测试连接
部署 nacos
--- 1. 目录结构准备
nacos
├── configmap.yaml
├── deployment.yaml
├── pvc.yaml
└── service.yaml
--- 2. 部署pvc,注意点同上
apiVersion: v1
kind: PersistentVolume
metadata:
name: nacos-pv
labels:
apps: nacos
spec:
accessModes:
- ReadWriteMany
nfs:
server: 192.168.0.160
path: /data/nfs/nacos
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nacos-pvc
labels:
apps: nacos
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
volumeName: nacos-pv
--- 3. 部署config,注意修改数据库的地址
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-config
data:
application.properties: |
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
### 连接数据库地址注意账号和密码:
db.url.0=jdbc:mysql://mysql-service:3306/ry_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.istio.mcp.server.enabled=false
--- 4. 部署deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nacos
spec:
replicas: 1
selector:
matchLabels:
app: nacos
template:
metadata:
labels:
app: nacos
spec:
volumes:
- name: nacos-data
persistentVolumeClaim:
claimName: nacos-pvc
- name: nacos-config
configMap:
name: nacos-config
containers:
- name: nacos
## 注意nacos 镜像版本
image: 192.168.0.77:32237/uat/nacos:2.1.0
ports:
- containerPort: 8848
env:
- name: MODE
value: standalone
volumeMounts:
- name: nacos-data
mountPath: /home/nacos/data
- name: nacos-config
## 配置文件挂载位置
mountPath: /home/nacos/conf/application.properties
subPath: application.properties
--- 5. 部署service
apiVersion: v1
kind: Service
metadata:
name: nacos-service
spec:
selector:
app: nacos
type: NodePort
ports:
- port: 8848
targetPort: 8848
protocol: TCP
nodePort: 30086
浏览器访问:IP地址:30086/nacos
克隆dev环境到prod名称空间中
注意:
提前修改nacos线上配置,确认好每个中间件的连接地址是否正确
nacos配置文件中的中间件例如redis、mysql等链接地址一定是集群内的访问地址
评论