节点自动伸缩

节点自动伸缩

通过设置docker:auto-scale:enabled启动节点的自动伸缩功能。它会尝试添加,删除和重新平衡tsuru使用的docker节点。

docker节点的集群会运行节点的伸缩算法,要指定集群结合的方式,必须先告诉tsuru它们如何分组。这点可以通过设置节点的metadata中的docker:auto-scale:group-by-metadata配置项完成。

tsuru可以配置两种不同的伸缩算法:基于数量的伸缩和基于内存的伸缩。

基于数量的伸缩

在tsuru的配置中将docker:auto-scale:max-container-count选项值设置为>0即使用了这种方式。

添加节点

max-container-count的值作为max最大值,nodes作为集群中的节点数量,total作为所有集群中的节点的容器数量总和,我们可以得到可用插槽数量free为:

  1. free = max * nodes - total

如果free < 0,那么tsuru会自动添加一个新节点重新平衡容器数量。

删除节点

docker:auto-scale:scale-down-ratio的值作为ratio,如果下面的比较为真,tsuru会尝试删除已经存在的节点:

  1. free > max * ratio

在删除一个节点前,tsuru会把它的容器移到集群中其它可用的节点下。为了避免不停的添加/删除节点,tsuru会去比较ratio > 1,该值为假时不进行伸缩。

基于内存的伸缩

通过设置docker:scheduler:total-memory-metadatadocker:scheduler:max-used-memory配置调度器去使用节点内存信息并且docker:auto-scale:max-container-count选项没有被设置时,tsuru使用基于内存的伸缩方式。

添加节点++++++++++++通过maxPlanMemory最大内存参数可以获得计划所需要的足够的内存资源。如果所有节点的未被分配的内存unreserved满足条件,一个新的节点会被添加:

  1. unreserved < maxPlanMemory

删除节点

考虑通过maxPlanMemory最大内存参数和将docker:auto-scale:scale-down-ratio值作为ratio为计划分配足够多的内存:如果当前的容器可以通过同一资源池的分布到其它的节点,并且至少有一个节点还有未分配的内存unreserved,这个节点会被删除:

  1. unreserved > maxPlanMemory * ratio

重新平衡节点

当节点被添加或者不论什么伸缩算法,重新平衡节点时将节点的不同容器减少个数大于2,重新平衡节点会被触发。如果docker:auto-scale:prevent-rebalance被设置为true,重新平衡不会被触发。

自动伸缩的时间

每次tsuru尝试去运行自动伸缩动作(添加,删除或者重新平衡)。它会创建自动伸缩事件。该事件会记录自动伸缩的动作和在执行过程中可能出现的错误。可以通过tsuru-admin docker-autoscale-list命令列出自动伸缩事件。

只运行一次自动伸缩

即便是将docker:auto-scale:enabled设置为false,可以通过运行tsuru-admin docker-autoscale-run确保自动伸缩算法的触发执行。

原文: http://doc.oschina.net/tsuru-paas?t=52839