繁体   English   中英

Kubernetes 上的 PHP-FPM + Nginx

[英]PHP-FPM + Nginx on Kubernetes

我们已经在 Kubernetes 集群上托管了许多不同的应用程序——主要是基于 Java 的。

对于 PHP-FPM + Nginx,我们目前的方法是构建一个容器,其中包括 PHP-FPM、Nginx 和 PHP 应用程序源代码。 但这实际上违反了每个容器一个进程的 docker 规则,因此我们正在考虑如何改进它。 我们尝试通过使用具有多个容器的 pod 来替换它 - 一个 nginx 和一个 PHP 容器。

现在最大的问题是将源代码放在哪里。 我最初的想法是使用仅数据容器,我们将其挂载到 nginx 和 PHP-FPM 容器。 问题是,有似乎没有办法做到这一点在Kubernetes

我看到的唯一方法是创建一个 sidecar 容器,其中包含源代码并将其复制到一个 emptyDir 卷,该卷在 pod 中的容器之间共享。

我的问题:PHP-FPM + Nginx 和 Kubernetes 上的数据容器有没有好的方法,或者在 Kubernetes 上托管 PHP 的最佳实践是什么(可能仍然使用一个容器来处理所有事情)?

这是一个很好的问题,因为在容器架构的大多数报道中忽略了一个重要的区别——多线程或事件驱动的服务应用程序和多进程服务应用程序之间的区别。

多线程和事件驱动的服务应用程序能够通过单个进程并发处理多个服务请求。

多进程服务应用程序不是。

Kubernetes 工作负载管理机制与给定服务面临的实际请求并发级别完全无关——因为不同的并发率本身对自动调整工作负载大小或扩展没有任何影响。

然而,基本假设是给定的部署单元——一个 pod——能够同时处理多个请求。

PHP 在几乎所有部署模型中都是多进程的。 它需要多个进程才能在单个部署单元中处理并发请求。 这些流程是由 FPM 还是由其他一些机制协调是一个实施细节。

所以 - 可以在单个容器中运行 nginx + FPM + PHP,即使它不是单个进程。 进程的数量本身并不重要 - 实际上 Docker 中没有关于这一点的规则。 支持并发的能力确实很重要。 人们希望在容器/pod 中部署支持并发请求的最小系统,而在 PHP 的情况下,通常将其全部放在单个容器中是最简单的。

微服务架构的概念是将每个服务单独运行在不同的集群中,即一个 nginx 集群和一个 php-fpm 集群。 (集群 > Pod > 容器)

现在这些集群应该与其他集群通信,以便 nginx 和 php-fpm 可以正常工作。

至于主要部分,我的代码放在哪里。 为此,您可以使用许多基于 api 的插件,即 digitalocean、s3 等。如果您想将它们安装在您的驱动器上,那么在 kubernetes 中可以使用 mountpoints 参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM