实施按需docker集装箱启动

情况:很多重型docker工人会周期性地受到打击,然后长时间闲置。

祝:根据需要启动容器(如systemd通过套接字激活启动事物),并在给定时间段内空转后停止它们。 terminal用户没有明显的停机时间。

选项:

  • Kubernetes有可以扩展副本的资源控制器。 我认为可以保持副本的数量为0,并在需要时将其设置为1,但是如何实现呢? 用户指南说有一种称为自动缩放控制代理的东西,但我没有看到有关这方面的更多信息。 是否有一个可插拔的,可编程的代理人可以用来跟踪请求和基于用户定义的逻辑的规模?
  • 我在Docker Swarm中看不到任何解决scheme,如果我错了,请纠正我的错误。
  • 使用所选语言编写的自定义http服务器将有权访问docker守护进程。 在路由到正确的位置之前,它会检查容器的存在并确保它正在运行。 缺点 – 不是一个通用的解决scheme,不得不成为一个容器或访问守护进程。
  • 按照此处所述使用systemd。 与上面相同,也就是不一般,必须自己处理networking任务(如查找产生的容器的IP并将其提供给服务器/代理的configuration)。

任何想法赞赏!

您可以使用Kubernetes内置的Horizo​​nal Pod Autoscaling(HPA)从每个容器的1个实例向上扩展到需要处理负载的多个实例,但是没有内置的0到1比例缩放function来接收请求,我不知道任何广泛使用的解决scheme。

  1. 你可以使用systemd来pipe理你的docker容器。 请参阅https://developer.atlassian.com/blog/2015/03/docker-systemd-socket-activation/

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

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

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