2016-04-02 58 views
8

现状:大量重型码头集装箱被定期撞击一段时间,然后长时间未使用。实施按需码头集装箱启动

需求:根据需要启动容器(如systemd通过套接字启动启动事物),并在给定时间段空闲后停止它们。没有可见停机时间到最终用户。

选项:

  • Kubernetes具有可扩展副本资源控制器。我认为可以将副本数量保持为0,并在需要时将副本数量设置为1,但是如何实现呢? user guide表示有一种称为自动缩放控制代理但我没有看到任何进一步的信息。是否有可插拔的可编程代理程序可以用来跟踪请求并根据用户定义的逻辑进行扩展?
  • 我在Docker Swarm中看不到任何解决方案,如果我错了,请纠正我的错误。
  • 使用用所选语言编写的自定义http服务器可以访问docker守护进程。在路由到正确的位置之前,它会检查容器的存在并确保它正在运行。下行 - 不是一般的解决方案,必须不是是一个容器或有权访问守护进程。
  • 使用systemd,如here所述。与上述相同,即不是一般的,并且必须自己处理联网任务(例如查找产生的容器的IP并将其馈送到服务器/代理的配置中)。

任何想法赞赏!

+0

关于自定义HTTP服务器。 DockerUI容器可以访问守护进程。您只需将docker套接字作为一个卷装入容器中,并且可以对其进行所有请求 –

+0

谢谢,我知道在装入套接字时可以使用该守护程序。我只是希望这里会有内置的解决方案,所以我不必重新发明轮子。似乎轮子还没有发明。 – xificurC

回答

2

您可以使用Kubernetes的内置Horizonal Pod Autoscaling (HPA)从每个容器的1个实例扩展到需要处理负载所需的数量,但在接收请求时没有用于0到1缩放的内置功能,我不知道有任何广泛使用的解决方案。

+0

谢谢你的回复。你认为这种情况不常见吗?我认为很容易找到按需启动的实现,但似乎没有人甚至正在处理它。 – xificurC

+2

如果您有兴趣,请参阅https://github.com/kubernetes/kubernetes/issues/484中的相关讨论。 –

0
  1. 您可以使用systemd来管理您的码头集装箱。请参阅https://developer.atlassian.com/blog/2015/03/docker-systemd-socket-activation/

  2. 前段时间,我与一位opant家伙谈论了pantheon.io关于他们如何使用docker做这种事情。我想这应该在Kubernetes出现之前。万神殿做drupal托管。他们设置事物的方式,他们为客户端运行的每个服务器都是集装箱化的,但正如您所描述的那样,当不需要时,容器就会消失。除磁盘存储之外,唯一保留的资源是主机上的套接字号。

    它们有一个相当简单的守护进程,它监听所有不活动的服务器的套接字。当它收到一个请求时,守护进程将停止监听该套接字上的更多传入连接,启动所需容器,并将该请求代理到新容器。随后的连接直接进入容器,直到它闲置一段时间,并且侦听器守护进程再次接管端口。这与我所了解的他们所做的一样详细,但你明白了。

  3. 我想像万神殿实施的东西可以用来发送命令给Kubernetes而不是直接给Docker守护进程。也许基于systemd的方法来动态启动contaner也可以根据需要与Kubernetes进行通信。其中任何一种都可以让你开启豆荚,而不仅仅是容器。