节点自动伸缩
节点自动伸缩
通过设置dockerenabled
启动节点的自动伸缩功能。它会尝试添加,删除和重新平衡tsuru使用的docker节点。
docker节点的集群会运行节点的伸缩算法,要指定集群结合的方式,必须先告诉tsuru它们如何分组。这点可以通过设置节点的metadata中的dockergroup-by-metadata
配置项完成。
tsuru可以配置两种不同的伸缩算法:基于数量的伸缩和基于内存的伸缩。
基于数量的伸缩
在tsuru的配置中将dockermax-container-count
选项值设置为>0即使用了这种方式。
添加节点
将max-container-count
的值作为max
最大值,nodes
作为集群中的节点数量,total
作为所有集群中的节点的容器数量总和,我们可以得到可用插槽数量free
为:
free = max * nodes - total
如果free < 0
,那么tsuru会自动添加一个新节点重新平衡容器数量。
删除节点
将dockerscale-down-ratio
的值作为ratio
,如果下面的比较为真,tsuru会尝试删除已经存在的节点:
free > max * ratio
在删除一个节点前,tsuru会把它的容器移到集群中其它可用的节点下。为了避免不停的添加/删除节点,tsuru会去比较ratio > 1
,该值为假时不进行伸缩。
基于内存的伸缩
通过设置dockertotal-memory-metadata
和dockermax-used-memory
配置调度器去使用节点内存信息并且dockermax-container-count
选项没有被设置时,tsuru使用基于内存的伸缩方式。
添加节点++++++++++++通过maxPlanMemory
最大内存参数可以获得计划所需要的足够的内存资源。如果所有节点的未被分配的内存unreserved
满足条件,一个新的节点会被添加:
unreserved < maxPlanMemory
删除节点
考虑通过maxPlanMemory
最大内存参数和将dockerscale-down-ratio
值作为ratio
为计划分配足够多的内存:如果当前的容器可以通过同一资源池的分布到其它的节点,并且至少有一个节点还有未分配的内存unreserved
,这个节点会被删除:
unreserved > maxPlanMemory * ratio
重新平衡节点
当节点被添加或者不论什么伸缩算法,重新平衡节点时将节点的不同容器减少个数大于2,重新平衡节点会被触发。如果dockerprevent-rebalance
被设置为true,重新平衡不会被触发。
自动伸缩的时间
每次tsuru尝试去运行自动伸缩动作(添加,删除或者重新平衡)。它会创建自动伸缩事件。该事件会记录自动伸缩的动作和在执行过程中可能出现的错误。可以通过tsuru-admin docker-autoscale-list
命令列出自动伸缩事件。
只运行一次自动伸缩
即便是将dockerenabled
设置为false,可以通过运行tsuru-admin docker-autoscale-run
确保自动伸缩算法的触发执行。