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

2024-06-07 11:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

根据this article,谷歌提到

You might see the following actions in public images, but do not follow their example:

  • Using a process management system such as supervisord to manage one or several apps in the container.

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


Tags: theinyouactionsarticlepublicthisdo
2条回答

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

  • Docker旨在将应用程序作为单独的容器保存
  • 若在单个容器中有单个应用程序,那个么控制应用程序就更容易了
  • Docker有一种称为“运行状况检查”的机制,用于监视应用程序的运行状况。使用supervisord时会完全丢失它,因为不应同时监视两个应用程序
  • 监视单个应用程序更容易。当您的容器中有两个应用程序,并且您的容器使用了太多的资源时,您不知道哪个应用程序已损坏
  • 当您只有一个应用程序时,扩展容器更容易。您可以扩展单个应用程序
  • 当您有单个应用程序(例如Nginx)时,您可以将其用于多个项目
  • 当只有一个应用程序登录到stdout/stderr时,日志记录就更容易了
  • 当您的应用程序被拆分时,网络和安全更容易
  • Docker有自己的流程管理器

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

更多技术性的东西

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

supervisord和Docker都是流程经理,他们都可以做日志转发,重启崩溃的工作人员。如果您在docker容器内运行supervisord,您将面临服务问题:

  • 如果您将使用supervisord对每个容器运行一个进程,那么除了增加内存消耗之外,您不会获得太多好处

  • 要重新启动进程,只需重新启动docker容器

  • 运行多个进程可能会产生监视问题

  • 针对单个supervisord流程的健康检查请求将分发给员工,这可能会隐藏不健康的目标

  • 工人事故是隐藏的,使用任何类型的监控都很难了解

  • 负载平衡将更加困难,因为将有多个级别的负载平衡

  • 当您对docker环境的控制有限时,您可以使用supervisord或pm2

相关问题 更多 >

    热门问题