/dev/kvm в сервисе Docker Swarm

Вопрос или проблема

Я хотел бы запустить несколько 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 не найден, что может быть вызвано следующими факторами:

  1. VT (виртуализация) отключено в BIOS: Виртуализация должна быть активирована в настройках BIOS/UEFI вашего сервера.
  2. Модуль KVM не загружен: Проверьте, загружен ли модуль KVM в операционной системе.
  3. Ограничения Docker Swarm: Как вы правильно отметили, режим Swarm не поддерживает использование privileged контейнеров и монтирование устройств, таких как /dev/kvm.

Возможные Решения

  1. Использование Docker-Compose в одиночном режиме:
    Если это возможно, можно запустить ваш проект с помощью docker-compose, который, как вы упомянули, работает корректно с privileged: true. Хотя это не решение для Swarm, оно позволит вам обойти проблемы с эмуляцией.

  2. Обновление версии Docker:
    Убедитесь, что у вас установлена последняя версия Docker, так как поддержка новых возможностей, таких как cap_add, постоянно обновляется и расширяется. Обновление может устранить некоторые текущие ограничения.

  3. Ручное добавление настроек в Swarm:
    Попробуйте создать кастомную Docker-имидж на базе вашего приложения и включить в него необходимые настройки для работы с KVM. Это может потребовать дополнительных усилий, но может помочь обойти некоторые ограничения.

  4. Использование инструмента Terrafarm:
    Рассмотрите возможность использования специализированных инструментов, таких как Terrafarm или других orchestration решений, которые могут помочь в управлении физическими ресурсами и обеспечить необходимые доступы к KVM.

  5. Docker Forks:
    Исследуйте возможность использования форков Docker, которые предлагают дополнительную функциональность или специальную поддержку работы с KVM. Например, альтернативные решения на базе LXC/LXD могут обеспечить физический доступ к аппаратным ресурсам.

Рекомендации и Заключение

Работа с виртуализацией в контейнерах требует тщательного подхода и понимания подводных камней. Перед тем, как внедрять решение, убедитесь, что:

  • Виртуализация активирована в BIOS и модуль KVM загружен.
  • Оцените возможности, которые могут предоставить обновленные инструменты и решения.

Решение, которое вы выберете, должно соответствовать вашим бизнес-требованиям и быть применимо в рамках вашей инфраструктуры. В окончательном варианте выберите подход, который объединит необходимые функции и максимально удовлетворит ваши потребности.

Если у вас возникнут дополнительные вопросы или потребуется помощь в реализации какого-либо из предложенных решений, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...