Как вычислить для дочернего процесса php-fpm в кластере Kubernetes

Я недавно перенес свое приложение с одного сервера w/docker в Google Kubernetes Engine по причинам масштабирования. Я новичок в платформе кубернетов, и я, возможно, еще не полностью понял ее концепции, но я все-таки получаю основы.

Я успешно перенесла свое приложение на cluster size of 3 each with 1vCPU and 3.75 GB RAM

Теперь я столкнулся с тем, что является наилучшей конфигурацией для процессов php-fpm, выполняемых в кластере kubernetes. Я прочитал несколько статей о том, как настроить процессы 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 и мое понимание о кубернетах, каждый из которых имеет свои собственные стручки, запущенные на моем кластере, я попытался получить доступ к модулю для REST Api и увидеть 1 vCPU и 3,75 ГБ оперативной памяти, это то, что я задал в своих спецификациях кластера. И у ОЗУ осталось всего 1,75 ГБ, поэтому я думаю, что есть другие сервисы или стручки, использующие память.

Поэтому теперь я хотел увеличить размер следующего на основе статей, которые я рассказал выше.

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 4
pm.max_spare_servers = 8 

Но моя проблема связана с тем, что pod находится на рабочем месте, если я изменил базу конфигурации на доступной памяти слева (основываясь на статьях, которые я поделил выше на Calculation pm.max_children). Я мог бы поместить pod, потребляющий все оставшееся место памяти, и не смогут выделять другие сервисы. Является ли моя проблема понятной? или есть идея, которую я пропускаю?

Основа на статье, так как мой рабочий имеет 3,75 ГБ ОЗУ, а другие сервисы уже потребляют 1,5 ГБ оперативной памяти, поэтому моя лучшая цель - 1 ГБ ОЗУ.

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

Что приводит меня к вопросу Как вычислить для дочернего процесса php-fpm в кластере Kubernetes, когда есть другие службы или контейнеры, имеют те же ресурсы.

Благодарим вас за чтение до конца и заблаговременно за ваш вклад.

Ответ 1

GKE поставляется с несколькими системными модулями (такими как kube-DNS и fluentd). Некоторые из этих модулей не сильно расширяются, это означает, что если вы добавите дополнительные узлы, у них будет больше доступных ресурсов.

Узлы также работают под управлением ОС, поэтому часть памяти выделяется для этого. Вы также можете просмотреть ресурсы, доступные для каждого узла, используя kubectl describe no | grep Allocatable -A 5

Это покажет вам количество ресурсов, оставшихся после потребления узла. Используя kubectl describe no | grep Allocated -A 5, вы можете просмотреть объем памяти и ЦП, которые уже запрашиваются текущими модулями.

Все это, как говорится, вы должны выбрать количество дочерних процессов в зависимости от ваших потребностей. Как только вы узнаете, какой объем памяти потребуется модулю, установите запросы ресурсов и ограничьте настройкой своего модуля, чтобы планировщик kubernetes мог разместить php-fpm на узле с достаточными ресурсами.

Сила Kubernetes в том, что вы говорите ему, что хотите, и он попытается сделать это. Вместо того, чтобы беспокоиться о том, сколько вы можете уместить, выберите количество для вашего стручка на основе ожидаемой/требуемой производительности и скажите kubernetes, сколько памяти вам нужно. Таким образом, вы также можете увеличить количество модулей, используя HPA вместо управления и увеличения количества дочерних процессов.