在上一篇文章中,笔者介绍了 KubeSphere 的安装与基本使用。在本文中,我们将通过 KubeSphere 部署一个典型的中小型项目 Ruoyi-Cloud。 Ruoyi-Cloud 的正确运行需要很多中间件和微服务被正确启动。KubeSphere 为我们提供了几乎全部配置行为的 UI,让我们彻底从编写 yaml 文件的负担中解脱。
1 Ruoyi-Cloud 项目介绍
Ruoyi-Cloud 是一套开源的快速开发平台,其开源地址为 https://gitee.com/y_project/RuoYi-Cloud。 Ruoyi-Cloud 采用前后端分离的模式,前端基于 Vue 实现,后端基于 Spring Boot、Spring Cloud 和 Alibaba 的部分开源产品实现。 其包含的模块有:
(base) ➜ RuoYi-Cloud git:(master) tree -L 2
...
├── pom.xml # 公共依赖
├── ruoyi-api # 接口模块
│ ├── pom.xml
│ ├── ruoyi-api-system
├── ruoyi-auth # 认证中心 [9200]
│ ├── pom.xml
│ ├── src
│ └── target
├── ruoyi-common # 通用模块
│ ├── pom.xml
│ ├── ruoyi-common-core # 核心模块
│ ├── ruoyi-common-datascope # 权限范围
│ ├── ruoyi-common-datasource # 多数据源
│ ├── ruoyi-common-log # 日志记录
│ ├── ruoyi-common-redis # 缓存服务
│ ├── ruoyi-common-security # 安全模块
│ ├── ruoyi-common-swagger # 系统接口
├── ruoyi-gateway # 网关模块 [8080]
│ ├── pom.xml
│ ├── src
│ └── target
├── ruoyi-modules # 业务模块
│ ├── pom.xml
│ ├── ruoyi-file # 文件服务 [9300]
│ ├── ruoyi-gen # 代码生成 [9202]
│ ├── ruoyi-job # 定时任务 [9203]
│ └── ruoyi-system # 系统模块 [9201]
├── ruoyi-ui # 前端框架 [80]
│ ├── README.md
│ ├── babel.config.js
│ ├── bin
│ ├── build
│ ├── node_modules
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── src
│ └── vue.config.js
├── ruoyi-visual # 图形化管理模块
│ ├── pom.xml
│ ├── ruoyi-monitor # 监控中心 [9100]
└── sql # 项目默认配置与演示数据
├── quartz.sql
├── ry_20210908.sql
├── ry_config_20210730.sql
└── ry_seata_20210128.sql
...
44 directories, 36 files
Ruoyi-Cloud 的系统架构如图 1 所示。可以发现,Ruoyi-Cloud 的运行依赖于很多中间件应用。 它选择 nacos(https://nacos.io/zh-cn/)作为系统的注册和配置中心, 而 nacos 依赖于 mysql 之类的数据库实现配置的持久化存储。除此之外,它还用到了 redis(用于权限认证)和 sentinel(用于流量控制)1,此处不再一一介绍。
2 在本地部署 Ruoyi-Cloud 项目
在本机(macOS 10.15)部署 Ruoyi-Cloud,首先要做的事情,当然是安装 mysql 和 redis。前者建议在官网下载安装包(.pkg
文件)进行安装,后者使用 brew
安装即可。
完成安装之后,我们首先在 macOS 的系统设置中启动 mysql 服务。
接下来,我们约定放置项目的根目录为 PROJ
,然后将 nacos 和 Ruoyi-Cloud 分别拉取到本目录下。
在 Ruoyi-Cloud 中,我们首先应该启动的是 nacos,它作为整个系统的服务注册中心和配置管理中心,为项目内的各类微服务提供了服务发现和配置获取的功能。
2.1 启动 nacos
首先,我们需要下载源码(笔者拉取的版本为 2.1.0-SNAPSHOT
),并通过 maven 对源码进行构建:
(base) ➜ nacos git:(develop) mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Alibaba NACOS 2.1.0-SNAPSHOT 2.1.0-SNAPSHOT:
[INFO]
[INFO] Alibaba NACOS 2.1.0-SNAPSHOT ....................... SUCCESS [02:37 min]
[INFO] nacos-api 2.1.0-SNAPSHOT ........................... SUCCESS [ 46.456 s]
[INFO] nacos-common 2.1.0-SNAPSHOT ........................ SUCCESS [ 13.330 s]
[INFO] nacos-consistency 2.1.0-SNAPSHOT ................... SUCCESS [ 14.848 s]
[INFO] nacos-sys 2.1.0-SNAPSHOT ........................... SUCCESS [ 21.455 s]
[INFO] nacos-auth 2.1.0-SNAPSHOT .......................... SUCCESS [ 4.466 s]
[INFO] nacos-core 2.1.0-SNAPSHOT .......................... SUCCESS [ 29.509 s]
[INFO] nacos-config 2.1.0-SNAPSHOT ........................ SUCCESS [ 32.202 s]
[INFO] nacos-cmdb 2.1.0-SNAPSHOT .......................... SUCCESS [ 0.708 s]
[INFO] nacos-naming 2.1.0-SNAPSHOT ........................ SUCCESS [ 15.842 s]
[INFO] nacos-address 2.1.0-SNAPSHOT ....................... SUCCESS [ 0.782 s]
[INFO] nacos-client 2.1.0-SNAPSHOT ........................ SUCCESS [ 45.242 s]
[INFO] nacos-istio 2.1.0-SNAPSHOT ......................... SUCCESS [ 17.854 s]
[INFO] nacos-console 2.1.0-SNAPSHOT ....................... SUCCESS [ 32.679 s]
[INFO] nacos-test 2.1.0-SNAPSHOT .......................... SUCCESS [ 5.261 s]
[INFO] nacos-config-test 2.1.0-SNAPSHOT ................... SUCCESS [ 0.293 s]
[INFO] nacos-naming-test 2.1.0-SNAPSHOT ................... SUCCESS [ 0.342 s]
[INFO] nacos-core-test 2.1.0-SNAPSHOT ..................... SUCCESS [ 0.465 s]
[INFO] nacos-example 2.1.0-SNAPSHOT ....................... SUCCESS [ 0.599 s]
[INFO] nacos-distribution 2.1.0-SNAPSHOT .................. SUCCESS [ 13.970 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 07:51 min
[INFO] Finished at: 2021-11-13T14:57:30+08:00
[INFO] ------------------------------------------------------------------------
构建完毕之后,进入 PROJ/nacos/distribution/target/nacos-server-2.1.0-SNAPSHOT/nacos/bin
目录,以单节点模式(standalone)启动 nacos:
(base) ➜ bin git:(develop) ✗ ./startup.sh -m standalone
...
nacos is starting with standalone
nacos is starting,you can check the /Users/hliangzhao/Documents/GitHub/nacos/distribution/target/nacos-server-2.1.0-SNAPSHOT/nacos/logs/start.out
(base) ➜ bin git:(develop) ✗ cat /Users/hliangzhao/Documents/GitHub/nacos/distribution/target/nacos-server-2.1.0-SNAPSHOT/nacos/logs/start.out
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home/bin/java -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xlog:gc*:...
,--.
,--.'|
,--,: : | Nacos 2.1.0-SNAPSHOT
,`--.'`|' : ,---. Running in stand alone mode, All function modules
| : : | | ','\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 31302
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://10.192.179.235:8848/nacos/index.html
'' ;. ;.--. .-. | / /'' | |: :| : ;_
| | | \ | \__\/: . .. '/' | .; : \ \ `. https://nacos.io
': | ; .' ,".--.; |' ; :__| : | `----. \
| | '`--' / / ,. |'|'.'|\ \ / / /`--' /
': | ; : .' \ : : `----''--'. /
; |.'| , .-./\ \ / `--'---'
'---' `--`---'`----'
...
2021-11-13 15:17:10,281 INFO Tomcat initialized with port(s): 8848 (http)
2021-11-13 15:17:10,850 INFO Root WebApplicationContext: initialization completed in 5999 ms
以用户名 nacos
、密码 nacos
登录 http://localhost:8848/nacos/index.html
,可以看到一切已经正常启动:
2.2 在 nacos 中配置 Ruoyi-Cloud
接下来,我们需要将 Ruoyi-Cloud 的默认配置导入到 nacos 中。
首先,我们需要在 mysql 中创建数据库 ry-config
,然后进入 PROJ/RuoYi-Cloud/sql
目录,
通过 mysql -u root -p ry-config < ry_config_20210730.sql
将项目默认配置写入数据库 ry-config
中:
(base) ➜ sql git:(master) lsa
total 184
drwxr-xr-x@ 6 hliangzhao staff 192B Nov 13 15:22 .
drwxr-xr-x@ 19 hliangzhao staff 608B Nov 13 15:59 ..
-rw-r--r-- 1 hliangzhao staff 12K Nov 13 14:34 quartz.sql # Ruoyi-CLoud 自带带数据
-rw-r--r-- 1 hliangzhao staff 55K Nov 13 14:34 ry_20210908.sql # Ruoyi-CLoud 自带带数据
-rw-r--r-- 1 hliangzhao staff 20K Nov 13 14:34 ry_config_20210730.sql # Ruoyi-CLoud 的默认配置(执行本文件)
-rw-r--r-- 1 hliangzhao staff 3.0K Nov 13 14:34 ry_seata_20210128.sql # Ruoyi-CLoud 自带带数据
(base) ➜ sql git:(master) mysql -u root -p ry-config < ry_config_20210730.sql
Enter password:
然后,我们将 nacos 中的启动配置所在的数据库修改为 ry-config
。
具体地,我们进入 PROJ/nacos/distribution/target/nacos-server-2.1.0-SNAPSHOT/nacos/conf
目录,修改 applicaiton.properties
:
(base) ➜ nacos git:(develop) ✗ cd distribution/target/nacos-server-2.1.0-SNAPSHOT/nacos/conf
(base) ➜ conf git:(develop) ✗ ll
total 176
-rw-r--r-- 1 hliangzhao staff 1.2K Nov 13 14:49 1.4.0-ipv6_support-update.sql
-rw-r--r-- 1 hliangzhao staff 9.3K Nov 13 14:49 application.properties
-rw-r--r-- 1 hliangzhao staff 9.3K Nov 13 14:49 application.properties.example
-rw-r--r-- 1 hliangzhao staff 670B Nov 13 14:49 cluster.conf.example
-rw-r--r-- 1 hliangzhao staff 30K Nov 13 14:49 nacos-logback.xml
-rw-r--r-- 1 hliangzhao staff 10K Nov 13 14:49 nacos-mysql.sql
-rw-r--r-- 1 hliangzhao staff 8.6K Nov 13 14:49 schema.sql
(base) ➜ conf git:(develop) ✗ vim application.properties
# 需要修改与数据库连接相关的配置
## If use mysql as datasource:
spring.datasource.platform=mysql
## Count of DB:
db.num=1
## Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=fal se&serverTimezone=UTC
db.user.0=root
db.password.0=your-passwd
导入 Ruoyi-Cloud 配置后,重新启动 nacos,应该可以看到 Ruoyi-Cloud 项目内各个微服务的配置文件已经可以被正常发现:
紧接着,我们将 Ruoyi-Cloud 项目自带的一些数据导入数据库中用于演示——依次执行 PROJ/RuoYi-Cloud/sql
目录下的 quartz.sql
、ry_20210908.sql
和 ry_seata_20210128.sql
即可。
最后复盘一下:我们一共创建了三个数据库,如下面所示,其中 ry-config
被 nacos 用于整个项目的服务发现,ry-cloud
和 ry-seata
则是 Ruoyi-Cloud 自带的一些演示数据。
(base) ➜ sql git:(master) mysql -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| ... ... |
| ry-cloud |
| ry-config |
| ry-seata |
| ... ... |
+--------------------+
9 rows in set (0.00 sec)
mysql> exit
Bye
接下来,我们依次启动前端组件和各微服务。
2.3 启动前端组件
我们进入 PROJ/RuoYi-Cloud/ruoyi-ui
目录,通过 npm install
安装该前端项目的全部依赖,然后通过 npm run dev
启动它:
(base) ➜ ruoyi-ui git:(master) npm run dev
> ruoyi@3.2.0 dev
> vue-cli-service serve
INFO Starting development server...
98% after emitting CopyPlugin
DONE Compiled successfully in 23729ms 4:27:51 PM
App running at:
- Local: http://localhost:1024/
- Network: http://10.192.179.235:1024/
Note that the development build is not optimized.
To create a production build, run npm run build.
我们访问前端页面 http://localhost:1024/
,可以发现页面上弹出了 “系统接口 500 异常” 的报错,而控制台也输出了如下日志信息:
Proxy error: Could not proxy request /code from localhost:1024 to http://localhost:8080.
See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (ECONNREFUSED).
这是因为 ruoyi-gateway
子项目并未被启动。
接下来,我们就启动它。
2.4 启动网关组件
因为 ruoyi-gateway
的启动需要一个 redis 服务在运行,所以,我们首先启动 redis:
(base) ➜ ~ brew services start redis
==> Successfully started `redis` (label: homebrew.mxcl.redis)
(base) ➜ ~ curl -v http://localhost:6379 # 可正常访问
* Trying 127.0.0.1:6379...
* Connected to localhost (127.0.0.1) port 6379 (#0)
> GET / HTTP/1.1
> Host: localhost:6379
> User-Agent: curl/7.78.0
> Accept: */*
>
* Empty reply from server
* Closing connection 0
curl: (52) Empty reply from server
然后,我们在 IDEA 中启动 ruoyi-gateway
:
2.5 启动其余微服务
我们主要关注认证授权中心、文件服务、定时任务、监控中心和系统模块这五个微服务。我们依次在 IDEA 中启动它们:
此时,我们再访问前端页面 http://localhost:1024/
,就可以进入 Ruoyi 管理系统了:
点击 “服务状态监控”,在新页面上可以发现六个微服务均处于正常运行状态:
3 在 KubeSphere 中部署 Ruoyi-Cloud 项目
接下来,我们将 Ruoyi-Cloud 通过 KubeSphere 上云。 我们应当重点思考如下问题:
- 中间件有哪些?它们应当以 StatefulSet 的方式部署。如果已经有数据,那么数据需要被导入;
- 微服务有哪些?需要为这些微服务制作镜像,并且以 Deployment 的方式部署;
- 项目内部互相访问应当以内网 IP 或域名的方式进行。涉及哪些端口?
- 如何实现生产配置分离?
接下来,我们将 Ruoyi-Cloud 的上云按照如下步骤执行:
- 部署数据层,即 mysql 和 redis;
- 部署微服务治理层,即 nacos(本次实验我们不关注 sentinel);
- 部署 5 个微服务;
- 部署网关组件;
- 部署前端组件。
数据层有 mysql 和 redis。在上一篇文章中,我们已经部署了的 Service(背后都是 StatefulSet)有:
记住上面的 Service 名称,我们会在后面用到。
因此,接下来我们应当做的是,将 Ruoyi-Cloud 数据导入到集群数据库 his-mysql-nodeport
中。
3.1 导入 Ruoy-Cloud 的数据
可以发现,his-mysql-nodeport
暴露的节点端口为 30864
,因此我们可以在 DataGrip 中创建和 192.168.23.160:30864
的连接,然后执行 PROJ/RuoYi-Cloud/sql
目录下的全部文件:
至此,Ruoyi-Cloud 项目的配置数据和演示数据均已导入集群中的 mysql 实例中。
3.2 Nacos 上云
根据 nacos 的集群模式部署官方教程 2,我们在 KubeSphere 中创建一个名为 his-nacos
的 Headless Service,指向一个有状态应用 his-nacos-v1
,并通过 his-nacos-v1
控制三个 Pod:his-nacos-v1-0
、his-nacos-v1-1
和 his-nacos-v1-2
,基础镜像为 nacos/nacos-server:v2.0.3
。在创建时,需要暴露 8848
、9848
和 9849
三个端口,且暂时不绑定任何存储卷及配置卷。
根据官方教程,当以集群模式部署时,除了要配置 application.properties
文件,还需要在 cluster.conf
文件中配置集群信息。
考虑到 Kubernetes 中 Pod 会被反复创建和销毁,内网 IP 处于不断变化之中,我们应当在 cluster.conf
中写的是域名而非 IP 地址。因此,应当写:
# cluster.conf
his-nacos-v1-0.his-nacos.his.svc.cluster.local:8848
his-nacos-v1-1.his-nacos.his.svc.cluster.local:8848
his-nacos-v1-2.his-nacos.his.svc.cluster.local:8848
对于 application.properties
文件,别忘了将
db.url.0=jdbc:mysql://127.0.0.1:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=fal se&serverTimezone=UTC
修改为
db.url.0=jdbc:mysql://192.168.23.160:30864/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=fal se&serverTimezone=UTC
其中 30864
是 his-mysql-nodeport
所暴露的节点端口。当然,我们将 192.168.23.160:30864
换成 his-mysql-nodeport.his:3306
也是完全可行的。
接下来,我们要配置这两个文件并挂载。登录任意一个 nacos Pod,可以发现这两个配置文件在目录 /home/nacos/conf
下。因此,两个 ConfiMap 的挂载路径分别为 /home/nacos/conf/application.properties
和 /home/nacos/conf/cluster.conf
。
注意,这两个配置文件应当以精确子路径的方式被挂载,否则会覆盖容器的 /home/nacos/conf/
目录:
Nacos 的所有数据存储在集群中的 mysql 实例中。因此,它不需要挂载任何别的存储卷。现在,我们删除 his-nacos-v1
这个有状态应用和对应的 Headless Servicehis-nacos
,然后重新创建它。这一次创建,我们挂载两个配置文件。如果一切顺利,应当有:
现在,我们以 NodePort 的方式访问 nacos——以默认账户密码登录 http://192.168.23.160:30354/nacos/
,应该可以看到先前导入的 Ruoyi-Cloud 项目的所有配置:
至此,nacos 上云完毕。
3.3 微服务上云
按照步骤,接下来我们将各个微服务上云。想要让这些特定的 java 微服务在 Kuerbnetes 中启动,首先需要获得它们的镜像。
实际上,Ruoyi-Cloud 自带了各个微服务的镜像构建文件,以 PROJ/Ruoyi-Cloud/docker/auth/dockerfile
为例:
(base) ➜ auth git:(master) cat dockerfile
# 基础镜像
FROM openjdk:8-jre
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制 jar 文件到路径
COPY ./jar/ruoyi-auth.jar /home/ruoyi/ruoyi-auth.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","ruoyi-auth.jar"]
但是,这个 dockerfile 所构建的镜像只适合开发环境,并不适合生产环境。我们最终采用的是雷丰阳开发的 dockerfile:
# registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-auth:v2
FROM openjdk:8-jdk
LABEL maintainer=leifengyang
# 此处是为了使用 nacos 中 prod 环境的配置来启动本微服务,这是将在 IDEA 中启动 dev 环境下的微服务行为模仿到 prod 环境。
# 注意,我们要提前在 nacos 中创建 prod 命名空间。
# 此外,注意确保 nacos 的访问域名为 his-nacos.his
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
# 暴露 8080 端口
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}"]
如注释所说,我们需要先在 nacos 中 dev 环境中的配置全部 clone 到新创建的 prod 环境中:
然后,我们需要在 nacos 控制面板中把这些微服务配置文件中的 redis 和 mysql 的访问地址从 localhost
分别改为 his-redis-nodeport.his
和 his-mysql-nodeport.his
。
生产环境准备完毕后,终于可以将 java 微服务上云了。上云操作可划分为如下三个步骤:
- 源码打包:通过 maven 将微服务打包成 jar 文件;
- 制作镜像:使用 docker 根据 dockerfile 制作微服务镜像并推送至 DockerHub 或私有仓库;
- 启动容器:从仓库拉取镜像并启动。
此处我们省略前两个步骤,直接使用雷丰阳已经制作好的镜像:
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-auth:v2
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-file:v2
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-gateway:v2
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-job:v2
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-system:v2
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v2
所有微服务均以无状态应用的方式部署,且除了 ruoyi-ui
,其余微服务均不暴露外网访问入口。笔者就不展示点点鼠标这些步骤的截图了,如果一切顺利,应当可以在 nacos 的服务列表中看到所有 6 个微服务:
注意,因为我们没有部署 sentinel,而 sentinel 也默认通过 localhost:8848
访问 nacos,所以记得在 ruoyi-gateway-prod.yml
中补充上 sentinel 的配置信息,并将 localhost:8848
改为 his-nacos.his:8848
。
3.3 前端上云
前端项目上云也服从上一子章节所述的三个步骤,只不过打包工具从 maven 换成了 npm。前端项目通常以 nginx 作为基础镜像。需要注意的是,与 ruoyi-ui 打交道的 ruoyi-gateway 在集群中的访问地址不再是 localhost:8080
,而是 ruoyi-gateway.his:8080
,因此,在制作镜像时。别忘了在 nginx.conf
中修改这一点。此外,我们也需要将 nginx.conf
中的 server_name
字段从 localhost
修改为 _
。
同样地,我们直接使用已经发布的镜像:
registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-ui:v2
我们依据此镜像创建 ruoyi-ui 这个无状态应用并暴露一个 NodePort 类型的 Service,然后访问它:
我们点击 “系统管理 - 用户管理”,添加一个名为 zhl 的用户:
如果一切顺利,在 DataGrip 中连接 hyis-mysql-nodeport:3306
,查询 sys_user
这张表,应当可以看到刚才新增的用户:
4 总结
经过以上极度繁琐且极易出错的步骤后,我们终于成功将 Ruoyi-Cloud 部署在集群中了。虽然我们全方位基于 KubeSphere 的 UI 进行操作,但是仍然无法避免遇到各种各样的问题。 此外,以上步骤是不可重复的,一旦更新了项目各组件的镜像,所有步骤免不了重新来过。读者如果自主将这个项目在集群中部署一遍,应该就能体会到为什么 DevOps 势在必行。
参考
本文参考了雷丰阳的视频课程 云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps。 如果想全面而深入地自主实践,推荐观看原视频。
转载申请
本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。您必须给出适当的署名,并标明是否对本文作了修改。
-
将 nacos 以集群模式部署请参考 https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html。不过,在不对微服务源代码做任何修改的情况下,微服务无法访问集群模式的 nacos。因此,在下面的部署中,我们最终还是将 nacos 以 standalone 模式进行部署。若要做到这一点,只需要在创建时添加一个环境变量
MODE=standalone
,然后将副本数置为 1 即可。 ↩︎