我们已经在我们的Kubernetes集群上托管了许多不同的应用程序 - 主要是基于Java的。
对于PHP-FPM + Nginx,我们的方法是,我们正在构建一个容器,其中包括PHP-FPM,Nginx和PHP应用程序源代码。 但这实际上打破了每个容器一个进程的docker规则,因此我们正在思考如何改进它。 我们试图通过使用具有多个容器的pod来替换它 - 一个nginx和一个PHP容器。
现在最大的问题是放置源代码的位置。我最初的想法是使用仅数据容器,我们将其安装到nginx和PHP-FPM容器中。问题是,在Kubernetes yet似乎无法做到这一点。
我看到的唯一方法是创建一个sidecar容器,其中包含源代码并将其复制到emptyDir卷中,该卷在pod中的容器之间共享。
我的问题:对于Kubernetes,PHP-FPM + Nginx和数据容器是否有一个好的方法,或者在Kubernetes上托管PHP的最佳做法是什么(可能仍然使用一个容器来处理所有内容)?
答案 0 :(得分:6)
这是一个很好的问题,因为在多线程或事件驱动的服务应用程序和多进程服务应用程序之间,大多数容器体系结构的覆盖范围都有一个重要的区别。
多线程和事件驱动的服务应用程序能够通过单个进程同时处理多个服务请求。
多进程服务应用程序不是。
Kubernetes工作负载管理机制对于给定服务面临的实际请求并发级别是完全不可知的,因为不同的并发率本身对自动化工作负载大小调整或扩展没有任何影响。
然而,潜在的假设是,一个给定的部署单元 - 一个pod-能够同时处理多个请求。
几乎所有部署模型中的PHP都是多进程的。它需要多个进程才能在单个部署单元中处理并发请求。这些流程是由FPM还是由其他机制协调,这是一个实施细节。
所以在单个容器中运行nginx + FPM + PHP是好的,即使它不是单个进程。进程数本身并不重要 - Docker中实际上没有关于此的规则。支持并发的能力很重要。一个人希望在容器/ pod中部署最小系统来支持并发请求,而在PHP的情况下,通常将它们全部放在一个容器中是最简单的。
答案 1 :(得分:-2)
微服务架构的概念是在不同的集群中分别运行每个服务,即nginx集群和php-fpm集群。 (群集>豆荚>容器)
现在这些集群应该与其他集群通信,以便nginx和php-fpm可以正常工作。
至于主要部分,我的代码放在哪里。 为此,您可以使用许多基于api的插件,即digitalocean,s3等。 如果要将它们安装在驱动器上,那么kubernetes中是否提供了mountpoints参数。