有多种选择,但据我所知,没有一个可以解决所有问题:您需要两件事:根据信号自动缩放主机,然后自动缩放主机上的容器。
以下是部署和扩展的解决方案容器在主机上(不一定auto-规模虽然):
库伯内斯是一个编排工具,允许调度和(使用可选的自动缩放器)自动缩放集群中的 pod(容器组)。如果主机出现故障,它可以确保您的容器在某个地方运行。
Google Container Engine (GKE) 将此作为一项服务提供,但我不确定它们是否具有与 AWS 相同的功能来自动缩放集群中的虚拟机数量。
Mesos:有点类似于 Kubernetes,但不专门用于运行容器。
码头工人群:Docker 多主机部署解决方案,允许您像控制单个 Docker 主机一样控制多个主机。我不相信它有任何类型的“自动缩放”功能,而且我不相信它负责确保 Pod 始终在某个地方运行:它基本上是用于集群的 docker。
[编辑] Docker 支持使用以下命令重新启动失败的容器restart=always
另外,从 Docker 1.11 开始,Docker Swarm 是 Docker Daemon 中的一种模式,并支持在节点故障时重新调度容器:如果节点不再可用,它将在不同节点上重新启动容器。
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 进行部署。不过,可用性保证需要您监控并在节点发生故障时重新启动容器。
除此之外,还有容器托管提供商可以为您完成这项工作: