• 【云原生实战】KubeSphere实战——多租户系统实战


    🔎这里是【云原生实战】,关注我学习云原生不迷路
    👍如果对你有帮助,给博主一个免费的点赞以示鼓励
    欢迎各位🔎点赞👍评论收藏⭐️ 

    👀专栏介绍

    【云原生实战】 目前主要更新KubeSphere,一起学习一起进步。

    👀本期介绍

    主要介绍KubeSphere实战

    文章目录

    多租户系统实战

    中间件部署实战

    1、部署MySQL

    2、部署Redis

    3、部署ElasticSearch

    4、应用商店

    5、应用仓库

    RuoYi-Cloud部署实战

    1、项目

    3、上云优化

    附录

    多租户系统实战

    中间件部署实战

    1、部署MySQL

    1、mysql容器启动

    1. docker run -p 3306:3306 --name mysql-01 \
    2. -v /mydata/mysql/log:/var/log/mysql \
    3. -v /mydata/mysql/data:/var/lib/mysql \
    4. -v /mydata/mysql/conf:/etc/mysql/conf.d \
    5. -e MYSQL_ROOT_PASSWORD=root \
    6. --restart=always \
    7. -d mysql:5.7

    2、mysql配置示例

    1. [client]
    2. default-character-set=utf8mb4
    3. [mysql]
    4. default-character-set=utf8mb4
    5. [mysqld]
    6. init_connect='SET collation_connection = utf8mb4_unicode_ci'
    7. init_connect='SET NAMES utf8mb4'
    8. character-set-server=utf8mb4
    9. collation-server=utf8mb4_unicode_ci
    10. skip-character-set-client-handshake
    11. skip-name-resolve

    3、mysql部署分析

    1、集群内部,直接通过应用的 【服务名.项目名】 直接访问

    mysql -uroot -hhis-mysql-glgf.his -p

    2、集群外部,

    2、部署Redis

    1、redis容器启动

    1. #创建配置文件
    2. ## 1、准备redis配置文件内容
    3. mkdir -p /mydata/redis/conf && vim /mydata/redis/conf/redis.conf
    4. ##配置示例
    5. appendonly yes
    6. port 6379
    7. bind 0.0.0.0
    8. #docker启动redis
    9. docker run -d -p 6379:6379 --restart=always \
    10. -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
    11. -v /mydata/redis-01/data:/data \
    12. --name redis-01 redis:6.2.5 \
    13. redis-server /etc/redis/redis.conf

    2、redis部署分析

    3、部署ElasticSearch

    1、es容器启动

    1. # 创建数据目录
    2. mkdir -p /mydata/es-01 && chmod 777 -R /mydata/es-01
    3. # 容器启动
    4. docker run --restart=always -d -p 9200:9200 -p 9300:9300 \
    5. -e "discovery.type=single-node" \
    6. -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
    7. -v es-config:/usr/share/elasticsearch/config \
    8. -v /mydata/es-01/data:/usr/share/elasticsearch/data \
    9. --name es-01 \
    10. elasticsearch:7.13.4

    2、es部署分析

    注意: 子路径挂载,配置修改后,k8s不会对其Pod内的相关配置文件进行热更新,需要自己重启Pod

    4、应用商店

    可以使用 dev-zhao 登录,从应用商店部署

    5、应用仓库

    使用企业空间管理员(wuhan-boss)登录,设置应用仓库

    学习Helm即可,去helm的应用市场添加一个仓库地址,比如:bitnami

    RuoYi-Cloud部署实战

    1、项目

    RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本

    2、架构

    https://gitee.com/zhangmrit/ruoyi-cloud/blob/nacos/doc/ruoyi-cloud.png

    3、上云优化

    • 1、每个微服务准备 bootstrap.properties,配置 nacos地址信息。默认使用本地
    • 2、每个微服务准备Dockerfile,启动命令,指定线上nacos配置等。
    • 3、每个微服务制作自己镜像。

    附录

    1、Dockerfile

    1. FROM openjdk:8-jdk
    2. LABEL maintainer=leifengyang
    3. #docker run -e PARAMS="--server.port 9090"
    4. 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"
    5. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    6. COPY target/*.jar /app.jar
    7. EXPOSE 8080
    8. #
    9. ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]

    规则:

    1、容器默认以8080端口启动

    2、时间为CST

    3、环境变量 PARAMS 可以动态指定配置文件中任意的值

    4、nacos集群内地址为 his-nacos.his:8848

    5、微服务默认启动加载 nacos中 服务名-激活的环境.yml 文件,所以线上的配置可以全部写在nacos中。

    2、部署nacos

    1、nacos.sql文件

    1、下载nacos数据库文件

    nacos/nacos-mysql.sql at develop · alibaba/nacos · GitHub

    1. #2、要执行以下文件,按照要求先创库
    2. CREATE DATABASE `nacos`;
    3. USE nacos;
    4. ####################################################
    5. /*
    6. * Copyright 1999-2018 Alibaba Group Holding Ltd.
    7. *
    8. * Licensed under the Apache License, Version 2.0 (the "License");
    9. * you may not use this file except in compliance with the License.
    10. * You may obtain a copy of the License at
    11. *
    12. * http://www.apache.org/licenses/LICENSE-2.0
    13. *
    14. * Unless required by applicable law or agreed to in writing, software
    15. * distributed under the License is distributed on an "AS IS" BASIS,
    16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    17. * See the License for the specific language governing permissions and
    18. * limitations under the License.
    19. */
    20. /******************************************/
    21. /* 数据库全名 = nacos_config */
    22. /* 表名称 = config_info */
    23. /******************************************/
    24. CREATE TABLE `config_info` (
    25. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    26. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    27. `group_id` varchar(255) DEFAULT NULL,
    28. `content` longtext NOT NULL COMMENT 'content',
    29. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
    30. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    31. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
    32. `src_user` text COMMENT 'source user',
    33. `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
    34. `app_name` varchar(128) DEFAULT NULL,
    35. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    36. `c_desc` varchar(256) DEFAULT NULL,
    37. `c_use` varchar(64) DEFAULT NULL,
    38. `effect` varchar(64) DEFAULT NULL,
    39. `type` varchar(64) DEFAULT NULL,
    40. `c_schema` text,
    41. PRIMARY KEY (`id`),
    42. UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    43. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
    44. /******************************************/
    45. /* 数据库全名 = nacos_config */
    46. /* 表名称 = config_info_aggr */
    47. /******************************************/
    48. CREATE TABLE `config_info_aggr` (
    49. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    50. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    51. `group_id` varchar(255) NOT NULL COMMENT 'group_id',
    52. `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
    53. `content` longtext NOT NULL COMMENT '内容',
    54. `gmt_modified` datetime NOT NULL COMMENT '修改时间',
    55. `app_name` varchar(128) DEFAULT NULL,
    56. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    57. PRIMARY KEY (`id`),
    58. UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
    59. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
    60. /******************************************/
    61. /* 数据库全名 = nacos_config */
    62. /* 表名称 = config_info_beta */
    63. /******************************************/
    64. CREATE TABLE `config_info_beta` (
    65. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    66. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    67. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
    68. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
    69. `content` longtext NOT NULL COMMENT 'content',
    70. `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
    71. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
    72. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    73. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
    74. `src_user` text COMMENT 'source user',
    75. `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
    76. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    77. PRIMARY KEY (`id`),
    78. UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    79. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
    80. /******************************************/
    81. /* 数据库全名 = nacos_config */
    82. /* 表名称 = config_info_tag */
    83. /******************************************/
    84. CREATE TABLE `config_info_tag` (
    85. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    86. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    87. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
    88. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
    89. `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
    90. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
    91. `content` longtext NOT NULL COMMENT 'content',
    92. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
    93. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    94. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
    95. `src_user` text COMMENT 'source user',
    96. `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
    97. PRIMARY KEY (`id`),
    98. UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
    99. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
    100. /******************************************/
    101. /* 数据库全名 = nacos_config */
    102. /* 表名称 = config_tags_relation */
    103. /******************************************/
    104. CREATE TABLE `config_tags_relation` (
    105. `id` bigint(20) NOT NULL COMMENT 'id',
    106. `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
    107. `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
    108. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
    109. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
    110. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
    111. `nid` bigint(20) NOT NULL AUTO_INCREMENT,
    112. PRIMARY KEY (`nid`),
    113. UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
    114. KEY `idx_tenant_id` (`tenant_id`)
    115. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
    116. /******************************************/
    117. /* 数据库全名 = nacos_config */
    118. /* 表名称 = group_capacity */
    119. /******************************************/
    120. CREATE TABLE `group_capacity` (
    121. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    122. `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
    123. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
    124. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
    125. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
    126. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
    127. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
    128. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
    129. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    130. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
    131. PRIMARY KEY (`id`),
    132. UNIQUE KEY `uk_group_id` (`group_id`)
    133. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
    134. /******************************************/
    135. /* 数据库全名 = nacos_config */
    136. /* 表名称 = his_config_info */
    137. /******************************************/
    138. CREATE TABLE `his_config_info` (
    139. `id` bigint(64) unsigned NOT NULL,
    140. `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    141. `data_id` varchar(255) NOT NULL,
    142. `group_id` varchar(128) NOT NULL,
    143. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
    144. `content` longtext NOT NULL,
    145. `md5` varchar(32) DEFAULT NULL,
    146. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    147. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    148. `src_user` text,
    149. `src_ip` varchar(50) DEFAULT NULL,
    150. `op_type` char(10) DEFAULT NULL,
    151. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
    152. PRIMARY KEY (`nid`),
    153. KEY `idx_gmt_create` (`gmt_create`),
    154. KEY `idx_gmt_modified` (`gmt_modified`),
    155. KEY `idx_did` (`data_id`)
    156. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
    157. /******************************************/
    158. /* 数据库全名 = nacos_config */
    159. /* 表名称 = tenant_capacity */
    160. /******************************************/
    161. CREATE TABLE `tenant_capacity` (
    162. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    163. `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
    164. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
    165. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
    166. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
    167. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
    168. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
    169. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
    170. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    171. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
    172. PRIMARY KEY (`id`),
    173. UNIQUE KEY `uk_tenant_id` (`tenant_id`)
    174. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
    175. CREATE TABLE `tenant_info` (
    176. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
    177. `kp` varchar(128) NOT NULL COMMENT 'kp',
    178. `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
    179. `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
    180. `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
    181. `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
    182. `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
    183. `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
    184. PRIMARY KEY (`id`),
    185. UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
    186. KEY `idx_tenant_id` (`tenant_id`)
    187. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
    188. CREATE TABLE `users` (
    189. `username` varchar(50) NOT NULL PRIMARY KEY,
    190. `password` varchar(500) NOT NULL,
    191. `enabled` boolean NOT NULL
    192. );
    193. CREATE TABLE `roles` (
    194. `username` varchar(50) NOT NULL,
    195. `role` varchar(50) NOT NULL,
    196. UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
    197. );
    198. CREATE TABLE `permissions` (
    199. `role` varchar(50) NOT NULL,
    200. `resource` varchar(255) NOT NULL,
    201. `action` varchar(8) NOT NULL,
    202. UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
    203. );
    204. INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
    205. INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

    2、application.properties 文件

    1. spring.datasource.platform=mysql
    2. db.num=1
    3. db.url.0=jdbc:mysql://11.162.196.16:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    4. db.user=nacos_devtest
    5. db.password=youdontknow

    3、推送镜像给阿里云

    • 开通阿里云“容器镜像服务(个人版)”
    • 创建一个名称空间(lfy_ruoyi)。(存储镜像)
    • 推送镜像到阿里云镜像仓库
    1. $ docker login --username=forsum**** registry.cn-hangzhou.aliyuncs.com
    2. #把本地镜像,改名,成符合阿里云名字规范的镜像。
    3. $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/镜像名:[镜像版本号]
    4. ## docker tag 461955fe1e57 registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v1
    5. $ docker push registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/镜像名:[镜像版本号]
    6. ## docker push registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v1

    4、ruoyi所有镜像

    1. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-auth:v2
    2. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-file:v2
    3. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-gateway:v2
    4. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-job:v2
    5. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-system:v2
    6. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-visual-monitor:v2
    7. docker pull registry.cn-hangzhou.aliyuncs.com/lfy_ruoyi/ruoyi-ui:v2

    5、部署规则

    • 应用一启动会获取到 "应用名-激活的环境标识.yml"
    • 每次部署应用的时候,需要提前修改nacos线上配置,确认好每个中间件的连接地址是否正确

    redis: his-redis.his

    mysql:

  • 相关阅读:
    Android13系统启动异常,卡在动画界面
    [附源码]计算机毕业设计springboot校园订餐系统
    java插值查找(含插值查找的代码)
    Hbase基本使用,读写原理,性能优化学习
    e^x的导数
    存储中的爱情:cookie、本地存储、会话存储
    frp内网穿透并搭建多个域名同时映射
    《异常检测——从经典算法到深度学习》19 OmniAnomaly:基于随机循环网络的多元时间序列鲁棒异常检测
    Android Glide, first start based on loadThumbnail, Kotlin(一)
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
  • 原文地址:https://blog.csdn.net/weixin_45481821/article/details/125110487