Вопрос или проблема
Я хотел бы запустить несколько docker-android экземпляров в docker swarm.
Но они не работают:
ОШИБКА | эмуляция x86 в настоящее время требует аппаратного ускорения!
https://developer.android.com/studio/run/emulator-acceleration#vm-linux
Статус ускорения CPU: /dev/kvm не найден: VT отключен в BIOS или модуль ядра KVM не загружен
Мой узел поддерживает kvm, и я могу запустить это непосредственно на узле с docker compose, добавив privileged: true
, и это работает отлично.
Но docker swarm не поддерживает режим привилегий!
Недавно добавили поддержку cap_add
в swarm, поэтому я попытался добавить все доступные возможности, но ни одна из них не включает kvm внутри контейнера.
Устройства также не поддерживаются в режиме swarm!
devices:
- "/dev/kvm:/dev/kvm"
Я знаю о этом обходном решении для режима привилегий, но я хочу использовать лимиты ресурсов развертывания, чтобы автоматически выбирать узлы на основе памяти.
Мне нужно быстрое решение, поэтому я открою вознаграждение.
Я открыт для любых хакерских способов или чего-то вроде форков docker, которые поддерживают это
Ответ или решение
Вопрос о Виртуализации и Docker Swarm: Проблема с /dev/kvm
Современные технологии виртуализации предоставляют широкие возможности для развертывания приложений и сервисов. Однако, когда речь заходит о таких специфических случаях, как запуск нескольких экземпляров Docker в Swarm-режиме с использованием аппаратного ускорения через /dev/kvm
, возникают определенные сложности. В данном ответе мы постараемся детально рассмотреть вашу ситуацию и предложить возможные решения.
Проблема
Из вашего описания видно, что вы хотите запустить несколько экземпляров docker-android в режиме Docker Swarm. Ошибка, с которой вы столкнулись, сообщает о том, что эмуляция x86 требует аппаратного ускорения, и /dev/kvm
не найден, что может быть вызвано следующими факторами:
- VT (виртуализация) отключено в BIOS: Виртуализация должна быть активирована в настройках BIOS/UEFI вашего сервера.
- Модуль KVM не загружен: Проверьте, загружен ли модуль KVM в операционной системе.
- Ограничения Docker Swarm: Как вы правильно отметили, режим Swarm не поддерживает использование
privileged
контейнеров и монтирование устройств, таких как/dev/kvm
.
Возможные Решения
-
Использование Docker-Compose в одиночном режиме:
Если это возможно, можно запустить ваш проект с помощьюdocker-compose
, который, как вы упомянули, работает корректно сprivileged: true
. Хотя это не решение для Swarm, оно позволит вам обойти проблемы с эмуляцией. -
Обновление версии Docker:
Убедитесь, что у вас установлена последняя версия Docker, так как поддержка новых возможностей, таких какcap_add
, постоянно обновляется и расширяется. Обновление может устранить некоторые текущие ограничения. -
Ручное добавление настроек в Swarm:
Попробуйте создать кастомную Docker-имидж на базе вашего приложения и включить в него необходимые настройки для работы с KVM. Это может потребовать дополнительных усилий, но может помочь обойти некоторые ограничения. -
Использование инструмента Terrafarm:
Рассмотрите возможность использования специализированных инструментов, таких какTerrafarm
или других orchestration решений, которые могут помочь в управлении физическими ресурсами и обеспечить необходимые доступы к KVM. -
Docker Forks:
Исследуйте возможность использования форков Docker, которые предлагают дополнительную функциональность или специальную поддержку работы с KVM. Например, альтернативные решения на базеLXC/LXD
могут обеспечить физический доступ к аппаратным ресурсам.
Рекомендации и Заключение
Работа с виртуализацией в контейнерах требует тщательного подхода и понимания подводных камней. Перед тем, как внедрять решение, убедитесь, что:
- Виртуализация активирована в BIOS и модуль KVM загружен.
- Оцените возможности, которые могут предоставить обновленные инструменты и решения.
Решение, которое вы выберете, должно соответствовать вашим бизнес-требованиям и быть применимо в рамках вашей инфраструктуры. В окончательном варианте выберите подход, который объединит необходимые функции и максимально удовлетворит ваши потребности.
Если у вас возникнут дополнительные вопросы или потребуется помощь в реализации какого-либо из предложенных решений, не стесняйтесь обращаться.