Узел кластера не поднимается: включён раздел подкачки
Узлы кластеров контейнеров по умолчанию отказываются работать при включённой подкачке: она делает учёт памяти контейнеров неверным. Отключать её нужно в двух местах — в текущей системе и в описании точек монтирования, иначе после перезагрузки она вернётся.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Подкачка включена и служба отказывается стартовать
Проверка при запуске находит активный раздел подкачки и завершает работу с сообщением.
-
Подкачка возвращается после перезагрузки
Запись в описании точек монтирования или отдельный unit подкачки поднимают её заново.
-
Подкачка включена облачным образом
Часть образов создаёт файл подкачки при первой загрузке своими средствами настройки.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Активные разделы и файлы подкачки.
swapon --showUnit подкачки и их состояние.
systemctl list-units --type=swap --all --no-legendСообщения службы узла кластера при запуске.
journalctl -u k3s -n 30 --no-pager 2>/dev/nullРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Проверка при запуске находит активный раздел подкачки и завершает работу с сообщением.
- Как проверить
-
Посмотрите активную подкачку и сообщение службы.
swapon --show journalctl -u k3s -n 20 --no-pager 2>/dev/null | grep -i swap
- Как исправить
-
Отключите подкачку и уберите её из описания точек монтирования. Только отключение без правки описания вернётся после перезагрузки.
sudo swapoff -a && sudo sed -i.bak "/\sswap\s/s/^/#/" /etc/fstab
- Почему происходит
- Запись в описании точек монтирования или отдельный unit подкачки поднимают её заново.
- Как проверить
-
Посмотрите описание и unit подкачки.
grep -nE "\sswap\s" /etc/fstab 2>/dev/null systemctl list-units --type=swap --all --no-legend
- Как исправить
- Уберите запись из описания и отключите unit подкачки. Он мог быть создан отдельно и не зависеть от описания.
- Почему происходит
- Часть образов создаёт файл подкачки при первой загрузке своими средствами настройки.
- Как проверить
-
Посмотрите, чем создана подкачка.
swapon --show; sudo grep -rl swap /etc/cloud/ 2>/dev/null | head
- Как исправить
- Уберите создание подкачки из описания первичной настройки образа. Иначе она будет возвращаться на каждой новой машине.
Пример вывода
Служба отказывается стартовать при активной подкачке. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
k3s[8300]: F0915 18:10:44.102931 kubelet.go:1599] "Failed to run kubelet" err="running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false"
systemd[1]: k3s.service: Main process exited, code=exited, status=1/FAILURE
$ swapon --show
NAME TYPE SIZE USED PRIO
/swap.img file 2G 0B -2
Связанные ошибки
- Подкачка не подключается: swap-unit в состоянии failed Раздел или файл подкачки не активируется: неверный UUID, файл с дырами, права, приоритет.
- Failed with result 'oom-kill' Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.
- Docker и kubelet: несовпадение драйвера cgroup Драйвер контрольных групп Docker не совпадает с systemd: предупреждения, нестабильная работа контейнеров, проблемы с kubelet.
- Cannot allocate memory в журнале службы Не удалось выделить память: предел службы, память машины, настройка overcommit, исчерпанные области отображения.
- Elasticsearch: служба падает из-за размера кучи JVM Размер кучи больше доступной памяти или больше предела службы: падение при старте или под нагрузкой.
- Failed to connect to bus: подключение к шине недоступно Команды systemctl не работают: нет подключения к шине. Разбор для контейнеров, сеансов по ssh и служб пользователя.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- Hardware Error / EDAC: ошибки памяти в журнале Ядро сообщает об ошибках памяти. Что считать безобидным, а что поводом менять модуль.
Где встречается чаще всего
Источники
-
systemd.swap(5)
Unit подкачки и их связь с описанием точек монтирования. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено запуском узла кластера при активном файле подкачки.