如何在Kubernetes集群上计算php-fpm子进程

Efx*_*Efx 12 php docker google-cloud-platform kubernetes google-kubernetes-engine

出于扩展的原因,我最近将我的应用程序从带有docker的单个服务器迁移到了Google Kubernetes Engine.我是kubernetes平台的新手,我可能还没有完全理解它的概念,但我确实得到了基础知识.

我已经成功迁移了我的应用程序 cluster size of 3 each with 1vCPU and 3.75 GB RAM

现在我遇到了在kubernetes集群中运行的php-fpm进程的最佳配置.我已经阅读了一些关于如何设置php-fpm进程的文章,例如

https://serversforhackers.com/c/php-fpm-process-management

https://www.kinamo.be/en/support/faq/determining-the-correct-number-of-child-processes-for-php-fpm-on-nginx

在我的集群上,我有一个Elasticsearch,Redis,前端和一个REST Api以及我对kubernetes的理解,每个都有自己的pod在我的集群上运行,我试图访问pod的REST Api并看到1个vCPU和3.75 GB RAM是我在我的集​​群规范上设置的.RAM只剩下1.75GB,所以我认为还有其他服务或pod使用内存.

所以现在我想根据我上面分享的文章增加以下内容的大小.

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 4
pm.max_spare_servers = 8 
Run Code Online (Sandbox Code Playgroud)

但我的问题是,因为pod是在一个worker上,如果我在剩余的可用内存上改变配置基础(根据我上面在计算pm.max_children上分享的文章)我可能最终会占用一个占用所有内存空间的pod,并且将无法为其他服务分配.我的问题有道理吗?还是有想法我错过了?

基于该文章,因为我的工作人员有3.75 GB RAM,而其他服务已经消耗1.5GB内存,所以我最好的目标是1 GB RAM.

pm.max_children使我们达到1024 Mb/60 Mb = 17 max_children

pm.max_children = 17
pm.start_servers = 8
pm.min_spare_servers = 7
pm.max_spare_servers = 10
pm.max_requests = 500
Run Code Online (Sandbox Code Playgroud)

这引出了一个问题:当有其他服务或pod共享相同的资源时,如何计算Kubernetes集群上的php-fpm子进程.

感谢您阅读,直到最后,并提前感谢您的意见.

Pat*_*k W 2

GKE 附带多个系统 pod(例如 kube-DNS 和 fluidd)。其中一些 Pod 的扩展性不大,这意味着如果添加额外的节点,它们将拥有更多可用资源。

这些节点还运行操作系统,因此一些内存被分配给该操作系统。您还可以使用以下命令查看每个节点的可用资源kubectl describe no | grep Allocatable -A 5

这将显示节点消耗后剩余的资源量。使用kubectl describe no | grep Allocated -A 5您可以查看当前 Pod 已请求的内存和 CPU 量。

话虽如此,您应该根据需要选择子进程的数量。一旦您知道 pod 需要的内存量,请为 pod 配置设置资源请求和限制,以便 kubernetes 调度程序可以将 php-fpm 放在具有足够资源的节点上。

Kubernetes 的优势在于,你告诉它你想要什么,它会尽力实现这一目标。不必过多担心您可以容纳多少内存,而是根据您的预期/所需性能为您的 Pod 选择一个数量,并告诉 Kubernetes 您需要多少内存。这样,您还可以使用 HPA 增加 pod 数量,而不是管理和扩展子进程数量。