为什么谷歌不推荐使用supervisord作为容器?在 kubernetes 中运行时,supervisord 能否很好地处理 PID 1 问题?

hau*_*ing 1 python linux supervisord docker kubernetes

根据这篇文章,谷歌提到

您可能会在公共图像中看到以下操作,但不要遵循它们的示例:

  • 使用supervisord等进程管理系统来管理容器中的一个或多个应用程序。

我知道使用 Supervisord 管理一个容器中的多个应用程序有很多缺点。例如不适合自动缩放、难以进行健康检查等。但是它还有其他缺点吗?我想知道supervisord如何处理PID 1问题?

Dan*_*nik 5

原因有很多,但其中几个是:

  • Docker 旨在将应用程序保留为独立的容器。
  • 如果单个容器中有单个应用程序,则更容易控制应用程序
  • Docker 有一个称为健康检查的机制,可以监控应用程序的健康状况。当你使用supervisord时你会完全失去它,因为你不应该同时监控2个应用程序。
  • 监控单个应用程序更容易。当容器中有 2 个应用程序并且容器使用了太多资源时,您不知道哪个应用程序损坏了。
  • 当您只有单个应用程序时,扩展容器会更容易。您可以扩展单个应用程序
  • 当您有单个应用程序(例如 Nginx)时,您可以将其重用于多个项目。
  • 当只有单个应用程序记录到 stdout/stderr 时,记录会更容易
  • 当您的应用程序被拆分时,网络和安全性会更容易。
  • Docker 有自己的进程管理器。

其中一些是个人的,但您可以看到在容器中使用多个应用程序是不好的做法。

更多技术性的东西

  • 您应该只有一个父进程。Docker 只能向进程 PID1 发送信号。如果您有多个顶级进程,则其中一个进程无法正常退出。
  • 大多数 init 系统都会杀死孤立进程。因此,如果您在入口点中有 2 个进程作为后台进程启动,它将被杀死。