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

时间:2018-10-06 05:38:21

标签: php docker kubernetes google-cloud-platform 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,Frontend和一个REST Api,我对kubernetes的理解,每个集群上都运行着自己的Pod,我尝试访问REST Api的Pod,看到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 

但是我的问题是,因为Pod在工作器上,所以如果我根据剩余的可用内存更改配置(基于上面我在计算pm.max_children上共享的文章),我可能最终会浪费所有内存空间的Pod离开,将无法分配其他服务。我的问题有意义吗?还是我想念一个主意?

基于本文,因为我的工作人员拥有3.75 GB RAM,而其他服务已经消耗了1.5GB内存,所以我的最佳目标是1GB 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

这导致我想到一个问题,当有其他服务或pod共享相同的资源时,如何为Kubernetes集群上的php-fpm子进程进行计算。

谢谢您的阅读,直到最后,并在此先感谢您的投入。

1 个答案:

答案 0 :(得分:0)

GKE带有多个系统Pod(例如kube-DNS和fluentd)。这些Pod中的一些Pod不能很好地扩展,这意味着,如果添加其他节点,它们将具有更多可用资源。

节点也正在运行操作系统,因此已为其分配了一些内存。 您还可以使用“ kubectl describe no | grep Allocatable -A 5”查看每个节点可用的资源

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

所有这些,您应该根据需要选择子进程的数量。一旦知道了pod所需的内存量,就将resource requests and limits设置为pod配置,以便kubernetes调度程序可以将php-fpm放在具有足够资源的节点上。

Kerbernetes的优势在于您告诉它您想要什么,它将尽力实现这一目标。不必过多担心可容纳的内存量,而是根据预期/所需的性能为您的Pod选择一个数量,然后告诉kubernetes您需要多少内存。这样,您还可以increase the number of pods using HPA而不是管理和扩展子进程的数量。