Данная статья наврятли является гайдом по созданию домашней лаборатории, скорее это некое описание намерений.
Предисловие
Как то в 2025 году, возник интерес попрактиковаться с технологиями обработки и хранения данных (Hadoop, Kafka, Spark и т.д). Тогда и появилась идея создать свой homelab. Стек конечно же может быть любой, у меня выбор обусловлен тем что на моей текущей работе используются данный набор. Тут можно было бы иронично сказать: "Не неси работу домой".
Домашние лаборатории (homelabs) создают для обучения, тестирования технологий. Люди используют их как безопасную песочницу для работы с серверами, сетями и данными.
Закапываться в подбор около серверного оборудования не хотелось. Порыскав по объявлениям о продаже в своем городе, нашел игровой системник. Вариант выглядел неплохим, CPU Intel i9 c 10 ядрами (20 потоков), 32 Гб RAM (добил до 64 ГБ потом), с хорошим бонусом в виде Nvidia RTX 3090 Ti с 24 Гб видеопамяти. Данная потребительская видеокарта к слову пользуются популярностью для запуска инференсов LLM и обучении нейросетей.
Строим полигон
По вопросу о дистрибутиве Linux: была идея использовать RHEL 10 (есть developer подписка на 16 машин), чтобы так сказать обернуть свой опыт в entreprise контекст, но в итоге выбор был сделан в пользу Ubuntu 24.04. В целом для меня тут небыло разницы, какой дистрибутив использовать, так как цель не в том чтобы упражняться в настройке и развертывании, а в том чтобы работать с данными и моделями. Ubuntu просто дает более легкий способ заняться этим.
В процессе конфигурации, я также отошел от концепции использования в виде сервера и стал использовать как рабочую станцию. Думаю это всего лишь условности, да и homelab может быть в виде чего угодно, главное что это полигон для экспериментов.
Закупившись дополнительным SSD и HDD (для бекапа) на пару терабайтов, решил прикинуть как разворачивать.
Сначало рассматривал вариант развернуть все в контейнерах с оркестрацией через docker compose. На просторах интернета есть подобные гайды как развернуть Hadoop в single-node cluster режиме (пример Setting Up an HDFS Cluster with Docker Compose: A Step-by-Step Guide) или Kafka в виде кластера с одной нодой (Изучаем Apache Kafka с нуля. Урок 3. Kafka Docker KRaft. Однонодовый кластер). Потом все таки пришел к решению разворачивать в виртуальных машинах. Конечно в таком виде всеравно это не production-like (масштабы не те), но для изучения технологий и практики построения ETL и некого вида условных хранилищ вполне подходит.
В качестве виртуализации решил использовать KVM/QEMU. Для управления виртуальными машинами решил пойти по простому пути (как мне кажется) а именно установить cockpit и пакет к нему cockpit-machines. При установке пакета cockpit-machines, автоматически подтягиваются пакеты-зависимости:
libvirt-daemon-system - фоновая служба, управляющая виртуальными машинами KVM и QEMU.
libvirt-dbus - bridge API DBus, используемый для просмотра, запуска, остановки и удаления виртуальных машин.
qemu-kvm - пакет аппаратной виртуализации, необходимый для запуска виртуальных машин в Ubuntu.
В итоге получаем вполне сносный UI, для управления виртуальными машинами, с уже настроенной сетью между ними, и возможностью управления storage pool'ами.


В качестве дефолтного пула для вм, я задал свой смонтированный SSD на 2 ТБ.

Инструкции по установке cockpit, для разных дистрибутивов можно найти тут.
Дальнейший план
Одновременно много запускать не получиться. Будет этап подгонки ресурсов. Если взять простой проект какого нибудь ETL для анализа логов (HDFS + Spark + PostgreSQL) то отправная точка в ресурсах может быть такой:
ВМ |
CPU |
RAM |
Диск |
HDFS namenode |
2-4 |
4 ГБ |
30 ГБ |
HDFS datanode |
4-8 |
16 ГБ |
400 ГБ |
Spark |
4-8 |
16-32 ГБ |
300 ГБ |
PostgresSQL |
2-4 |
8 ГБ |
200 ГБ |
Или тайм-стриминг через Kafka + Flink c PostgreSQL (для результатов):
ВМ |
CPU |
RAM |
Диск |
Kafka Broker |
2-4 |
4 ГБ |
100 ГБ |
Flink Taskmanager |
4-8 |
8 ГБ |
200 ГБ |
Flink JobManager |
2 |
4 ГБ |
20 ГБ |
PostgresSQL |
2-4 |
8 ГБ |
200 ГБ |
Так же надо не забывать про запас для хост машины и мониторинга. Для мониторинга решил использовать Prometheus/Grafana развернутые в докере на хосте. Необходимо будет настроить node exporter'ы для каждой вм (метрики CPU, RAM, диск) и сопуствующие экспортеры для метрик hadoop, kafka, postgresql и т.д. Тут думаю попробовать использовать Ansible для автоматизации или обойтись обычными bash скриптами.
Что делать с видеокартой? Тут тоже большое поле для экспериментов. Например ускорение Apache Spark с помощью RAPIDS на GPU, работа с векторными базами данных, встраивание ML в пайпланы. Отдельным фронтиром является внедрение LLM агентов в ETL или SQL агенты.
В заключение
Эта homelab не для практики DevOps или системного администрирования. Основной концепт который я хотел достичь, в том чтобы собирать и запускать нужные контейнеры и ВМ для определенных экспериментов (не забывая об ограниченных ресурсах). Нужны сегодня Kafka, Spark, HDFS? Поднимаем набор вм. Нужно поизучать сегодня как работает кластер PostgreSQL? Освобождаем ресурсы от прошлых вм и поднимаем три вм с PostgreSQL.
В дополнение могу порекомендовать ресурс server-world.info где собраны по разделам все команды для настройки и установки чего либо на серверах.