当前位置 博文首页 > 适己而忘人者,人之所弃;克己而立人者,众之所戴。:Marathon(
在Marathon中,对应用程序或组定义的每一个修改都会作为部署操作进行。部署是一组操作,会做以下操作:
部署不马上生效 - 需要一定时间。直到部署成功完成,这个部署才会在Marathon中激活。
多个部署可以在同一时间进行,只要一个应用程序仅通过一个部署更改。如果一个部署被请求,它会尝试修改由之前已经通过部署激活并已经完成的修改,新的部署请求将被拒绝。
没有依赖的应用程序可以没有任何限制的,以任何顺序进行部署。如果应用程序之间有依赖关系,那么部署操作将按照一个特定的顺序执行。
在应用上面的例子中,app依赖于应用db。
开发人员和运维人员面对的最常见的问题是如何推出的应用程序的新版本。这个过程包括两个阶段:启动新版本的一组进程和停止旧版本的一组进程。有很多种模式进行这一过程。
在Marathon中,有一个在应用级别中定义的升级策略属性minimumHealthCapacity。minimumHealthCapacity的值是一个百分比,当应用到实例计数的时候,用来定义某一个应用程序的特定版本在更新期间任何时候都必须保有的健康实例数量。
如果有依赖关系这种操作就变得有点复杂。当上面依赖例子中的应用程序被更新时,以下操作将被执行:
如果你选择一个大于0.5的minimumHealthCapacity 的值,在更新过程中,集群环境需要预留更多的可用容量。在这种情况下,一半以上的相同的应用程序的实例是并行的。如果应用有依赖性,就要总结这些容量限制在我们的例子中,我们定义了db为0.6,app为0.8。这意味着,在更新的情况下,我们有12个db实例(6个老版本和6个新版本),32个应用实例(16个老版本和16新新版本)并行运行。
注:这里的数量,咋一看有点不知所以,要对照上图上的数字看。
一个应用程序在同一时间只能被一个部署修改。其他对应用程序的修改必须等待上一个部署完成。运行带有强制标志部署可以打破了这一规则。REST接口允许为所有的更改状态操作添加强制标志。
注意:强制标志;只应在部署失败的情况下使用!
如果强制标志被设置,则受此影响的所有部署都被取消。这可能会使系统处于不一致的状态。具体而言,当一个应用程序在滚动升级过程中时部署被取消,它可能会处在一些应用是老的版本,一些应用是新版本的情况。如果新的部署不更新应用程序,它会留在状态,直到未来的部署应用在程序。
相反,唯一的安全强制更新的一种部署方式就是只影响单一的应用程序。
因此,使用强制更新的情况,就是用于修复之前失败的部署。
一个部署有几个步骤。部署步骤被一步一步执行。如果先前步骤已成功完成,下一个步骤才会执行,。
有些情况下,某一步永远不会成功完成。例如:
在这种情况下,将会一直执行部署。为了修复系统,一个新的部署必须应用被应用到当前出问题的部署上以解决问题。
可被访问运行部署的列表经由在/V2/deployments端点。几个项目适用于所有部署的建议:
每一步都可以有几个动作。一个步骤内的操作是同时进行的。可能的操作是:
参考资料:
[1]: http://mesosphere.github.io/marathon/docs/deployments.html
cs