我们正在运行DC / OS群集,并且现在手动管理它,因为其中运行的容器实例数量很少,并且不需要太多干预。
现在,我们想要从Jenkins进行部署 - 虽然这与Marathon插件一起使用,但我们遇到了一个或多或少有趣的问题:共享卷。
我们所有节点都在/ srv上安装了NetApp,并且服务具有Docker容器卷,这些容器卷将某些容器路径映射到/ srv中的子目录。现在,当Jenkins作业导致服务的重新部署时,它会在暂存新版本时保持旧容器运行,并在新容器到达"健康"状态。
这是一个问题,因为有问题的图像包含MongoDB和MySQL - 因为后备数据库文件上有并发访问而中断。
如何将旧实例扩展为0并且仅在旧实例完全停止时实际部署新实例?
在DC / OS中设置共享的MongoDB / MySQL容器是我不太喜欢的,因为它会导致开发人员计算机上的容器之间的差异,以及容器所用的数据库内容包含在图像中......
编辑:当有人意外按下"重新启动服务时,这个问题也会经常引发我们的注意事项,因为与命名建议不同,它不会执行shutdown-wait-redeploy,而是进行阶段然后切换..
答案 0 :(得分:1)
您可以查看
和
基本上,您应该使用MARATHON_SINGLE_INSTANCE_APP
这样的标签
"labels":{
"MARATHON_SINGLE_INSTANCE_APP": "true",
}
并相应地指定upgradeStrategy
:
"upgradeStrategy":{
"minimumHealthCapacity": 0,
"maximumOverCapacity": 0
}