DC/OS 和并发部署
DC/OS and concurrent deployments
我们是 运行 一个 DC/OS 集群,现在手动管理它,因为其中的容器实例 运行 数量很少,不需要太多干预。
现在,我们想从 Jenkins 进行部署 - 虽然它可以与 Marathon 插件一起使用,但我们遇到了一个或多或少有趣的问题:共享卷。
我们所有的节点都在 /srv 上安装了一个 NetApp,服务有 Docker 容器卷,它们将某些容器路径映射到 /srv 中的子目录。现在,当 Jenkins 作业导致重新部署服务时,它将离开旧容器 运行,同时暂存新版本并在新容器达到 "healthy" 状态后切换。
这是一个问题,因为有问题的图像包括 MongoDB 和 MySQL - 由于对后备数据库文件有并发访问而中断。
如何将旧实例缩放到 0,并且只有当旧实例完全停止时才真正部署新实例?
在 DC/OS 中设置共享 MongoDB/MySQL 容器是我不太喜欢的事情,因为它会导致开发人员机器上的容器之间存在差异,以及数据库内容与图片中包含播种的容器...
编辑:当有人不小心按下 "restart service" 时,这个问题也经常困扰我们,因为与命名建议不同,它不执行关闭-等待-重新部署,但也执行阶段-然后-切换...
你可以看看
- https://mesosphere.github.io/marathon/docs/deployments.html#rolling-restarts
- https://mesosphere.github.io/marathon/docs/persistent-volumes.html#running-stateful-mysql-on-marathon
和
基本上,您应该像这样使用 MARATHON_SINGLE_INSTANCE_APP
标签
"labels":{
"MARATHON_SINGLE_INSTANCE_APP": "true",
}
并相应地指定 upgradeStrategy
:
"upgradeStrategy":{
"minimumHealthCapacity": 0,
"maximumOverCapacity": 0
}
我们是 运行 一个 DC/OS 集群,现在手动管理它,因为其中的容器实例 运行 数量很少,不需要太多干预。
现在,我们想从 Jenkins 进行部署 - 虽然它可以与 Marathon 插件一起使用,但我们遇到了一个或多或少有趣的问题:共享卷。
我们所有的节点都在 /srv 上安装了一个 NetApp,服务有 Docker 容器卷,它们将某些容器路径映射到 /srv 中的子目录。现在,当 Jenkins 作业导致重新部署服务时,它将离开旧容器 运行,同时暂存新版本并在新容器达到 "healthy" 状态后切换。
这是一个问题,因为有问题的图像包括 MongoDB 和 MySQL - 由于对后备数据库文件有并发访问而中断。
如何将旧实例缩放到 0,并且只有当旧实例完全停止时才真正部署新实例?
在 DC/OS 中设置共享 MongoDB/MySQL 容器是我不太喜欢的事情,因为它会导致开发人员机器上的容器之间存在差异,以及数据库内容与图片中包含播种的容器...
编辑:当有人不小心按下 "restart service" 时,这个问题也经常困扰我们,因为与命名建议不同,它不执行关闭-等待-重新部署,但也执行阶段-然后-切换...
你可以看看
- https://mesosphere.github.io/marathon/docs/deployments.html#rolling-restarts
- https://mesosphere.github.io/marathon/docs/persistent-volumes.html#running-stateful-mysql-on-marathon
和
基本上,您应该像这样使用 MARATHON_SINGLE_INSTANCE_APP
标签
"labels":{
"MARATHON_SINGLE_INSTANCE_APP": "true",
}
并相应地指定 upgradeStrategy
:
"upgradeStrategy":{
"minimumHealthCapacity": 0,
"maximumOverCapacity": 0
}