【发布时间】:2017-02-23 16:48:52
【问题描述】:
我们正在运行一个 DC/OS 集群,并且现在手动管理它,因为其中运行的容器实例数量很少,不需要太多干预。
现在,我们想从 Jenkins 进行部署 - 虽然这适用于 Marathon 插件,但我们遇到了一个或多或少有趣的问题:共享卷。
我们所有的节点都有一个安装在 /srv 的 NetApp,并且服务有 Docker 容器卷,这些卷将某些容器路径映射到 /srv 中的子目录。现在,当 Jenkins 作业导致重新部署服务时,它将让旧容器运行,同时暂存新版本并在新容器达到“健康”状态时切换。
这是一个问题,因为有问题的映像包括 MongoDB 和 MySQL - 由于对支持数据库文件的并发访问而中断。
如何将旧实例缩放到 0,并且只有在旧实例完全停止时才真正部署新实例?
我不太喜欢在 DC/OS 中设置共享的 MongoDB/MySQL 容器,因为它会导致开发人员机器上的容器之间存在差异,并且包含用于播种容器的数据库内容在图片中...
编辑:当有人不小心按下“重新启动服务”时,这个问题也会经常困扰我们,因为不像命名所暗示的那样,它不执行shutdown-wait-redeploy,而是执行stage-then-switchover...
【问题讨论】: