\\\看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!
\
Atlassian把他们的内部工具Escalator发布为开源项目。该工具针对Kubernetes节点提供了配置驱动的抢占式纵向扩容和更快地纵向缩容。
\\2013到2014年,Atlassian采用了容器,并构建了自己基于Docker的PaaS,使用它运行内部的平台和服务。除了pod的基本调度和运行外,他们的编排还需要具有弹性,以应对云硬件故障及响应负载,快速实现纵向扩容或缩容。Kubernetes就符合要求,团队就使用它作为他们的编排器。他们的构建工程基础设施所包含的工作负载需要配备数以百计的虚拟机——这是他们需要首先迁移的其中一个部分。
\\Kubernetes有两个自动扩展器——横向的pod自动扩展器和集群扩展器。前者实现pod——容器或一组相关容器之上的一种抽象——的横向扩容和缩容,因此,它依赖于底层计算资源(通常是虚拟机)的可用性。集群自动扩展器用于扩展计算基础设施本身。可以理解,由于虚拟机需要的配置时间更多,所以纵向扩容和缩容需要的时间都比较长。集群自动扩展器的任何延迟都会转变成pod自动扩展器的延迟。类似地,pod可以非常快速地缩容,但计算VM要用更多的时间才能做到。这会导致来自空闲计算VM的巨大成本,尤其是在Atlassian这样的基础设施规模上。Atlassian的问题仅限于对扩容和缩容延迟容忍度较低的批处理工作负载。他们决定编写自己的自动扩展功能,在Kubernetes之上解决这些问题。
\\Escalator是用Go编写的,它为计算VM的容量上限和下限提供了可配置的阈值。其中有些配置属性是通过修改Kubernetes一项名为“taint”的特性实现的。VM节点可以被特定的值“污染”(标记),那样,有相关标记的pod就不会调度到它上面。标记之后,Kubernetes标准的集群自动扩展器就可以更快地拿下未使用的节点。纵向扩容配置参数是一个用使用率表示的阈值,通常小于100,以便有个缓冲。当使用率达到阈值时,Escalator会自动扩展计算VM,为稍后可能出现的容器提供空间,使它们可以快速启动。
\\ \\图片来源:https://developers.atlassian.com/blog/2018/05/introducing-escalator/
\\像AWS这样的公有云提供商试图使用类似Fargate这样的解决方案来解决VM管理问题,不过,它们没有提供Escalator那样的配置选项。在容器环境中,计算扩展/收缩是一个常见的问题。如果计算VM需要几分钟才能启动起来,那么容器启动的速度优势就不存在了。保持VM运行解决了这个问题,代价是运行可能空闲的VM。需要注意的是,Escalator解决了一个在两个Kubernetes自动扩展器的情况下非常特殊的问题,就是批处理工作负载。
\\Escalator的运行需要Kubernetes 1.8+和Golang 1.8+。目前,对于云提供商,它仅支持AWS。Atlassian之前已经开源了另外一个Kubernetes相关的项目Smith。
\\查看英文原文:Atlassian Releases Escalator, an Autoscaling Tool for Kubernetes Nodes