使用 Kubernetes 将 Web 和应用程序服务器拆分为不同的 Docker 图像是否有性能优势?
Are there performance advantages to splitting web and app servers to different Docker images using Kubernetes?
我们在 Apache Web 服务器后面有一个 J2EE 应用程序 (Wildfly) 运行,目前 运行 在 Amazon EC2 实例上。我们计划使用 Docker 图像将其迁移到 Kubernetes (EKS) 平台。但是,我们对最佳实践感到好奇。我们是否应该创建一个 Docker 容器,其中包含 Web 和应用程序服务器 运行,这似乎很常见,或者创建单独的图像来容纳 Web 服务器和另一个容纳应用程序服务器是否有优势?
为每个主进程创建一个容器。一种用于 Web 服务器,一种用于应用程序服务器。
如果容器总是一对一的关系并且需要运行在一起,容器可以安排在同一个Pod(或者如@sfgroups 提到的,入口控制器可能照顾好您的 Web 服务器需求)。
Kubernetes 是一个工作负载调度程序,受益于了解它 运行 的进程状态。要 运行 容器中的多个进程,您需要添加一层进程管理,通常从使用 ./app &
的脚本后台开始,运行 进入问题,然后是某种类型的 init
系统类似 s6
container-runtime c-r c-r
| | |
init VS web app
/ \
web app
如果你开始在 Kubernetes 和被管理的进程之间添加进程管理层,Kubernetes 可以检测到的状态开始变得模糊。
当网络不可用但应用程序可用时会发生什么情况?您如何管理来自两个进程的日志?当 init 保持运行并且 Kubernetes 认为一切正常时,您如何调试失败的进程。有许多东西开始成为定制解决方案,而不是利用 Kubernetes 已经提供的功能。
我们在 Apache Web 服务器后面有一个 J2EE 应用程序 (Wildfly) 运行,目前 运行 在 Amazon EC2 实例上。我们计划使用 Docker 图像将其迁移到 Kubernetes (EKS) 平台。但是,我们对最佳实践感到好奇。我们是否应该创建一个 Docker 容器,其中包含 Web 和应用程序服务器 运行,这似乎很常见,或者创建单独的图像来容纳 Web 服务器和另一个容纳应用程序服务器是否有优势?
为每个主进程创建一个容器。一种用于 Web 服务器,一种用于应用程序服务器。
如果容器总是一对一的关系并且需要运行在一起,容器可以安排在同一个Pod(或者如@sfgroups 提到的,入口控制器可能照顾好您的 Web 服务器需求)。
Kubernetes 是一个工作负载调度程序,受益于了解它 运行 的进程状态。要 运行 容器中的多个进程,您需要添加一层进程管理,通常从使用 ./app &
的脚本后台开始,运行 进入问题,然后是某种类型的 init
系统类似 s6
container-runtime c-r c-r
| | |
init VS web app
/ \
web app
如果你开始在 Kubernetes 和被管理的进程之间添加进程管理层,Kubernetes 可以检测到的状态开始变得模糊。
当网络不可用但应用程序可用时会发生什么情况?您如何管理来自两个进程的日志?当 init 保持运行并且 Kubernetes 认为一切正常时,您如何调试失败的进程。有许多东西开始成为定制解决方案,而不是利用 Kubernetes 已经提供的功能。