KubeSphere 核心实战之四【在kubesphere平台上部署Ruoyi-cloud项目】(实操篇 4/4)

**《KubeSphere 核心实战系列》**

KubeSphere 核心实战之一(实操篇 1/4)

KubeSphere 核心实战之二(实操篇 2/4)

KubeSphere 核心实战之三(实操篇 3/4)

KubeSphere 核心实战之四(实操篇 4/4)

**《KubeSphere 核心实战系列》**

1、Rouyi-Cloud架构

请添加图片描述

2、项目上云分析

将rouyi-cloud项目搬上云需要考虑的问题如下:

  • 1,项目中用到了多少中间件?中间件是有状态应用,有些中间件需要导入默认的数据后才能上云。

  • 2,ruoyi-cloud包含8个微服务子模块(带端口的模块对应一个微服务)

  - ruoyi-ui                  // 前端框架 [80]
  - ruoyi-gateway             // 网关模块 [8080]
  - ruoyi-auth                // 认证中心 [9200]
  - ruoyi-system              // 系统模块 [9201]
  - ruoyi-gen                 // 代码生成 [9202]
  - ruoyi-job                 // 定时任务 [9203]
  - ruoyi-file                // 文件服务 [9300]
  - ruoyi-visual-monitor      // 监控中心 [9100]

它们都是无状态的应用,自己写的微服务需要自己制作镜像(编写Dockerfile文件)。

  • 3,中间件和微服务上云以后,各个中间件和微服务之间的访问问题,涉及整个项目的网络拓扑模型;优先集群内网地址访问微服务中间件(使用内网ip或者内网域名)。

  • 4,每个微服务的配置如何分离(生产配置分离URL),生产环境与开发环境的配置分离。

请添加图片描述

  • 中间件:有状态、数据导入

  • 微服务:无状态、制作镜像

  • 网络:各种访问地址,各个微服务和中间件之间访问(通过集群内部网络进行)

  • 配置:生产配置分离、URL

每个微服务上云需要做的工作:

  • 1、每个微服务准备 bootstrap.properties,配置 nacos地址信息(默认使用本地链接),nacos配置中心中每个配置文件信息需要修改为上云后的mysql和redis链接地址。
  • 2、每个微服务准备Dockerfile,启动命令,指定线上nacos配置等。
  • 3、每个微服务制作自己镜像。

3、开始部署

3.1、部署中间件

根据ruoyi-cloud架构图分析得到,项目需要的中间件有三个,分别是:

  1. mysql(数据迁移:将若依的数据库迁移到云上的mysql中,共三个库)
  2. redis
  3. nacos(注册和配置中心)
3.1.1 部署mysql和redis

首先保证在kubesphere上已经部署好mysql和redis两个服务,具体部署流程参见我的上两篇博客:

名称集群内访问地址集群外部访问地址
mysqlhis-mysql.his:3306192.168.162.31:30201
redishis-redis.his:6379192.168.162.31:30608
3.1.2 mysql数据库迁移到云上mysql

mysql数据库初始化导入,将ruoyi-cloud所需的三个数据库内容导入到部署好的mysql中;三个数据库如下:

  1. ry-cloud
  2. ry-config
  3. ry-seata

具体操作可以通过navicat工具中的数据传输进行数据库的迁移。

在这里插入图片描述

在这里插入图片描述

3.1.3 部署nacos

具体参见nacos的官方文档

https://nacos.io/docs/v2/guide/admin/cluster-mode-quick-start/
请添加图片描述

配置文件 application.properties
如果是集群配置nacos多一个配置文件:cluster.conf
挂载配置文件使用子路径进行挂载。

/home/nacos/conf/application.properties
/home/nacos/conf/cluster.conf

在这里插入图片描述

在kubesphere上创建nacos服务

  1. 首先创建nacos的配置
    请添加图片描述
    请添加图片描述
    使用子路径挂载nacose的两个配置文件:
    请添加图片描述
    上面配置文件别忘了修改mysql数据库的链接地址:his-mysql.his:3306 以及登录账号和密码。

  2. 创建nacos服务:

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

镜像名称:nacos/nacos-server:v2.1.0
nacos客户端下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3

请添加图片描述
这里补充一个bug:
因为nacos启动需要连接mysql数据库,当nacos服务启动了,然而mysql服务还没有准备就绪,此时会出现服务从nacos中读取配置文件失败的情况。

解决办法:使用探针,nacos服务中增加健康检查机制,定时向nacos容器组发请求来探究运行状况,如果状态是错误的,k8s就不断的重启服务,直到服务正常。

在这里插入图片描述

请添加图片描述

在这里插入图片描述

nacos数据没有挂载的,都存在mysql数据库;

创建一个外网能访问的nacos服务,以node方式访问,暴露外网端口
请添加图片描述
游览器访问nacos: 192.168.162.31:30986请添加图片描述
至此,我们部署完成nacos,redis和mysql 三个中间件服务。

接下来我们开始部署rouyi-cloud项目的微服务模块。

3.2、部署ruoyi-cloud微服务模块前的准备

根据ruoyi-cloud架构图分析得到:
首先是前端vue项目模块,用来用户发送请求到网关服务;网关模块接受到前端的请求后分发给各个微服务模块。

在这里插入图片描述

微服务部署
请添加图片描述

3.2.1. 云上环境Dockerfile配置
  1. nacos中创建prod命名空间:
    在这里插入图片描述

  2. 克隆dev环境中配置到prod命名空间中
    在这里插入图片描述

  3. Dockerfile文件

FROM openjdk:8-jdk
LABEL maintainer=tigerhhzz


#docker run -e PARAMS="--server.port 9090"
ENV PARAMS="--server.port=8080 --spring.profiles.active=prod --spring.cloud.nacos.discovery.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.server-addr=his-nacos.his:8848 --spring.cloud.nacos.config.namespace=prod --spring.cloud.nacos.config.file-extension=yml"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

COPY target/*.jar /app.jar
EXPOSE 8080

#
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]

启动镜像时,加一些额外的参数,每个微服务启动后对应一个pod,每个pod有不同的ip,但是端口都是8080,这样每个pod的访问地址就是唯一的。

规则:

1、容器默认以8080端口启动
2、时间为CST
3、环境变量 PARAMS 可以动态指定配置文件中任意的值,默认激活的是开发dev环境,去nacos配置中心中找xxxxx-dev.yml配置文件,应用上云打包镜像启动会自动激活生产环境pro,然后去nacos配置中心中找xxxxx-prod.yml配置文件。
4、nacos集群内地址为 his-nacos.his:8848   
5、微服务默认启动加载 nacos中  服务名-激活的环境.yml 文件,所以线上的配置可以全部写在nacos中。
3.2.1. 微服务上云分析

请添加图片描述
idea中使用maven打包jar包。
在这里插入图片描述
在这里插入图片描述
所用微服务模块打包成功。

编辑整理各个模块的jar和Dockerfile文件(每个微服务模块制作镜像的准备工作)
在这里插入图片描述
上传Dockerfile-images-ry整个文件夹到服务器(任何一个节点)
在这里插入图片描述

3.2.2. 制作微服务镜像并推送给个人阿里云镜像仓库

在这里插入图片描述

##打包镜像命令
docker build -t ruoyi-auth:v1.0  .

##查看镜像
docker images|grep ruoyi

在这里插入图片描述
在这里插入图片描述

创建阿里云个人镜像仓库

开通阿里云“容器镜像服务(个人版)

阿里云镜像服务参考官网地址:https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

首先创建一个命名空间,默认仓库类型设置为公开

在这里插入图片描述
然后,在自己的命名空间下,创建一个镜像仓库:
在这里插入图片描述
最后,进行镜像推送

##登录阿里云Docker Registry
docker login --username=hehu****@126.com registry.cn-hangzhou.aliyuncs.com

##将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi:[镜像版本号]

在这里插入图片描述

把所有微服务镜像推送到个人阿里云镜像仓库。

docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-auth:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-file:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gateway:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gen:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-job:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-system:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-visual-monitor:v1.0

在这里插入图片描述

思考两个问题:

  1. 手动一个个制作镜像,很费力费时,有没有一个自动化制作镜像流程?
  2. 这是使用了阿里云个人镜像仓库,有没有自己搭建公司仓库?一般开发中,搭建公司的habor私有仓库;专门存放项目镜像。

3.3、部署ruoyi-cloud微服务模块上云

ruoyi-cloud所用镜像都已经推送到个人阿里云镜像仓库:

3.3.1、部署规则

● 应用一启动会从云上nacos获取到 "应用名-激活的环境标识.yml"的配置文件

● 每次部署应用的时候,需要提前修改nacos线上配置,确认好每个中间件的连接地址是否正确

● 云上nacos配置文件中的中间件例如redis、mysql等链接地址一定是集群内的访问地址

在这里插入图片描述

在这里插入图片描述

3.3.2、ruoyi-visual-monitor微服务模块上云

整个操作在kubesphere云平台进行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看容器运行日志:
在这里插入图片描述

监控模块启动成功!!!

3.3.2、ruoyi-system微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-system:v1.0
过程同3.3.1一样。

3.3.3、ruoyi-job微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-job:v1.0
过程同3.3.1一样。

3.3.4、ruoyi-gen微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gen:v1.0
过程同3.3.1一样。

3.3.5、ruoyi-gateway微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-gateway:v1.0
过程同3.3.1一样。

3.3.5、ruoyi-file微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-file:v1.0
过程同3.3.1一样。

3.3.6、ruoyi-auth微服务模块上云

阿里云镜像名称为:registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-auth:v1.0
过程同3.3.1一样。

3.3.7、所有后端微服务和中间件服务总览

在这里插入图片描述
工作负载一览:
在这里插入图片描述
在这里插入图片描述

3.4、部署ruoyi-cloud前端vue项目上云

ruoyi-cloud前端是vue项目,端口是80
打包方式:其实就是ngnix镜像,将前端打包的文件夹放到ngnix指定文件夹下。

其实就是运行package.json文件中的脚本build:prod
在这里插入图片描述

3.4.1、修改vue.config.js

修改的内容是:
在这里插入图片描述
在这里插入图片描述

http://ruoyi-gateway.his:8080
3.4.2、打包前端项目

打包命令:

# 构建生产环境
npm run build:prod

在这里插入图片描述

3.4.3、存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问

打包完毕后,会生成一个dist文件,然后将dist文件夹中的内容拷贝到如图下的位置中:

在这里插入图片描述

存放前端ruoyi-ui构建好的静态文件,用于nginx请求访问。

3.4.4、修改ngnix配置文件

在这里插入图片描述
修改后的 nginx.conf文件如下

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  _;

        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://ruoyi-gateway.his:8080/;
        }

        # 避免actuator暴露
        if ($request_uri ~ "/actuator") {
            return 403;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
3.4.5、压缩上传到云服务器

压缩上传到集群内任意节点机子上。
在这里插入图片描述

3.4.6、解压并制作镜像并推送到阿里云个人镜像仓库

Dockerfile文件内容:

# 基础镜像
FROM nginx
# author
MAINTAINER ruoyi

# 挂载目录
VOLUME /home/ruoyi/projects/ruoyi-ui
# 创建目录
RUN mkdir -p /home/ruoyi/projects/ruoyi-ui
# 指定路径
WORKDIR /home/ruoyi/projects/ruoyi-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/ruoyi/projects/ruoyi-ui

制作ngnix镜像:

docker build -t registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-ui:v1.0 -f dockerfile .

在这里插入图片描述
镜像制作成功:
在这里插入图片描述

推送到阿里云个人镜像仓库

docker push registry.cn-hangzhou.aliyuncs.com/tiger-ruoyi/ruoyi-ui:v1.0
3.4.7、使用kubesphere平台部署ruoyi-cloud前端项目

创建无状态服务
需要注意的时候,前端项目云部署暴露外网访问地址nodeport。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前端项目启动成功:
在这里插入图片描述

如果内存不够,(启动无顺序限制)

 Auth服务和Gateway服务必须启动
 system服务如果你想访问后台就启动
 job和gen服务这两个一个是定时任务一个是代码生成 如果你有用得到就启动 反则不需要启动

在这里插入图片描述
在这里插入图片描述
前端项目启动成功!!至此所有服务都部署完成!!!

在这里插入图片描述


试一下,你会比你自己想象中的还要强大


Kubernetes(简称为K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。Ruoyi-Cloud是基于Spring Cloud和Vue.js的一套微服务架构解决方案,用于快速构建企业级的管理平台。 要在Kubernetes上部署Ruoyi-Cloud,可以按照以下步骤进行操作: 1. 创建Kubernetes集群:首先需要创建一个Kubernetes集群,可以使用服务提供商(如AWS、Azure、GCP)或使用本地工具(如Minikube、k3s)来搭建集群。 2. 构建Docker镜像:将Ruoyi-Cloud的各个微服务模块打包成Docker镜像,并上传到一个可访问的镜像仓库(如Docker Hub、私有镜像仓库)。 3. 编写Kubernetes配置文件:创建Kubernetes的配置文件,描述Ruoyi-Cloud各个微服务的部署方式、资源需求、服务暴露方式等。可以使用YAML格式编写配置文件。 4. 部署Ruoyi-Cloud:使用kubectl命令行工具或Kubernetes管理界面(如Kubernetes Dashboard)来部署Ruoyi-Cloud。通过应用配置文件,Kubernetes会自动创建和管理Ruoyi-Cloud的各个微服务实例。 5. 监控和扩展:使用Kubernetes提供的监控和扩展功能,可以实时监控Ruoyi-Cloud的运行状态,并根据需要进行水平扩展或缩减。 请注意,以上只是一个简要的概述,实际部署过程可能会因具体环境和需求而有所不同。建议参考Kubernetes和Ruoyi-Cloud的官方文档以获取更详细的部署指南和最佳实践。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值