k8s部署ruoyi前后端分离版实战
文章目录
k8s部署ruoyi前后端分离版实战创建命名空间部署mysql部署redis部署ry-admin部署ry-ui部署成功
提前安装nfs,共享目录为:/home/nfs/可以使用kuboard部署,但最好在掌握了kubectl的基础上
创建命名空间
kubectl create ns ruoyi
部署mysql
在nfs共享目录下创建init、data和logs,分别挂载mysql的初始化脚本、数据和日志,配置文件没有复杂的配置,就直接用configmap挂载 将ruoyi项目中的ry_20230223.sql和quartz.sql放到init目录下 创建资源文件mysql-svc-deploy-configmap.yaml apiVersion: v1
kind: Service
metadata:
namespace: ruoyi
name: mysql
labels:
app: mysql-service
spec:
selector:
app: mysql-pod
type: NodePort
ports:
- nodePort: 30006
port: 3306
protocol: TCP
targetPort: 3306
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ruoyi
name: mysql
labels:
app: mysql-deploy
spec:
selector:
matchLabels:
app: mysql-pod
replicas: 1
template:
metadata:
labels:
app: mysql-pod
spec:
containers:
- name: mysql
image: mysql:8.0.32
ports:
- containerPort: 3306
args:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --default-authentication-plugin=mysql_native_password
env:
- name: MYSQL_DATABASE
value: ry-vue
- name: MYSQL_ROOT_PASSWORD
value: '123123'
- name: TZ
value: Asia/Shanghai
volumeMounts:
- name: init
mountPath: /docker-entrypoint-initdb.d
- name: data
mountPath: /var/lib/mysql
- name: logs
mountPath: /var/log/mysql/
- name: config
mountPath: /etc/mysql/conf.d
volumes:
- name: init
nfs:
server: 172.16.13.111
path: /home/nfs/mysql/init
- name: data
nfs:
server: 172.16.13.111
path: /home/nfs/mysql/data
- name: logs
nfs:
server: 172.16.13.111
path: /home/nfs/mysql/logs
- name: config
configMap:
name: mysql-configmap
---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: ruoyi
name: mysql-configmap
data:
my.cnf: |
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mariadb.pid
应用资源 kubectl apply -f mysql-svc-deploy-configmap.yaml
部署redis
在nfs共享目录下创建data和config,分别挂载redis的数据和配置 将配置文件redis.conf放到config目录下,注意修改其中的dir属性配置为data的mountPath 创建资源文件redis-svc-deploy.yaml apiVersion: v1
kind: Service
metadata:
namespace: ruoyi
name: redis
labels:
app: redis-service
spec:
selector:
app: redis-pod
type: NodePort
ports:
- nodePort: 30379
port: 6379
protocol: TCP
targetPort: 6379
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ruoyi
name: redis
labels:
app: redis-deploy
spec:
selector:
matchLabels:
app: redis-pod
replicas: 1
template:
metadata:
labels:
app: redis-pod
spec:
containers:
- name: redis
image: redis:7.0.9
ports:
- containerPort: 6379
command:
- redis-server
args:
- /etc/redis/redis.conf
env:
- name: TZ
value: Asia/Shanghai
volumeMounts:
- name: data
mountPath: /var/lib/redis
- name: config
mountPath: /etc/redis/
volumes:
- name: data
nfs:
server: 172.16.13.111
path: /home/nfs/redis/data
- name: config
nfs:
server: 172.16.13.111
path: /home/nfs/redis/config
应用资源 kubectl apply -f redis-svc-deploy.yaml
部署ry-admin
在nfs共享目录下创建ry-admin,挂载ruoyi-admin的日志以及头像等文件 注意替换spring配置文件中有关ip地址的配置,替换为service的name,如下: spring:
datasource:
druid:
master:
url: jdbc:mysql://mysql:3306/ry-vue
redis:
host: redis
镜像制作 mvn clean package
docker build -t ry-admin:3.8.5 .
Dockerfile参考 FROM openjdk:8
MAINTAINER xiguapengpengwork@qq.com
VOLUME /tmp
ADD ruoyi-admin.jar app.jar
ENV TZ 'Asia/Shanghai'
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
创建资源文件ry-admin-svc-deploy.yaml apiVersion: v1
kind: Service
metadata:
namespace: ruoyi
name: ry-admin
labels:
app: ry-admin-service
spec:
selector:
app: ry-admin-pod
type: NodePort
ports:
- nodePort: 30080
port: 8080
protocol: TCP
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ruoyi
name: ry-admin
labels:
app: ry-admin-deploy
spec:
selector:
matchLabels:
app: ry-admin-pod
replicas: 1
template:
metadata:
labels:
app: ry-admin-pod
spec:
containers:
- name: ry-admin
image: ry-admin:3.8.5
ports:
- containerPort: 8080
env:
- name: TZ
value: Asia/Shanghai
volumeMounts:
- name: data
mountPath: /home/ruoyi
volumes:
- name: data
nfs:
server: 172.16.13.111
path: /home/nfs/ry-admin
应用资源 kubectl apply -f ry-admin-svc-deploy.yaml
部署ry-ui
在nfs共享目录下创建ry-ui以及子目录dist和config,挂载ruoyi-ui的静态文件以及nginx的配置 将配置文件nginx.conf放到config目录下,同样注意有关ip地址的配置,替换为service的name,配置参考 worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64K;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /home/ruoyi/projects/ruoyi-ui;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://ry-admin:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
静态文件打包,将静态文件放到dist目录下 npm run build:prod
创建资源文件ry-ui-svc-deploy.yaml apiVersion: v1
kind: Service
metadata:
namespace: ruoyi
name: ry-ui
labels:
app: ry-ui-service
spec:
selector:
app: ry-ui-pod
type: NodePort
ports:
- nodePort: 30081
port: 80
protocol: TCP
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ruoyi
name: ry-ui
labels:
app: ry-ui-deploy
spec:
selector:
matchLabels:
app: ry-ui-pod
replicas: 1
template:
metadata:
labels:
app: ry-ui-pod
spec:
containers:
- name: nginx
image: nginx:1.23.3
ports:
- containerPort: 80
volumeMounts:
- name: dist
mountPath: /home/ruoyi/projects/ruoyi-ui
- name: config
mountPath: /etc/nginx
volumes:
- name: dist
nfs:
server: 172.16.13.111
path: /home/nfs/ry-ui/dist
- name: config
nfs:
server: 172.16.13.111
path: /home/nfs/ry-ui/config
应用资源 kubectl apply -f ry-ui-svc-deploy.yaml
部署成功
若是k8s集群,通过任意节点的30081端口应该都能够访问到ruoyi-admin
相关链接
发表评论