微服务在专网环境下如何实施
又是一次从现场实施归来,这次实施于以往有很大不同,在于系统整体架构从单体应用变迁到前后端分离形式,后端服务也采用docker镜像的形式打包,docker compose进行服务编排,docker swarm部署多个实例。接下来想梳理一下整个流程。
实施准备
专网环境顾名思义就是在客户的局域网内,连接不了互联网,更连不上自己公司的开发网络。要在这样的环境下部署容器技术的应用,得要做好几点准备工作:
1.制作一个带docker的系统镜像
在安装docker时,最方便的办法莫过于通过yum安装了,而由于总总原因客户的网络连接不了互联网,那要在现场安装docker最方便的办法莫过于带一个装有docker的系统镜像,在现场恢复系统镜像即可。
(小技巧:
1.为了便于迁移,系统镜像不要做太大,通过挂载一个新盘符挂载到一个新挂载点下,并修改docker的存储路径为该挂载点。在做系统镜像时,不将该挂载点打包进去,大大减少了系统镜像体积。事实证明,当我们通过网络向VMWARE ESXi系统物理路径下上传系统镜像时,传输速度很慢,主要受限于读写速度,而VMWARE ESXi创建一个大空间却十分快
2.如果你想运维方便,也可以将自己的ssh公匙打包进去)
这次实施在客户的机器上安装VMWARE ESXi6.7,通过页面访问的形式就能够新建虚拟机,十分方便,需要注意的是license,一般申请的license有内核限制,只有8核,如果你想给虚拟机更多核,就得想想办法了。
2.应用镜像的准备
微服务的模式将原有巨石应用拆分成多个服务,每个服务时通过打包成镜像扔到容器中运行提供。所以,需要将你所用到的所有服务所对应的镜像从你的私有仓库(例如:Harbor)中打包下载下来,放到U盘中带走。
docker login -u *** -p *** harbor_url #登录到harbor_url私有仓库上
docker pull target_image #拉去目标镜像至本地
docker save -o target_image.tar target_image #将目标镜像打包成tar文件
3.编写编排脚本
编写编排脚本,将所需的服务全都罗列上,将配置文件外置,应用通过读取外置文件进行配置。建议将应用内部的端口号统一,暴露端口号配置成不同。
例如:
services:
storage-service:
image: harbor_url/storage-service:latest
ports:
- 9002:8080
networks:
- demo
environment:
TZ: Asia/Shanghai
labels:
aliyun.logs.storage-service: stdout
deploy:
mode: replicated
replicas: 3
configs:
- source: storage-service-yml
target: /app/application.yml
networks:
demo:
driver: overlay
attachable: true
configs:
storage-service-yml:
file: ./storage-service.yml
4.现场搭建Harbor
在现场搭建个Harbor,作为实施测的仓库中心,将打包好的镜像push至仓库中心。
docker login -u *** -p *** new_harbor_url #登录到现场的私有仓库上
docker load -i target_image.tar #将打包文件上载
docker tag target_image new_target_image #将镜像搭上标签
docker push new_target_image #将镜像上传
5.本机电脑安装docker
最好在自己的本机电脑上安装docker,作为现场改动代码时的打包环境。
同时,最好配置好L2TP VPN,方便连入公司内网,这样团队在现场开发时,借助VPN拨号连入内网,通过公司的代码库达到代码协同。