因为K8S目前切实是太火了,之前始终说要给mall我的项目出个K8S部署计划,这次它来啦!在更新完K8S系列教程后,是时候来波实际了,拿mall-swarm
我的项目来实际真的是刚刚好。如果你有在Docker下部署该项目标经验,而且曾经学习了我的K8S系列教程的话,置信你可能轻松上手!
SpringCloud实战电商我的项目mall-swarm(6.1k+star)地址:https://github.com/macrozheng/mall-swarm
服务器布局
咱们先来说下服务器布局吧,之前始终应用的是单机部署所有服务,这次咱们应用两台服务器来部署。
- 根底服务器(192.168.3.101):用于部署
mall-swarm
的依赖服务,包含MySql、Redis、Elasticsearch等与利用无关的服务,采纳Docker形式来部署。 - 应用服务器(192.168.3.102):用于部署
mall-swarm
的应用服务,包含mall-admin、mall-portal、mall-search等应用服务,采纳K8S形式来部署。
镜像打包及推送
为了不便部署,咱们把mall-swarm
的所有利用镜像都上传到Docker Hub下来。
- 首先批改我的项目根目录下的
pom.xml
文件;
<properties> <!--改为你本人的Docker服务近程拜访地址--> <docker.host>http://192.168.3.101:2375</docker.host></properties>
- 应用Maven插件将所有镜像打包到Linux服务器上,间接应用根我的项目下的
package
命令即可;
- 批改所有镜像标签名称,批改本地镜像标签名称为近程镜像标签名称;
docker tag mall/mall-gateway:1.0-SNAPSHOT macrodocker/mall-gateway:1.0-SNAPSHOTdocker tag mall/mall-auth:1.0-SNAPSHOT macrodocker/mall-auth:1.0-SNAPSHOTdocker tag mall/mall-monitor:1.0-SNAPSHOT macrodocker/mall-monitor:1.0-SNAPSHOTdocker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOTdocker tag mall/mall-portal:1.0-SNAPSHOT macrodocker/mall-portal:1.0-SNAPSHOTdocker tag mall/mall-search:1.0-SNAPSHOT macrodocker/mall-search:1.0-SNAPSHOT
- 批改实现后查问
macrodocker
相干镜像显示如下,macrodocker
为咱们在Docker Hub上的仓库地址;
[root@local-linux ~]# docker images |grep macrodockermacrodocker/mall-auth 1.0-SNAPSHOT 72df5f91f2d7 9 minutes ago 699MBmacrodocker/mall-gateway 1.0-SNAPSHOT 4055dfc1e601 9 minutes ago 708MBmacrodocker/mall-monitor 1.0-SNAPSHOT 492d9bb4375c 9 minutes ago 696MBmacrodocker/mall-portal 1.0-SNAPSHOT 8dd79675f40c 10 minutes ago 719MBmacrodocker/mall-search 1.0-SNAPSHOT f0d0d80c590f 10 minutes ago 734MBmacrodocker/mall-admin 1.0-SNAPSHOT 15737ce903a9 11 minutes ago 715MB
- 之后推送镜像到Docker Hub,如果你不想本人推送镜像,能够应用我曾经上传好到镜像。
# 登录Docker Hubdocker login# 推送到近程仓库docker push macrodocker/mall-gateway:1.0-SNAPSHOTdocker push macrodocker/mall-auth:1.0-SNAPSHOTdocker push macrodocker/mall-monitor:1.0-SNAPSHOTdocker push macrodocker/mall-admin:1.0-SNAPSHOTdocker push macrodocker/mall-portal:1.0-SNAPSHOTdocker push macrodocker/mall-search:1.0-SNAPSHOT
根底服务器部署
咱们仍然应用Docker来部署依赖服务,mall-swarm
运行须要的依赖服务如下,应用Docker Compose脚本装置更不便,Docker Compose应用请参考:《应用Docker Compose部署SpringBoot利用》 。
组件 | 版本号 |
---|---|
Mysql | 5.7 |
Redis | 5.0 |
MongoDb | 4.3.5 |
RabbitMq | 3.7.15 |
Nginx | 1.10 |
Elasticsearch | 7.6.2 |
Logstash | 7.6.2 |
Kibana | 7.6.2 |
Nacos | 1.3.0 |
- 本我的项目曾经提供好了Docker Compose脚本,间接执行如下命令即可,脚本地址:https://github.com/macrozheng...
docker-compose -f docker-compose-env.yml up -d
- 某些零碎组件无奈启动问题,具体参考:《mall在Linux环境下的部署(基于Docker Compose)》
- 部署实现后,查看Docker中运行的服务显示如下。
[root@local-linux ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESfef5695319d1 nacos/nacos-server:1.3.0 "bin/docker-startup.…" 3 months ago Up 6 hours 0.0.0.0:8848->8848/tcp nacos-registrye7ec37fcafda elasticsearch:7.6.2 "/usr/local/bin/dock…" 3 months ago Up 6 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch427f0176c426 mongo:4.2.5 "docker-entrypoint.s…" 3 months ago Up 6 hours 0.0.0.0:27017->27017/tcp mongo5618ed50942a redis:5 "docker-entrypoint.s…" 3 months ago Up 6 hours 0.0.0.0:6379->6379/tcp redis1744f412c6f4 rabbitmq:3.7.15-management "docker-entrypoint.s…" 3 months ago Up 6 hours 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq6b26f63dfad6 mysql:5.7 "docker-entrypoint.s…" 3 months ago Up 6 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
应用服务器部署
咱们将把mall-swarm
中所有应用服务都部署到K8S上,应用Rancher来进行可视化治理。
装置Rancher
- 首先须要装置Rancher,先下载Rancher的Docker镜像;
docker pull rancher/rancher:v2.5-head
- 下载实现后在Docker容器中运行Rancher服务;
docker run -p 80:80 -p 443:443 --name rancher \--privileged \--restart=unless-stopped \-d rancher/rancher:v2.5-head
- Rancher启动胜利后,通过如下地址就能够拜访它的主页了:http://192.168.3.102
批改Nacos配置
将我的项目config
目录下的所有配置都增加到Nacos中,因为应用服务都部署到了K8S中,所以须要批改相干配置。
- 将配置信息增加到Nacos中后显示信息如下,Nacos拜访地址:http://192.168.3.101:8848/nac...
- 批改
mall-admin-prod.yaml
配置,批改MySql和Redis连贯地址即可,之前是通过--link
的模式拜访的,这次须要改为IP进行拜访;
spring: datasource: url: jdbc:mysql://192.168.3.101:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root redis: host: 192.168.3.101 # Redis服务器地址 database: 0 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连贯端口 password: #不设置明码
- 批改
mall-gateway-prod.yaml
配置,批改Redis连贯地址及JWT的publicKey拜访地址即可(当在K8S中创立服务后,能够通过服务名进行拜访);
spring: redis: host: 192.168.3.101 # Redis服务器地址 database: 0 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连贯端口 password: #不设置明码 security: oauth2: resourceserver: jwt: jwk-set-uri: 'http://mall-gateway-service:8201/mall-auth/rsa/publicKey'
- 批改
mall-portal-prod.yaml
配置,批改MySql、MongoDb、Redis、RabbitMq连贯地址即可;
spring: datasource: url: jdbc:mysql://192.168.3.101:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root data: mongodb: host: 192.168.3.101 port: 27017 database: mall-port redis: host: 192.168.3.101 # Redis服务器地址 database: 0 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连贯端口 password: #不设置明码 rabbitmq: host: 192.168.3.101 port: 5672 virtual-host: /mall username: mall password: mall publisher-confirms: true #如果对异步音讯须要回调必须设置为true
- 批改
mall-search-prod.yaml
配置,批改MySql、Elasticsearch连贯地址即可。
spring: datasource: url: jdbc:mysql://192.168.3.101:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root elasticsearch: rest: uris: http://192.168.3.101:9200
应用Rancher部署利用
当应用Rancher创立Deployment时,如果镜像下载过慢会呈现超时,能够进入到Rancher容器中手动进行下载。
- 首先进入Rancher容器外部;
docker exex -it rancher /bin/bash
- 通过
crictl
命令下载利用镜像,下载过程有点慢而且没有进度条,须要急躁期待;
k3s crictl pull macrodocker/mall-gateway:1.0-SNAPSHOTk3s crictl pull macrodocker/mall-auth:1.0-SNAPSHOTk3s crictl pull macrodocker/mall-monitor:1.0-SNAPSHOTk3s crictl pull macrodocker/mall-admin:1.0-SNAPSHOTk3s crictl pull macrodocker/mall-portal:1.0-SNAPSHOTk3s crictl pull macrodocker/mall-search:1.0-SNAPSHOT
- 下载实现后查看镜像显示内容如下;
root@ae85f823208f:/var/lib/rancher# k3s crictl images |grep macrodockerdocker.io/macrodocker/mall-admin 1.0-SNAPSHOT 15737ce903a94 308MBdocker.io/macrodocker/mall-auth 1.0-SNAPSHOT 72df5f91f2d74 293MBdocker.io/macrodocker/mall-gateway 1.0-SNAPSHOT 4055dfc1e6016 301MBdocker.io/macrodocker/mall-monitor 1.0-SNAPSHOT 492d9bb4375c6 291MBdocker.io/macrodocker/mall-portal 1.0-SNAPSHOT 8dd79675f40c1 312MBdocker.io/macrodocker/mall-search 1.0-SNAPSHOT f0d0d80c590f1 325MB
- 镜像都下载实现后,咱们就能够应用Rancher来可视化创立Deployment了,这里以
YAML
的形式来创立;
- 间接将我的项目
k8s
文件夹中的mall-admin-deployment.yaml
文件内容复制下即可;
- 之后再应用
mall-admin-service.yaml
文件创建Service;
- 这里仅以
mall-admin
利用为例创立Deployment和Service,其余利用创立过程基本相同,脚本均在我的项目的k8s文件夹中。
成果展现
应用Rancher部署完所有应用服务之后,让咱们来看看成果。
- 首先查看所有创立的Deployment;
- 查看所有创立的Service;
- 如果你想查看利用的启动日志,在Pod列表查看即可;
- 因为应用服务被部署在Rancher容器外部,无奈间接拜访,咱们能够应用Nginx反向代理来拜访,Nginx服务运行在
2080
端口上;
docker run -p 2080:2080 --name nginx \-v /mydata/nginx/html:/usr/share/nginx/html \-v /mydata/nginx/logs:/var/log/nginx \-v /mydata/nginx/conf:/etc/nginx \-d nginx:1.10
- 接下来须要取得Rancher容器运行的IP地址,应用如下命令即可;
[root@linux-local ~]# docker inspect rancher |grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "172.17.0.2", "IPAddress": "172.17.0.2",
- 创立完Nginx容器后,增加配置文件
api.conf
,将api.macrozheng.com
域名的拜访反向代理到K8S中的mall-gateway-service
服务下来;
server { listen 2080; server_name api.macrozheng.com; #批改域名 location / { proxy_set_header Host $host:$server_port; proxy_pass http://172.17.0.2:30201; #批改为代理服务地址 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}
- 再批改拜访Linux服务器的本机host文件,增加如下记录;
192.168.3.102 api.macrozheng.com
- 其实也能够不必Nginx来进行反向代理,创立容器的时候将
mall-gateway-service
的端口映射进去即可;
docker run -p 80:80 -p 443:443 -p 8201:30201 --name rancher \--privileged \--restart=unless-stopped \-d rancher/rancher:v2.5-head
- 通过Nginx即可拜访
mall-swarm
的接口文档,拜访地址:http://api.macrozheng.com:208...
总结
通过把mall-swarm
我的项目部署到K8S上,咱们能够发现K8S也没有设想中到那么难,K8S中的很多货色都是和Docker相通的!当咱们听到音讯称某个新技术要取代旧技术了,往往会困惑咱们学的那些旧技术是不是过期了,没用了?其实咱们大可不必放心,往往新技术都是在旧技术的根底上产生的,而且那些会旧技术的人会更容易把握新技术!
K8S系列教程
再次举荐一波我的K8S系列教程,K8S实战看这些就对了!
- K8S太火了!花10分钟玩转它不香么?
- 自从上了K8S,我的项目更新都不带停机的!
- 我把SpringBoot利用部署到了K8S上,怎么感觉用起来像Docker!
- 再见命令行!K8S傻瓜式装置,图形化治理真香!
- 看看人家那开源我的项目文档写的,那叫一个敌对!
- 据说只有高端机器才配运行K8S,网友:1G内存的渣渣跑起来了!
- 再见 Docker !5分钟转型 containerd !
我的项目源码地址
https://github.com/macrozheng...