因为 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-SNAPSHOT
docker tag mall/mall-auth:1.0-SNAPSHOT macrodocker/mall-auth:1.0-SNAPSHOT
docker tag mall/mall-monitor:1.0-SNAPSHOT macrodocker/mall-monitor:1.0-SNAPSHOT
docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT
docker tag mall/mall-portal:1.0-SNAPSHOT macrodocker/mall-portal:1.0-SNAPSHOT
docker tag mall/mall-search:1.0-SNAPSHOT macrodocker/mall-search:1.0-SNAPSHOT
- 批改实现后查问
macrodocker
相干镜像显示如下,macrodocker
为咱们在 Docker Hub 上的仓库地址;
[root@local-linux ~]# docker images |grep macrodocker
macrodocker/mall-auth 1.0-SNAPSHOT 72df5f91f2d7 9 minutes ago 699MB
macrodocker/mall-gateway 1.0-SNAPSHOT 4055dfc1e601 9 minutes ago 708MB
macrodocker/mall-monitor 1.0-SNAPSHOT 492d9bb4375c 9 minutes ago 696MB
macrodocker/mall-portal 1.0-SNAPSHOT 8dd79675f40c 10 minutes ago 719MB
macrodocker/mall-search 1.0-SNAPSHOT f0d0d80c590f 10 minutes ago 734MB
macrodocker/mall-admin 1.0-SNAPSHOT 15737ce903a9 11 minutes ago 715MB
- 之后推送镜像到 Docker Hub,如果你不想本人推送镜像,能够应用我曾经上传好到镜像。
# 登录 Docker Hub
docker login
# 推送到近程仓库
docker push macrodocker/mall-gateway:1.0-SNAPSHOT
docker push macrodocker/mall-auth:1.0-SNAPSHOT
docker push macrodocker/mall-monitor:1.0-SNAPSHOT
docker push macrodocker/mall-admin:1.0-SNAPSHOT
docker push macrodocker/mall-portal:1.0-SNAPSHOT
docker 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fef5695319d1 nacos/nacos-server:1.3.0 "bin/docker-startup.…" 3 months ago Up 6 hours 0.0.0.0:8848->8848/tcp nacos-registry
e7ec37fcafda 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 elasticsearch
427f0176c426 mongo:4.2.5 "docker-entrypoint.s…" 3 months ago Up 6 hours 0.0.0.0:27017->27017/tcp mongo
5618ed50942a redis:5 "docker-entrypoint.s…" 3 months ago Up 6 hours 0.0.0.0:6379->6379/tcp redis
1744f412c6f4 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 rabbitmq
6b26f63dfad6 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-SNAPSHOT
k3s crictl pull macrodocker/mall-auth:1.0-SNAPSHOT
k3s crictl pull macrodocker/mall-monitor:1.0-SNAPSHOT
k3s crictl pull macrodocker/mall-admin:1.0-SNAPSHOT
k3s crictl pull macrodocker/mall-portal:1.0-SNAPSHOT
k3s crictl pull macrodocker/mall-search:1.0-SNAPSHOT
- 下载实现后查看镜像显示内容如下;
root@ae85f823208f:/var/lib/rancher# k3s crictl images |grep macrodocker
docker.io/macrodocker/mall-admin 1.0-SNAPSHOT 15737ce903a94 308MB
docker.io/macrodocker/mall-auth 1.0-SNAPSHOT 72df5f91f2d74 293MB
docker.io/macrodocker/mall-gateway 1.0-SNAPSHOT 4055dfc1e6016 301MB
docker.io/macrodocker/mall-monitor 1.0-SNAPSHOT 492d9bb4375c6 291MB
docker.io/macrodocker/mall-portal 1.0-SNAPSHOT 8dd79675f40c1 312MB
docker.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…