- 背景:公司有专门的k8s运维,做的项目是酒店自助机,基本业务:自助机前端有刷身份证查订单/现场预定/退房/办理入住/生成房卡等功能,后端对接不同的酒店系统以及公安系统,业务办理需要公安和原生酒店系统都要对接。
- 问题描述:如家酒店有两套环境,私有化环境和公网环境,公网环境功能少,私有化环境的系统部署到如家自己的服务器上,公网的后端是部署在阿里云。当然,测试环境也是两套。结果就再一次发布生产(私有化)的时候,对接如家的java项目启动失败
- 抽丝剥茧:看报错日志,发现是连接配置中心连不上,连的是公网的配置中心。也就是说用公网的docker镜像部署到了私有化环境(公网用的配置中心是阿里云的acm,私有化用的配置中心是nacos),私有化环境是连不了外网的。运维说是代码问题, 可检查了配置也没毛病,然后让运维帮忙查,运维始终认为是代码的毛病不给查。他还凶我。很受伤。
- 继续抽丝剥茧:那就自己查。先让如家的开发把生产环境的镜像给发过来,解压出来,找到jar,再解压,发现确实用的是公网的jar(acm的jar,没有nacos的jar),那就要看devOps是怎么把私有化的镜像打包成公网镜像的,就去查jenkins的打包部署日志。日志里找到了打包生成的镜像id,然后问运维这个镜像id的逻辑是什么样的,他说是这个镜像id是测试和生产环境公用的id,也就是部署到生产和测试的镜像是一样的。 那就是说,生产的那个镜像id是在测试环境部署的时候生成的,然后问他,生产的镜像id是怎么来的,他说是最新一次部署的,也就是说,测试测的是哪个镜像,部署就用哪个镜像上生产。然后我就去拿生产环境镜像的id去测试jenkins的两套环境里的部署日志里找,果然,在公网的环境jenkins上找到了这个镜像id.
- 原因:找到了 “私有化生产环境的镜像 是 公网测试环境所打的镜像包”,且生产环境是用一个项目的最新的镜像, 问题的原因就浮出水面:本来测试是在私有化的测试环境测的,可当时有些功能是在公网的,测试就部署了公网的测试环境, 巧在 正好在这次部署后, 就发布了生产(私有化)
- 解决方案:运维给两套环境生成的镜像id增加了环境的前缀public/private,用来表示公网还是私有化,部署的时候,取最新一个对应前缀的镜像id去部署。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
不管怎么样,都要继续充满着希望 上一章简单介绍了适配器模式(九), 如果没有看过, 请观看上一章 一. 桥接模式 引用 菜鸟教程里面的 桥接模式介绍: https://www.runoob.com/design-pattern/bridge-pattern.h…