Java学习笔记Java 杂谈开发技巧

重磅更新!mall 微服务版本支持K8S部署啦!

2021-03-10  本文已影响0人  程序员知识圈

由于K8S目前实在是太火了,之前一直说要给mall项目出个K8S部署方案,这次它来啦!在更新完K8S系列教程后,是时候来波实践了,拿mall-swarm项目来实践真的是刚刚好。如果你有在Docker下部署该项目的经历,而且已经学习了我的K8S系列教程的话,相信你能够轻松上手!

服务器规划

我们先来说下服务器规划吧,之前一直使用的是单机部署所有服务,这次我们使用两台服务器来部署。

镜像打包及推送

为了方便部署,我们把mall-swarm的所有应用镜像都上传到Docker Hub上去。

<properties>
    <!--改为你自己的Docker服务远程访问地址-->
    <docker.host>http://192.168.3.101:2375</docker.host>
</properties>
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
[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 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脚本安装更方便

image.png
docker-compose -f docker-compose-env.yml up -d
[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         

应用服务器部署

我们将把mall-swarm中所有应用服务都部署到K8S上,使用Rancher来进行可视化管理。

安装Rancher

docker pull rancher/rancher:v2.5-head
docker run -p 80:80 -p 443:443 --name rancher \
--privileged \
--restart=unless-stopped \
-d rancher/rancher:v2.5-head

将项目config目录下的所有配置都添加到Nacos中,由于应用服务都部署到了K8S中,所以需要修改相关配置。

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: #不设置密码
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'
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
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容器中手动进行下载。

docker exex -it rancher /bin/bash
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部署完所有应用服务之后,让我们来看看效果。

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
[root@linux-local ~]# docker inspect rancher |grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
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;
    }

}
192.168.3.102 api.macrozheng.com
docker run -p 80:80 -p 443:443 -p 8201:30201 --name rancher \
--privileged \
--restart=unless-stopped \
-d rancher/rancher:v2.5-head

总结

通过把mall-swarm项目部署到K8S上,我们可以发现K8S也没有想象中到那么难,K8S中的很多东西都是和Docker相通的!当我们听到消息称某个新技术要取代旧技术了,往往会困惑我们学的那些旧技术是不是过时了,没用了?其实我们大可不必担心,往往新技术都是在旧技术的基础上产生的,而且那些会旧技术的人会更容易掌握新技术!

上一篇 下一篇

猜你喜欢

热点阅读