【问题标题】:Implement on-demand docker container start-up实现按需 docker 容器启动
【发布时间】:2022-02-20 02:46:28
【问题描述】:

情况:许多重型 docker conainers 会定期受到攻击一段时间,然后长时间不使用。

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

选项:

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

任何想法表示赞赏!

【问题讨论】:

  • 关于自定义 HTTP 服务器。 DockerUI 容器可以访问守护进程。您只需将 docker 套接字作为卷安装到容器中,就可以向它发出所有请求
  • 谢谢,我知道在挂载套接字时可以使用守护进程。我只是希望这个地方会有内置的解决方案,所以我不必重新发明轮子。看来轮子还没有发明出来。
  • 您好 xificurC 您是否为您的问题找到了一个好的解决方案(docker 容器的按需启动)?问候大卫
  • 嗨@David,不,但我不再寻求,转移到其他项目。如果我是,我会研究无服务器解决方案。

标签: docker kubernetes docker-swarm


【解决方案1】:

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

【讨论】:

【解决方案2】:
  1. 您可以使用 systemd 来管理您的 docker 容器。见https://developer.atlassian.com/blog/2015/03/docker-systemd-socket-activation/

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

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

  3. 我想像 pantheon 实现的守护进程之类的东西可以用来向 Kubernetes 发送命令,而不是直接发送给 Docker 守护进程。也许基于 systemd 的动态启动容器的方法也可以根据需要与 Kubernetes 进行通信。这些中的任何一个都可以让您启动 pod,而不仅仅是容器。

【讨论】:

  • 你添加这个答案已经有一段时间了,但我想让你知道它真的很有帮助。谢谢你:)
  • 很高兴听到这个消息。设置好了吗?
  • 你可能还想搜索“serverless docker”来找到一些相关的东西。
【解决方案3】:

Podman 从版本 3.4.0(2021 年 9 月发布)开始支持套接字激活。

大概是这样的

  1. systemd 创建一个监听套接字
  2. 客户端连接到套接字
  3. systemd 使用传递的套接字启动 Podman。
  4. Podman 使用传递的套接字启动容器。

我用 Podman 和 MariaDB 编写了一个小示例演示:

https://github.com/eriksjolund/mariadb-podman-socket-activation

MariaDB 从版本 10.6(2021 年 4 月发布)开始支持套接字激活

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2015-07-09
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2015-03-03
    相关资源
    最近更新 更多