因为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利用》 。
组件版本号
Mysql5.7
Redis5.0
MongoDb4.3.5
RabbitMq3.7.15
Nginx1.10
Elasticsearch7.6.2
Logstash7.6.2
Kibana7.6.2
Nacos1.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...