实施按需docker容器启动

时间:2016-04-02 22:28:08

标签: docker kubernetes docker-swarm

情况:很多沉重的码头工人定期受到打击,然后长时间不使用。

希望:按需启动容器(比如systemd通过套接字激活启动)并在空闲一段时间后停止它们。对最终用户没有可见停机时间。

选项:

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

任何想法都赞赏!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

  2. 前段时间我和pantheon.io谈了一个关于如何用docker做这类事情的ops家伙。我想在Kubernetes出现之前就已经过了。万神殿做drupal主持。他们设置的方式,他们为客户运行的每个服务器都是容器化的,但正如您所描述的那样,容器在不需要时会消失。除了磁盘存储之外,唯一保留的资源是主机上的套接字号。

    他们有一个相当简单的守护进程,它监听所有非活动服务器的套接字。当它收到请求时,守护程序停止侦听该套接字上的更多传入连接,启动所需的容器以及请求新容器的代理。后续连接直接进入容器,直到它空闲一段时间,并且侦听器守护程序再次接管端口。这和我所知道的关于他们所做的事情的细节差不多,但你明白了。

  3. 我想像Pantheon实现的守护进程可以用来向Kubernetes发送命令,而不是直接发送到Docker守护进程。也许基于系统的动态启动容器的方法也可以根据需要与Kubernetes通信。这些中的任何一个都可能允许您启动pod,而不仅仅是容器。