如何自动缩放 Docker 容器主机?

Posted

技术标签:

【中文标题】如何自动缩放 Docker 容器主机?【英文标题】:How to autoscale Docker container hosts? 【发布时间】:2016-02-06 20:16:43 【问题描述】:

我正在开发一个基于 Docker 的 Web 服务,其中每个订阅者都可以私有访问他们自己在云中运行的 Docker 容器,公开端口 443。

我已经成功地使用nginx-proxy/docker-gen 为来自同一个虚拟机的多个 Docker 容器提供服务,只有端口 443 暴露给公共网络。

这很好用……但是当订阅者使 VM 资源饱和时我该怎么办? (举个简单的例子,我在一个用作 Docker 主机的 DigitalOcean 2Gb 实例上可能有 10 个订阅者的容器的实际限制。)

例如,当订阅者 #11 注册时,我需要准备好新的 Docker 主机并等待启动该新容器。

换句话说,我想对我的 Docker 主机进行水平自动缩放,以响应用户订阅需求。做一些服务发现并使容器可公开寻址会很好。

我正在尝试找出最佳解决方案。 Kubernetes 1.1 似乎支持 Pod 的自动缩放(即基本上增加容器的数量......)但不支持容器主机的自动缩放(Kubernetes 中的“minions”??)

我查看了以下似乎接近我需要的项目:

Deis - 据我所知,没有明确的自动缩放 Tsuru - 可能的自动缩放解决方案,但仅限于计数/RAM Mesos/Mesosphere - 可能比必要的复杂得多

任何人都可以提出任何有用的建议吗?

【问题讨论】:

我目前不知道适合您的现有解决方案。但是有一些关于如何/何时将功能添加到 Kubernetes 的讨论(请参阅github.com/kubernetes/kubernetes/pull/15304 作为起点)。 自动扩展主机很大程度上取决于您运行 Kubernetes 的云。例如,在 Openstack 上,您可以通过 Murano 或 Magnum 运行 Kubernetes。在这两种情况下,他们都使用 Heat 模板,并结合 Celiometer 警报来自动扩展运行 Kubernetes 的底层虚拟机。 @rwehner:这看起来很有趣 - 看起来基本的集群自动缩放将在 Kubernetes 1.2 中?好吧,我想这可能需要很长一段时间......所以我现在不能单独使用 Kubernetes...... @MarkO'Connor ,非常感谢这里的提示。我打算在“准系统”云服务器(DigitalOcean/Linode 等)上运行并自己设置所有服务。我曾认为自己设置 Openstack 可能会过度设计(比如使用 Mesos/Mesosphere),但是如果我可以在没有太多资源开销的情况下进行基本的生产部署(即我需要多少台机器来运行基本的 Openstack 服务?) 那么它可能是正确的选择。虽然堆栈中有很多技术...... Openstack+Magnum/Murano+Kubernetes ...嗯... @danzvash Magnum 和 Murano 解决方案旨在以不同的方式部署 Kubernetes。第一个是适当的“容器即服务”产品,其中 Kubernetes 是一个选项,第二个是作为应用程序安装它。在后台,他们都使用 Heat 来编排 Openstack API 调用。自动缩放功能是 Heat 提供的(基于 Ceilometer 指标)。在其他云上,可能会有与 Heat 类似的报价。例如在亚马逊上有云形成。 【参考方案1】:

从 Kubernetes v1.1 开始,您现在可以实现 Horizo​​ntal Pod Autoscaler:http://kubernetes.io/v1.1/docs/user-guide/horizontal-pod-autoscaler.html

【讨论】:

谢谢,但实际上我正在寻找的正是节点自动缩放。 rwehner 已经引用了上述功能,该功能应包含在 Kubernetes 1.2 中。 github.com/kubernetes/kubernetes/blob/master/docs/admin/…

以上是关于如何自动缩放 Docker 容器主机?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免Docker容器启动脚本运行后自动退出

将 Docker 部署到 AWS Elastic Beanstalk——如何将端口转发到主机? (端口绑定)

如何使不同主机上的docker容器互相通信

自动缩放 Docker Swarm 服务

docker 容器会自动与其主机同步时间吗?

如何实现docker服务重启容器不停止