Исправлена ошибка с запуском Docker контейнеров

В последние сутки вы могли столкнуться с ошибками при запуске 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 работает корректно и вы можете пользоваться им без каких-либо ограничений.
Инструкция пригодится другим провайдерам или пользователям, которые решат запустить несколько сотен контейнеров на одном сервере.

« Назад