Я недавно перенес свое приложение с одного сервера с докером в Google Kubernetes Engine по причинам масштабирования. Я новичок в платформе kubernetes, и, возможно, я еще не до конца понимаю ее концепции, но я действительно получаю основы.
Я успешно перенес свое приложение на 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
В моем кластере у меня есть Elasticsearch, Redis, Frontend и REST Api и мое понимание kubernetes, у каждого из которых есть свои собственные модули, работающие на моем кластере, я попытался получить доступ к модулю для 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
Но моя проблема в том, что модуль работает на рабочем месте, и если я изменю базу конфигурации на оставшейся доступной памяти (на основе статей, которыми я поделился выше по вычислению pm.max_children), я мог бы получить модуль, занимающий все оставшееся пространство памяти, и не сможет выделить на другие услуги. Моя проблема имеет смысл? или есть идея, которую мне не хватает?
Основываясь на статье, так как мой рабочий имеет 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, когда другие службы или модули используют одни и те же ресурсы.
Спасибо, что дочитали до конца, и заранее спасибо за ваш вклад.
GKE поставляется с несколькими системными модулями (такими как kube-DNS и fluentd). Некоторые из этих модулей не сильно расширяются, это означает, что если вы добавите дополнительные узлы, у них будет больше доступных ресурсов.
Узлы также работают под управлением ОС, поэтому часть памяти выделяется для этого.
Вы также можете просмотреть ресурсы, доступные для каждого узла, используя «kubectl description no | grep Allocatable -A 5»
Это покажет вам количество ресурсов, оставшихся после потребления узла.
Используя «kubectl description no | grep Allocated -A 5», вы можете просмотреть объем памяти и ЦП, которые уже запрашиваются текущими модулями.
Все это, как говорится, вы должны выбрать количество дочерних процессов в зависимости от ваших потребностей. Как только вы узнаете, сколько памяти потребуется модулю, установите запросы ресурсов и ограничения в конфигурацию вашего pod, чтобы планировщик kubernetes мог разместить php-fpm на узле с достаточными ресурсами.
Сила Kubernetes в том, что вы говорите ему, что хотите, и он попытается сделать это. Вместо того, чтобы беспокоиться о том, сколько вы можете уместить, выберите количество для вашего стручка на основе ожидаемой / требуемой производительности и скажите kubernetes, сколько памяти вам нужно. Таким образом, вы также можете увеличить количество капсул с помощью HPA вместо того, чтобы управлять и увеличивать количество дочерних процессов.
Других решений пока нет …