Виправлена помилка із запуском Docker контейнерів

Останні 24 години ви могли зіткнутися з помилками при запуску Docker контейнерів на NAT Cloud серверах. Якщо у вас останнім часом виникали проблеми з Docker, спробуйте повторити ваші дії зараз, усе має працювати!

Виявилося, що на ваших серверах було запущено так багато контейнерів Docker, що гіпервізор зіткнувся з обмеженнями ядра Linux і не зміг створювати нові keyrings, які необхідні для роботи Docker.

Ділимося способом вирішення цієї проблеми, оскільки в інтернеті на цю тему майже немає інформації, або з цією проблемою ніхто не стикався, або просто не ділився способом її вирішення.

Текст виникаючої помилки:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: unable to join session keyring: unable to create session key: disk quota exceeded: unknown.

Ось детальніший опис інциденту: через особливості LXC віртуалізації на всі LXC контейнери діють деякі загальні обмеження ядра, встановлені на рівні гіпервізора. Одним із таких обмежень є ліміт на кількість і розмір keyrings (сховище ключів у ядрі Linux), і він є спільним для всіх LXC контейнерів, запущених на гіпервізорі. Одного дня через велику кількість збережених ключів ці ліміти були перевищені, і виникли проблеми, включаючи неможливість запуску Docker контейнерів.

Спочатку ми думали, що перевищено ліміт на кількість ключів і збільшили його, але це не допомогло в нашій ситуації. Врешті-решт ми з'ясували, що існує також ліміт і на розмір сховища, і за замовчуванням він встановлений лише на кілька кілобайт, такого обмеження в наших умовах було мало. Проблема вирішилася збільшенням лімітів до нормальних значень. Ми встановили ці обмеження з запасом, надалі будемо стежити за ними, а з вами ділимося способом вирішення цієї проблеми:

 

sysctl -w kernel/keys/maxkeys=1000000
sysctl -w kernel/keys/maxbytes=52428800

 

Для збереження цих налаштувань після перезавантаження також необхідно створити додатковий конфігураційний файл sysctl наступною командою:

echo "kernel.keys.maxkeys=1000000
kernel.keys.maxbytes=52428800" > /etc/sysctl.d/99-docker.conf

На всякий випадок уточнюємо, що нашим клієнтам, які використовують сервера NAT Cloud, нічого робити не потрібно, ми вже все виправили, ці налаштування робляться на рівні гіпервізора. Тепер на всіх наших серверах Docker працює коректно, і ви можете користуватися ним без будь-яких обмежень. Інструкція стане в нагоді іншим провайдерам або користувачам, які вирішать запустити кілька сотень контейнерів на одному сервері.

 

 

« Назад