公司内部准备用 docker 逐步替换掉原本直接搭在 LVS 上的测试环境,将分散的物理机资源整合起来。
按照我的思路,新拿一台 LVS 跑 docker,然后一个服务起一个容器,容器配好、互通正常,基本这活儿就算结了。
结果今天突然来个需求,说让我把几个服务一起塞到一个容器里(譬如一个 container 里面同时跑 NGINX+MySQL+Tomcat )。
单容器多服务这种做法到底有没有意义……我感觉这又回到 LVS 的形式上了。
你要塞,OK,你以哪个为主进程?
多进程容器最大的问题是,从容器外部只看得到主进程的状态,容器本身生命周期是和主进程完全同步的。
也就是说,要么你放弃子进程生命周期的控制,要么你自己实现子进程的监控重启各种生命周期的事情。
既然要搞这么多幺蛾子,为啥不 vm+systemd 搞定一切……
docker 的本质是进程。除了主进程其他进程都是野孩子。所以你需要容器编排。k8s 的 pod 可以搞成多容器的,如果有启动顺序要求可以试试 statusfulset 这个玩意。
用它来搭建测试环境,用来简化部署和测试的效率,那就越简单越好,做到傻瓜式的开箱即用,所有的服务都打到一起是很好的选择。当然再进一步用 docker compose 也是很不错的,至于 k8s 在这种场景下就有点大炮打蚊子了。
测试环境这么搞没毛病啊,难道你测试环境还需要跑 300 个应用负载均衡吗?
测试环境这么搞的好处就是开箱即用,可以同时跑多个测试环境,然后玩坏了直接干掉重建就好了。挂就挂了呗,测试环境哪来的业务啊。
gitlab 官方也是这么封装的,其实无非就是一炸都炸和不方便扩展而已。。。
编排的优势:
1. 更加易于横向扩展
2. 更容易定位问题
3. 更容易升级版本号
4. 日志更加清晰明确
......