С неделю назад мигрировал ряд сервисов на базе контейнеров LXC в облако. Чтобы не переплачивать за простаивающие ресурсы в облаке взял в два раза меньше памяти и процессорных ядер. Поскольку нагрузка на сервисы минимальная, а памяти на исходном сервере было с запасом, то лимиты по памяти и ядрам не были настроены, но в условиях потенциальной нехватки ресурсов нужно решить проблему "шумного соседа" (когда один сервис может исчерпать ресурсы всего сервера и привести к нестабильной работе или отказу в обслуживании у остальных сервисов).
Для начала настроил сколько RAM и SWAP может использовать каждый из контейнеров.
# Resource limits lxc.cgroup2.memory.max = 2048M lxc.cgroup2.memory.swap.max = 256M
В Debian 11 по-умолчанию systemd использует unified структуру и если вы ранее настраивали лимиты в cgroupv1, то нужно сделать миграцию. Чтобы лимиты применились нужно остановить и запустить контейнер заново (перезагрузки будет недостаточно).
Позже выяснилось что инструментарий LXC еще не полностью поддерживает cgroupv2 и показания RAM/SWAP отсутствуют в выводе lxc-ls
$ sudo lxc-ls -1 -f -F NAME,STATE,RAM,SWAP NAME STATE RAM SWAP gitlab RUNNING 0.00MB 0.00MB gitlab-runner RUNNING 0.00MB 0.00MB jenkins RUNNING 0.00MB 0.00MB nagios4 RUNNING 0.00MB 0.00MB nextcloud RUNNING 0.00MB 0.00MB
Чтобы иметь представление об использовании памяти набросал небольшой скриптик. Пример вывода:
$ lxc-mem NAME RAM SWAP ------------------------------------------------------- gitlab 3337/ 4096 0/ 2048 gitlab-runner 844/ 2048 0/ 256 jenkins 840/ 2048 4/ 256 nagios4 179/ 1024 0/ 256 nextcloud 271/ 2048 0/ 256 ------------------------------------------------------ TOTAL 5471/11264 4/ 3072
Для RAM и SWAP информацию выводится в формате usage/limit в мегабайтах.
Комментариев нет:
Отправить комментарий