72. Контейнеры в Home Assistant или снова о виртуализации. LXC vs Docker.

 

Как Home Assistant управляет различными дополнениями, которые обеспечивают взаимодействие с устройствами? Как он использует технологии виртуализации и контейнеризации, чтобы повысить производительность, безопасность и масштабируемость своей системы?

В этой статье попытаемся ответить на эти вопросы и чуть ближе рассмотреть архитектуру операционной системы Home Assistant.

Вспоминаем всё что касается виртуализации, проводим параллели и аналогии.

ХА ОС является "гипервизором" для дополнений работающих в ней. Т.к. каждое дополнение это отдельный контейнер с определённым сервисом работающим в нём. Контейнер не может работать на "голом железе", ему нужна некая среда, в которой он будет находиться и запускаться.


Просто для закрепления вспомним что такое контейнер: Это способ запускать приложения в изолированном окружении, не зависящем от операционной системы. Он содержит в себе все необходимые файлы, библиотеки и настройки для работы приложения. Контейнеры легче и быстрее, чем виртуальные машины, так как они не требуют дополнительного слоя виртуализации и используют ресурсы физического компьютера напрямую.
В нашем случае, с гипервизором Proxmox (Debian Linux), используются LXC (эл икс си или просто лхс) контейнеры.
LXC и Docker - это два разных способа использовать технологию контейнеров в Linux. Они имеют разные цели и возможности. Вот некоторые основные отличия между ними:
  • LXC - это аббревиатура для Linux Containers, которые представляют собой операционную систему, которая запускает несколько систем Linux виртуально на одном хосте через одно ядро Linux. LXC обеспечивает полную виртуализацию системы, то есть контейнеры имитируют работу реальных компьютеров с определенной операционной системой и приложениями.
  • Docker - это инструмент с открытым исходным кодом для создания, развертывания и работы приложений на централизованной платформе. Docker обеспечивает виртуализацию приложений, то есть контейнеры запускают изолированные процессы с минимальным потреблением ресурсов. Docker также предоставляет репозиторий образов контейнеров, которые можно скачать и использовать для своих нужд.
Преимущества LXC перед Docker:
  • LXC более универсален и гибок, так как он позволяет запускать любую операционную систему в контейнере, в то время как Docker ограничен Linux-совместимыми приложениями.
  • LXC более близок к нативной производительности, так как он не требует дополнительного слоя виртуализации и использует ресурсы физического компьютера напрямую.
  • LXC более безопасен, так как он предоставляет больше возможностей для изоляции и ограничения контейнеров, таких как пространства имен, контрольные группы, профили Seccomp и т.д..
Преимущества Docker перед LXC:
  • Docker более прост и удобен в использовании, так как он предоставляет единый интерфейс для создания, запуска и управления контейнерами с помощью специальных команд.
  • Docker более переносим и совместим, так как он обеспечивает единообразие и стандартизацию приложений между разными платформами и облаками.
  • Docker более масштабируем и динамичен, так как он позволяет быстро развертывать и обновлять приложения, используя механизмы слоев, снимков и реестров.
Возвращаясь к архитектуре Home Assistant и его дополнений получаем следующее:
Дополнение, это всего лишь какая-то программа, имеющая определённый функционал. Чтобы эта программа работала, её "засовывают" в докер контейнер.
Операционная система Хоум Ассистант имеет встроенную среду для запуска таких контейнеров и может взаимодействовать с программой, запущенной из того самого контейнера. 
Виртуальная машина с ХА ОС является как бы физическим уровнем для контейнера, хотя по сути сама таковой не является, т.к. работает на гипервизоре


Проще говоря получается своеобразный принцип матрёшки.

  • Чем это хорошо?
При бэкапе виртуальной машины сохраняется всё её содержимое как есть. Соответственно такую виртуалку можно быстро развернуть, и всё что было в ней до бэкапа будет и после, в том же самом состоянии.

  • Чем это плохо?
Если по какой-то причине необходимо сделать копию такой системы, чтобы копия работала с теми же самыми зигби устройствами, без влияния на рабочую систему, то этого сделать не получится.
Если по какой либо причине возникла необходимость поднять новую систему с ХА ОС вместо текущей, то нужно заново обходить все зигби устройства и запускать на них процесс сопряжения. После чего сидеть и переименовывать устройства в человекопонятные названия.

Надеюсь с контейнерами и их ролью стало немного понятнее. Теперь самое время вспомнить как работает обмен данными с зигби устройствами.

  • Есть координатор (допустим сетевой) умеющий "говорить" с конечными устройствами. Результаты их диалога он выдаёт на свой сокет - ip_адрес:номер_порта. 
  • Есть дополнение Zigbee2MQTT у которого грубо говоря две ноги. С помощью одной оно подключается к сокету координатора и через него может "вести диалог" с конечными устройствами. Именно поэтому в настройках Z2M указывается адрес координатора. С помощью второй ноги подключено к брокеру MQTT (сервер сообщений).
  • Есть дополнение MQTT брокер, которое из настроек по большому счёту, имеет только имя пользователя и пароль, с которыми к нему можно подключиться. Оно и является тем самым сервером сообщений. Он передаёт данные с устройств в некоем стандартизированном формате, и так же принимает команды для отправки на устройства в таком же формате. 
  • Есть интеграция MQTT в Home Assistant, которая подключается к брокеру и через него получает информацию с устройств и так же может отправлять им команды. А значит с её помощью сам ХА может взаимодействовать с устройствами.
  • Маленький секрет. сам ХА, к которому мы привыкли подключаться, это тоже контейнер внутри собственной ОС.

Т.к. и Zigbee2MQTT и MQTT это дополнения в Home Assistant, то по факту это два разных контейнера запущенных внутри одной операционной системы (ХА ОС).
А раз это контейнеры, то значит их можно вынести за пределы как операционной системы, так и всей виртуальной машины.
Имея проксмокс в качестве гипервизора и платформы для запуска линукс контейнеров, можно поднять на нём и Zigbee2MQTT и MQTT брокер в виде как бы отдельных виртуалок (на самом деле LXC).

Плюсы такого решения:
- Прямое использование ресурсов: LXC контейнеры используют ресурсы физического компьютера напрямую, что может снизить нагрузку на процессор и память.
- Независимость от перезагрузки Home Assistant: MQTT брокер и Zigbee2MQTT будут продолжать работать даже при перезагрузке Home Assistant, что может ускорить загрузку и начало работы с устройствами.
- Тестирование и дублирование: Вы можете запустить тестовую машину с Home Assistant и подключить её к тому же брокеру. Это позволяет быстро дублировать все устройства и управлять ими так же, как и с основного Home Assistant.
- Бэкап и восстановление: LXC контейнеры также поддерживают резервное копирование и восстановление, как и виртуальные машины, и могут быть развернуты быстрее из-за своего меньшего размера.
- Сетевые настройки: У каждого LXC контейнера есть свой MAC-адрес в сети, что позволяет назначить каждому из них статический IP-адрес на роутере.
- Быстрое развертывание: Благодаря возможности бэкапа и восстановления, а также сетевым настройкам, развертывание новой системы Home Assistant с нуля может занять значительно меньше времени.

Минусы у такого решения конечно же тоже есть.
- Понимание архитектуры систем: Необходимо усвоить основы и принципы архитектуры систем и разницу между ними. Это может потребовать времени и усилий для изучения.
- Настройка резервного копирования: Важно не забыть настроить резервное копирование не только для основной виртуальной машины, но и для контейнеров. Это может добавить дополнительную сложность в процесс управления системой.
- Настройка сети: Необходимо настроить все, что касается сети для этих контейнеров. Это может потребовать дополнительных знаний и опыта в области сетевых технологий.
- Время на настройку: Необходимо найти время, чтобы сделать все один раз как следует. Это может быть сложно, особенно если у вас мало свободного времени.
- Обновления и совместимость: При использовании LXC контейнеров вам придется самостоятельно следить за обновлениями и убедиться, что они совместимы с вашей текущей системой. В то время как в Home Assistant OS обновления и совместимость дополнений обычно управляются автоматически. Это может добавить дополнительную сложность и требовать больше времени на поддержание системы в актуальном состоянии.
- Решение проблем: Возможно, вам придется самостоятельно решать возникающие проблемы при работе контейнера. Это может быть сложно, особенно если у вас нет опыта работы с LXC контейнерами.

Если преимущества интересуют, а недостатки не пугают, то можно переходить к практической части.

Комментарии