有几种选择,但我不知道是否有一种可以满足所有需求:您需要两个东西:根据信号自动扩展主机,然后自动扩展主机上的容器。
以下是部署和扩展主机上容器(不一定是自动缩放)的解决方案:
Kubernetes是一个编排工具,允许在集群中调度并(通过可选的自动缩放器)自动扩展pod(容器组)。如果主机失败,它确保您的容器在某个地方运行。Google Container Engine(GKE)提供此服务,但我不确定他们是否具有与AWS相同的功能来自动缩放集群中VM的数量。
Mesos:与Kubernetes有些相似,但不专用于运行容器。
Docker Swarm:Docker多主机部署解决方案,允许您像单个Docker主机一样控制许多主机。我不认为它具有任何形式的“自动缩放”功能,并且我也不认为它会确保pod始终在某个地方运行:它基本上是集群的docker。
[EDIT] Docker支持使用restart=always
选项重新启动失败的容器,此外,从Docker 1.11开始,Docker Swarm是Docker守护进程的一种模式,并支持在节点故障时重新调度容器:如果节点不再可用,它将在不同节点上重新启动容器。
Docker 1.11+在功能上变得很像Kubernetes。它具有一些很好的功能(如默认情况下节点间的TLS),但仍然缺少静态IP和存储配置等功能。
这些解决方案都不能为您自动缩放主机数量,但可以在主机上缩放容器数量。
针对自动缩放主机的解决方案与您的云提供商有关,因此这些是专用解决方案。对于您来说的关键部分是要将两者集成起来:
AWS允许在CoreOS上部署Kubernetes,我认为他们没有将其作为服务提供,因此您需要部署自己的CoreOS集群和Kubernetes。
现在是我的个人意见(以及免责声明)
我主要在GKE和裸金属上使用Kubernetes,大约6个月前也使用了Swarm,并在GKE上运行了约35个服务的基础架构:
坦率地说,使用Kubernetes作为服务的GKE提供了大部分你想要的功能,但它不是AWS。扩展主机仍然有点棘手,需要一些工作。
在AWS或裸机上设置自己的Kubernetes或Mesos非常可行,但有相当大的学习曲线:这完全取决于你是否真的强烈希望在AWS上,并愿意花费时间。
Swarm可能是最容易使用的,但更受限制,但是自建脚本可以很好地完成核心工作:使用AWS API扩展主机,并使用Swarm进行部署。但如果节点失败,则可用性保证需要您监视并重新启动容器。
除此之外,还有可能为您提供服务的容器托管提供商: