Задать вопрос
@sheldon_coop

Оптимизация WordPress сайта установленного в Kubernetes (несколько реплик/копий)?

Всем привет!

Есть WordPress сайт который ранее был просто на виртуальном хостинге, а теперь, с декабря, крутится в контейнере Kubernetes, у которого есть несколько копий/реплик.

Для оптимизации всегда использовали какой-либо плагин, по типу: "LiteSpeed Cache", "WP Fastest Cache" и проч., которые позволяют настроить кэширование, минифицировать CSS, JS, объединить их в один файл, создание оптимизированных копий изображений (/wp-content/), и многое другое.

После того как перешли на k8s столкнулся с проблемой: если через админку плагина почистить кэш, или что-то изменить, то файлы кэша, а также все минифицированные и объединенные файлы создаются/обновляются только на одной из копий/реплик сайта, таким образом, случайных пользователь при каждой загрузки сайта видит то поломанный сайт, то работающий.

Какое есть решение (если нужно продолжить использование нескольких реплик/копий)? Так как я ранее с этим не сталкивался, буду рад любым вариантам/предложениям!

PS
Разрабатывать какое-то полностью кастомное решение для замены всего функционала плагина(ов) - не вариант.
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
akelsey
@akelsey
Готовые решения не знаю, варианты на вскидку:
- общий файловый кэш на все поды
- решение например на базе redis который будет источником кэшированных данных

ну т.е. хранение кэша вне подов, в вашем случае способ стандартный, искать какой-то плагин для работы в кубере, в официальных плагинах ворпдпресса.
Ответ написан
@vitaly_il1
DevOps Consulting
Я вижу два варианта
1) простой - вернуться на хостинг на одном сервере линукс. Я не вижу преимуществ в K8S для Wordpress.
2) сложный и ненужный ИМХО - искать документы по правильному деплою в Кубернетисе

Возможно сработает workaround - убрать autoscaling, запускать на одном поде.
Ответ написан
@MadridianFox
Web-программист, многостаночник
Проще всего будет определить в какую папку всё это складывается и вынести её в PersistentVolume (PV). Ваш k8s конечно же должен иметь возможность создания PV с типом ReadWriteMany - это когда поды на разных машинах могут подключать к себе один и тот же PV. Проще всего выделить в инфраструктуре NFS сервер и настроить кубер работать с ним.

В результате в манифесте деплоймента будет что-то типа
volumes:
  - name: optimized-assets
    persistentVolumeClaim:
      claimName: my-optimized-assets-pvc
containers:
  - name: app
    image: "my.registry.org/wp-site:v1.2.3"
    volumeMounts:
    - name: optimized-assets
      mountPath: /var/www/public/assets


немного теории

Запуская веб-приложение в нескольких экземплярах на разных машинах/контейнерах, необходимо позаботиться о том чтобы некоторые его части шарились (share) между всеми экземплярами.
Обычно речь про
- папку загрузок
- сессии пользователя
- кэш

В идеале для всего этого стоит использовать отдельные сервисы, например сессии и кэш можно хранить в memcached или redis, а загрузки хранить не файлами на диске, а в S3.

Но можно делать проще. Те же загрузки - это файлы на диске, значит папку с этими файлами можно расшарить между экземплярами через nfs.

Немного отдельно стоит кэш кода. Это когда приложение может скопилировать шаблоны, минифицировать скрипты, сохранять байткод. Обычно это не шарится между контейнерами, а выполняется при старте контейнера, либо при сборке образа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы