Я взял свой домашний Nextcloud (700 МБ/с, своя железка, никаких облаков) и переехал с него на Kubernetes с управляемыми сервисами. Postgres и Valkey теперь крутятся как Managed Services: обновления и бэкапы — это не моя забота. NetBird Self-Hosted тоже переехал в «куб». Cursor помогал. Всё работает.

Всем привет, я Дмитрий Гайворонский, Business Development Manager в команде Deckhouse Data Orchestration компании «Флант». Недавно я рассказывал, как заменил «Яндекс Диск» на свой Nextcloud и разогнал синхронизацию до 700 МБ/с на старом Mac mini — без инженерного бэкграунда, с помощью Cursor. 

Кстати, история получилась очень своевременной: 3 июня 2026 года «Яндекс» поменял модель доступа к десктопному приложению «Яндекс Диска» — облачные функции стали доступны только по платной подписке «Яндекс 360». Без неё в приложении остаются только локально сохранённые файлы, а работа с облаком напрямую отключена.

Если интересно, как можно уйти с «Яндекс Диска» на своё решение без потери скорости и комфорта, — читайте в первой части.

В этой статье я продолжаю историю, и для того, чтобы быть в контексте, лучше (но не обязательно) прочитать первую часть.

Дальше я кратко расскажу и покажу, какие у меня железо и софт, почему и какой выбрал Kubernetes и можно ли его заменить. Но если хотите сразу перейти к делу — кликайте сюда.

Зачем вообще кластер? Почему бы не купить один мощный компьютер?

Давайте посмотрим на цены. Mac Studio M4 с 128 ГБ памяти или MacBook Pro с аналогичным объёмом стоят от 400 тысяч до миллиона рублей. За эти же деньги можно купить новенькую Lada Granta. Десктоп по цене автомобиля — это нормально?

Новый современный компьютер уже как машина
Новый современный компьютер уже как машина

А память? Комплект из двух планок DDR5 по 64 ГБ стоит около 130 тысяч рублей на заказ. И это только память!

Оперативная память Kingston FURY Beast Black [KF556C40BBK2-64] 64 ГБ. Цена за один комплект — от 65 тысяч рублей.
Оперативная память Kingston FURY Beast Black [KF556C40BBK2-64] 64 ГБ. Цена за один комплект — от 65 тысяч рублей.

И что делать тем, у кого нет таких денег? Не все могут выложить миллион за железо, особенно если нет уверенности, что получится это окупить и реализовать задуманное.

Я вижу такой выход: начинать с того, что уже есть или что доступно по бюджету, и наращивать ресурсы постепенно. Инвестировать в дорогое железо стоит лишь после того, как гипотеза подтвердилась на практике и ты понял — это действительно нужно и будет приносить пользу.

К концу первой части я собрал вот такой сетап, на котором экспериментировал и запустил свой первый домашний сервис:

  • Коммутатор TP-Link TL-SG105M (5 портов × 2,5 Гбит/с)

  • Mac mini Late 2014: i5, 8 ГБ ОЗУ, 4 ТБ SSD (SATA III)

  • Mac mini 2018: i7, 64 ГБ ОЗУ, 128 ГБ SSD + внешний 1 ТБ NVMe Gen4 (Thunderbolt 3)

Понял, что хочу двигаться дальше, но железо «кусалось» по цене. Поэтому решил однозначно: продолжаю эксперименты поэтапно, на имеющейся базе, и смотрю, как пойдёт. В этот момент задумался — как это всё объединять? Какие подходы и технологии позволяют заставить разрозненные узлы работать как единое целое? Так я вышел на Kubernetes. Захотелось проверить его в деле, прежде всего ради объединения физических машин, а не просто виртуализации. Стал искать Mac mini, обязательно с поддержкой 10-гигабитной сети — раз уж речь о кластере.

В итоге за несколько месяцев на «Авито» собрал вот такой сетап:

  • коммутатор TP-Link TL-SX105 (5 портов × 10 Гбит/с);

  • 1× Mac mini 2014 Late (i5, 8 ГБ) — 2,5G Ethernet через USB-адаптер;

  • 3× Mac mini 2018 (i7, 64 ГБ) — 10G Ethernet. Накопители изначально были разные, но я выровнял их, заменив на одинаковые по объёму NVMe-диски;

  • мини-стойка Deskpi T1 Plus.

Почему Mac mini? Мне просто нравится экосистема Apple. Форм-фактор идеально подходит для дома: компактный, без внешних блоков питания, тихий и эстетичный. Разве что немного греется. Модель 2018 года — последняя на Intel, куда можно поставить Windows или Ubuntu. Память легко апгрейдится до 64 ГБ, а под заказ доступны модули 10-гигабитного Ethernet. 

Конечно, это не самый оптимальный выбор для Kubernetes-кластера, но у него есть решающее преимущество — тишина. Его можно спокойно поставить в спальне рядом с кроватью. Главный минус — отсутствие GPU.

Кстати, про 10-гигабитную сеть: сейчас понимаю, что она не была строго необходима. Это был мой «бзик» — казалось, что если тестировать OLAP-движок или Data Lake, то быстрая сеть обязательна. В теории да, но на практике стандартные 1 Гбит/с или 2,5 Гбит/с тоже отлично справляются.

Если говорить о современном железе вроде Minisforum и аналогов — тут всё однозначно: по производительности и возможностям они выигрывают. Мой следующий кластер уже будет на такой платформе. Подробности расскажу в отдельной статье.

В итоге вот что у меня получилось:

Почему Kubernetes? Откуда я узнал о нём 

Я занимался темой платформы данных и судьба привела меня во «Флант», где ребята много лет работают с Kubernetes, а ещё они недавно выпустили первый релиз с Managed Postgres/Storage. Мне понравился этот подход: для поставщика дата-платформы самому заниматься инфраструктурой и безопасностью — это всегда боль. Я верю в эту тему и присоединился к компании в роли Business Development Manager. Соответственно, как может быть сапожник без сапог? А можно Kubernetes дома? А это не опасно? А оно работает?

В Kubernetes я увидел возможность объединить несколько старых узлов в единую систему — буквально в один «оркестр».

Сначала я решил просто проверить: насколько платформа доступна, стабильна и надёжна для домашних задач. Уверенности добавил Cursor — благодаря ему я понял, что смогу во всём разобраться. Честно говоря, без этого AI-ассистента я бы в Docker и Kubernetes никогда не полез. Даже близко. Без подсказок мой «DevOps-уровень» заканчивается на AppStore.

Ванильный Kubernetes? Нет. Готовый продукт на его базе — уже другое дело. Но как его получить? Вариант «покупать» сразу отпадает. Поэтому я пошёл к своим и попросил по блату выдать лицензию на Deckhouse Kubernetes Platform Enterprise Edition (DKP EE) (платная редакция DKP с расширенным функционалом), включая managed-сервисы. Лицензию получил. Но сразу предупрежу: для вас, господа присяжные заседатели, бесплатно доступна только Community-версия и managed-сервисов в ней нет.

Цель этой статьи — в том числе проверить, есть ли у вас (у читателей) интерес к подобным возможностям. Если есть, то в будущем я постараюсь согласовать внутри компании их добавление в Community-версию. Хотя бы в ограниченном виде.

Развернул платформу чётко по инструкции через UI. Алгоритм простой: ставишь Docker на Mac, настраиваешь SSH-доступ к узлам, запускаешь установщик — и кластер поднимается. У меня всё заняло около часа-двух, с учётом времени на исправление собственных ошибок.

Роль control plane (мастера) я отдал старому Mac mini 2014 года. Три Mac mini 2018 стали воркерами. Старичок 2014-го, конечно, пыхтит — загрузка CPU держится около 30 %, — но свою задачу решает. Ему и не нужно больше ничего: только поддерживать работу системы и принимать входящий трафик.

Кстати, DKP поддерживает и контейнеризацию, и виртуализацию. Благодаря виртуализации, например, можно поднимать Kubernetes-кластеры поверх виртуальных машин. Но для моей задачи установка Deckhouse прямо на железо подошла лучше — мне нужен всего один кластер. Промышленные серверы я купить не могу (дорого, шумно, занимают много места). Зато могу собрать кластер из нескольких Mac mini, запускать всё на одном кластере и переносить нагрузку туда, где есть свободные ресурсы.

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

Deckhouse UI
Deckhouse UI

Deckhouse Managed Services — собираем пазл

Теперь возвращаемся к исходной прикладной задаче — развёртыванию Nextcloud. Как мы его развернём с учётом новых возможностей?

Схема узлов и распределение компонентов. Распределение условно: в кластере расположение пода (процесса) может меняться динамически:

В Nextcloud есть: PHP, Postgres, Redis, Cron-задачи, Nginx/Caddy. А в DKP есть: Ingress, Secrets, Certificates, Prometheus/Grafana, Managed Postgres, Managed Valkey, Cron… Ну естественно, появилось желание попробовать поменять.

Итак, мы поставили кластер на железо. Теперь у меня Kubernetes дома! Не может быть…

Дальше — снова работа с Cursor по деплою Nextcloud. Первым делом я решил без выпендрёжа развернуть стандартный Nextcloud с его Redis и Postgres. Удивительно, но деплой прошёл ощутимо легче. Конечно, я уже наблатыкался с Cursor: научился правильно его готовить. Как изучать задачу, понимать, правильно ли он меня понял, составлять план, действовать по шагам, подтверждать любые изменения, хранить версии. В общем более-менее приручил — хотя всё равно выкидывает что-нибудь.

Второй важный момент — API и документация Deckhouse. Я постоянно прошу Cursor сначала изучить сайт, затем попробовать — и только потом работать с кластером. Это ключевое. Главная сложность была в том, что Nextcloud и NetBird в документации описаны только с деплоем в Docker. Вроде Kubernetes рядом, образы те же самые — но изоляция компонентов и stateless добавили сложностей. Пришлось сильно помучить Cursor, чтобы найти конфигурацию для NetBird, которая взлетела. Я сначала запускал сервис, а потом изучал, как это вообще работает.

Nextcloud заработал в «кубе». Все показатели — как и были. Скорость такая же. Дальше — задача по замене Postgres на Managed Postgres и Managed Valkey. И всё получилось. Nextcloud подхватил два «внешних» компонента, и теперь их образы — это уже забота Deckhouse. Обновления, бэкапы — всё это больше не мои проблемы. Я только на всякий случай организовал репликацию своих личных данных на отдельный носитель, чтобы вообще не зависеть ни от каких технологий.

Приватность: облако есть, провайдера нет

И вот тут я понял главное. Managed Services — это концепция облачных провайдеров, которые управляют железом, обновлениями, бэкапами. Вы просто их используете и платите.

Теперь у меня есть это облако. Но провайдера нет.

Я получаю все блага облака:

  • автоматические обновления Postgres и Valkey;

  • резервные копии на отдельном хранилище;

  • высокую доступность (3 реплики, автоматический failover);

  • мониторинг и алерты;

  • масштабируемость — если понадобится, добавлю узлы.

При этом у меня нет проблем с конфиденциальностью. Нет проблем с задержками связи. Нет зависимости от политики провайдера. Мои данные лежат дома, на моём оборудовании, в моём кластере, которым я управляю.

Это приватное облако. Облако с контролем.

Переключение на Managed Services

Переключение на Managed Services оказалось даже слишком лёгким. Буквально изменил пути к Postgres и Redis в конфиг-файлах. Смотрю в DKP только через консоль («для домохозяек», как говорят наши разработчики) и через Grafana. Никакой командной строки. В целом всё переехало в Kubernetes, я отключил все хостовые сервисы. Nextcloud/NetBird полностью крутятся в DKP.

Обновляется как роутер / Выбор управляемых сервисов
Процессы (поды) Nextcloud, БД Postgres, кеш Valkey вместо Redis и сам Nextcloud
Процессы (поды) Nextcloud, БД Postgres, кеш Valkey вместо Redis и сам Nextcloud
Процессы (поды) NetBird: БД postgres, dashboard, management, signal, relay
Процессы (поды) NetBird: БД postgres, dashboard, management, signal, relay

Снова прошу поддержки

Я попробую уломать команду Deckhouse, чтобы что-то из Managed Services включили и в Community Edition — тогда всё это будет доступно всем бесплатно. Насыпьте, пожалуйста, плюсов этой статье, чтобы поддержать идею.

Сложности с NetBird

Не было официальных Helm-чартов. Cursor создавал их на основе docker-compose. Проблема в том, что в NetBird сразу 4 независимых сервиса: Management, Dashboard, Relay, Signal. В Docker они поднимались вместе. В «кубе» — всё раздельно. Все пути и связи поехали.

Пришлось долго разбираться. Все 4 сервиса вызываются по одному домену с одним именем — нужно было настроить Ingress так, чтобы на разных портах запускались разные службы. Заработало с двумя Ingress’ами: для HTTP и для gRPC. Ещё какие-то сниппеты и rewrite-правила.

Для меня это был тёмный лес. Почти половину токенов за месяц потратил, чтобы Cursor во всём разобрался и предложил рабочий конфиг. Я лично не могу оценить, насколько это правильно с точки зрения сетей — нужен спец. Но работает так, как я хотел: без 4 поддоменов, а с одним именем. Клиенты на Mac, Linux, iOS.

И ещё раз скажу: выбрал NetBird из-за рабочего приложения в AppStore. Как Tailscale self-hosted работает — не знаю.

Правила для Ingress’ов — какой сервис запускать при каком имени. Два Ingress’а для разных протоколов, не спрашивайте, что это и как работает :)
Правила для Ingress’ов — какой сервис запускать при каком имени. Два Ingress’а для разных протоколов, не спрашивайте, что это и как работает :)

Разгоняю скорость синхронизации до 1,1 ГБ/с

Вот тут начались эксперименты. Я начал с базовой конфигурации Nextcloud в Kubernetes. Скорость была приемлема, но я хотел понять: сколько максимально может дать эта сеть?

Шаг 1: MTU (Maximum Transmission Unit)

По умолчанию MTU на сетевых интерфейсах стоит 1500 байт. Но для 10-Гбитной сети это неоптимально — слишком много overhead на разделение трафика на пакеты.

Я настроил Jumbo Frames — MTU 9000 байт. Это означает, что каждый сетевой пакет может быть в 6 раз больше. Меньше пакетов → меньше overhead → быстрее скорость.

Шаг 2: параллельные соединения в Nextcloud

Nextcloud client по умолчанию открывает отдельное соединение для каждого файла при синхронизации. Это значит:

  • если качаю один большой файл (кино) → 700 МБ/с;

  • если качаю два файла параллельно → 1–1,1 ГБ/с;

  • если качаю несколько файлов → близко к потолку 10GbE-сети.

Результат: 1,1 ГБ/с

Nextcloud client теперь синхронизирует несколько файлов параллельно. В момент пика сеть работает на пределе:

Nextcloud client скачивает со скоростью 1,1 ГБ/с, реальная скорость по сети
Nextcloud client скачивает со скоростью 1,1 ГБ/с, реальная скорость по сети

Под капотом в этот момент сеть работает на пике:

График пропускной способности: пик 1,25 ГБ/с на интерфейсе enp1s0 Transmit. Это потолок для 10GbE-адаптера
График пропускной способности: пик 1,25 ГБ/с на интерфейсе enp1s0 Transmit. Это потолок для 10GbE-адаптера

Почему Managed Postgres и Valkey поднялись относительно легко: в Nextcloud это внешние сервисы, конфигурируемые в официальных Helm-чартах. Достаточно было подставить новые пути — и всё поднялось. Это благодаря раздельной архитектуре Nextcloud. Если бы компоненты были интегрированы кастомнее, было бы гораздо сложнее. А совместимость самих сервисов — это уже заслуга свежих образов Postgres и Valkey.

Вот так выглядит Helm-конфиг Nextcloud до и после (никакого кода, только замена адресов):

internalDatabase: 
  enabled: false

externalDatabase: 
  enabled: true 
  type: postgresqu
  host: "d8ms-pg-nextcloud-rw.nextcloud.svc.cluster.local:5432"
  database: ""
  user: ""
  password: "" 
  existingSecret:
    enabled: true 
    secretName: d8ms-pg-nextcloud-app 
    usernameKey: user 
    passwordkey: password 
    databaseKey: dbname

postgresql:
  enabled: false

persistence:
  enabled: true 
  storageClass: Localpath-system 
  size: 20Gi
  nextcloudData:
    enabled: true 
    storageClass: localpath-system 
    size: 50Gi

redis:
  enabled: false

externalRedis: 
  enabled: true
  host: "d8ms-vlk-nextcloud.nextcloud.svc.cluster.local"
  port: "6379"
  password: "" 
  existingSecret:
    enabled: false 
    secretName: "" 
    passwordKey: "password"

Результат

NetBird работает в кластере DKP в два этапа: сначала устанавливает соединение между пирами, потом поднимает VPN-туннель для их взаимодействия. Чтобы это заработало, нужны три вещи:

  1. Доменное имя и публичный IP (~1000 руб). Регистрируем домен, заказываем IP-адрес у провайдера, настраиваем A-записи. Проверяем, что имена резолвятся в адреса.

  2. Port forwarding на роутере. Проксируем порты 80/443 на master-узел кластера (где включен Ingress-контроллер nginx). Порт 80 закрываем после выписки сертификатов — в бою нужен только 443-й.

  3. Правильный Ingress — самое сложное. NetBird состоит из 4 независимых сервисов (Management, Dashboard, Relay, Signal), и в Kubernetes каждый требует отдельной маршрутизации. Пришлось настроить два Ingress-контроллера: один — для HTTPS, другой — для gRPC. Они перенаправляют запросы на нужный под, где бы он ни крутился в кластере, — это основная фишка Kubernetes.

Как только клиент подключен, он попадает во внутреннюю VPN mesh-сеть и видит остальные пиры. Запросы к Nextcloud идут через VPN-туннель. Снаружи всё выглядит как один домен с одним IP — внутри система сама разбирается, куда маршрутить.

А это архитектура Nextcloud до и после:

Уровень Cloud Native (*на мой скромный взгляд): было 2–3/10, стало 6–7/10.

Слева — стандартный Nextcloud: берём PHP, Redis, Postgres, настраиваем вручную. Справа — на Deckhouse: авторизация через OIDC (Dex), веб-фронт на Ingress, кеш на Managed Valkey, база на Managed Postgres и репликация на SDS-Replicated-Volume. Всё остальное (обновления, бэкапы, мониторинг, сертификаты) — забота платформы.

Также я добавил в NetBird кастомную DNS-зону. Это решило две проблемы сразу:

  • локальное разрешение имён — внутри сети домен резолвится в локальные IP-адреса, а не ходит в публичный DNS;

  • отключение VPN-туннеля в LAN — если клиент в одной локальной сети с сервером, он может обращаться к нему напрямую по IP-адресу, без VPN. А VPN-туннель режет скорость — в моём случае это было критично.

Дополнительно добавил статические DNS-записи на роутер — точно такие же. Теперь DNS работает в трёх местах и разных сценариях:

  • извне → через публичный адрес и NetBird VPN;

  • внутри локальной сети → прямо по локальному IP-адресу, без VPN;

  • с отключённым NetBird → всё равно работает через роутер локально.

Публичные DNS-записи нужны только для получения публичного сертификата. Я зарегистрировал домен, выставил A-записи на публичный IP-адрес, прошёл валидацию и получил сертификат, который нужен не только для «замочка» в браузере и красивого URL. Это критично для iOS-приложений. Apple проверяет сертификаты жёстко. Приложение Nextcloud на iOS вообще не откроется без корректного SSL-сертификата. Это про безопасность.

Как только сертификат получен, я удаляю A-записи. Они больше не светятся наружу. Домен исчезает из публичного интернета. Потом через три месяца снова открою ради обновления сертификатов — и всё. Реальные DNS-записи работают в NetBird.

И ещё рассмотрим архитектуру отказоустойчивого деплоя Nextcloud

Managed Postgres работает в режиме HA с 3 репликами: 2 синхронные (готовы взять трафик в любой момент) + 1 асинхронная (отстаёт на несколько миллисекунд, но зато не тормозит запись).

Managed Valkey крутится без диска — это просто кеш. Если под упадёт, поднимется новый и заполнит себя данными из Postgres. Быстро.

Nextcloud хранит файлы на дисках, которые реплицируются между 3 узлами через SDS (Storage Distributed System) с DRBD (Distributed Replicated Block Device). Если под Nextcloud упадёт или узел отказал — система поднимает его на другом узле, и данные уже там.

Отказоустойчивый деплой Nextcloud
Отказоустойчивый деплой Nextcloud

И ещё совсем немного про архитектуру

Авторизация — Dex через OIDC. Веб-фронт — Ingress nginx. Секреты, сертификаты, обновления, мониторинг — всё на Deckhouse. От Nextcloud остался только backend.

Философская интерлюдия: о зависимости от ИИ

Система работает. Всё поднялось. Nextcloud крутится, база синхронизируется, бэкапы делаются автоматически. Cursor написал конфиги, Kubernetes их применил, и готово.

Но вот стоп. Я не могу оценить, что именно сделал Cursor. Я не понимаю всех деталей. Я не знаю, что может пойти не так. И это уже две большие глобальные проблемы:

  • Тотальная зависимость — я не могу обойтись без ИИ. Без Cursor я бы этого не сделал.

  • Неизвестность — я не знаю, что он наворотил. Безопасно ли это? Откроет ли это дыры в моей сети? Будут ли мои данные украдены?

Это как с моим «умным домом» — у меня есть доступ к устройствам, но я не знаю, как они работают на самом деле.

Почти 70 лет назад, в 1958 году, Айзек Азимов написал рассказ «Чувство силы» (The Feeling of Power). В рассказе люди полностью зависят от компьютеров. Они не умеют считать в уме, не знают основ математики. Когда один человек случайно учится считать вручную, это становится сенсацией и угрозой — люди боятся потерять «чувство силы», которое дают им компьютеры.

Сейчас происходит ровно то же самое. Например, я не знаю, как работает Linux. Не знаю, как работает Kubernetes. Не знаю, как работают конфиги YAML. Но я могу создать инфраструктуру, потому что ИИ это делает за меня.

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

И это реальная проблема. Не теоретическая. Именно это Азимов и предсказал.

Я понимаю, что без ИИ уже будет крайне тяжело. Или даже невозможно. Но я могу сделать три вещи:

Разбираться в матчасти

Когда я прошу Cursor сделать что-то, то сперва изучаю тему с Perplexity в режиме диалога-лекции. Мне не надо знать все детали — я не инженер. Но я пытаюсь понять:

  • Как это работает в общих чертах?

  • Какие могут быть опасности?

  • Что может пойти не так?

Я не должен уметь это делать. Я должен понимать, что происходит. Это две разные вещи.

Защищаться от ИИ

Да, ИИ помогает. Но это не значит, что нужно слепо ему верить. Важно:

  • хранить данные приватно (как я и делаю дома);

  • строго контролировать доступы;

  • не давать ИИ полный контроль над критичными системами;

  • всегда иметь «кнопку отключения».

Читать фантастику

Это звучит странно. Но фантасты — это люди с воображением, которые задумываются о будущем. Азимов, Кларк, Чапек — они не были инженерами. Но они предсказали проблемы, потому что думали.

Я читаю рассказы про ИИ, про роботов, про технологии. И я вижу, что большинство проблем, которые описаны в фантастике, сейчас происходят в реальности.

Это помогает не потерять голову и помнить, что технология — это инструмент. Не спасение. Не ответ на всё.

А как вы считаете, есть ли в этом проблема и в чём она, на ваш взгляд, заключается?

Итого: что я получил

Проверил, что Open Source стабильно и быстро работает на старом железе. Linux/Ubuntu вполне дружелюбны — при удалённой работе с приложениями не чувствуется корпоративная сложность.

Проверил стабильность: варварски выключал сервер, удалял поды — смотрел, как всё восстанавливается. Используешь gold.yaml-конфиги и с нуля переподнимаешь до идентичного состояния за ~5 минут. У Cursor теперь задача — только менять параметры кластера. В систему он больше не лезет. С Kubernetes появилась живучесть: ещё надо постараться, чтобы положить сервис.

Также помогаю ребятам тестировать и шатать самый свежий релиз Alfa.

Но самое главное — теперь я могу реализовывать свои замыслы с помощью ИИ: готовить демо, MVP, новые сценарии, чего раньше в принципе не мог себе даже представить.

Кроме того, собранную в этой статье архитектуру я уже использовал в работе и даже провёл вебинар (запись, презентация), где показал возможности DKP в части управляемых сервисов на примере деплоя Nextcloud.

Общий итог: от «Яндекс Диска» до домашнего кластера

Если отмотать назад — всё началось просто: надоело платить за облако и хотелось понять, можно ли сделать своё. Без инженерного бэкграунда, с Cursor вместо рук и старым Mac mini вместо сервера.

Проект Nextcloud мне помог пройти такие этапы:

  1. Переход с «Яндекс Диска» на Nextcloud на старом Mac mini. Задача относительно простая, но именно она мотивировала попробовать вайб-кодинг.

  2. Эксперименты со скоростью ради перфекционизма. Благодаря этому я уже смог переходить к сложным сценариям.

  3. Построение кластера и переход на Kubernetes. Понял, что за разумные деньги можно объединять старые узлы и решать более серьёзные задачи. Теперь планирую перевести все домашние сервисы в полностью автономный режим.

  4. Проверка «своего» продукта в реальных условиях. Убедился, что решение надёжно работает на бытовых задачах, и теперь успешно использую этот же кластер в работе — для демо и запуска MVP.

Путь от HDD к Kubernetes: как росла скорость:

Фаза

Нода

Диск

Сеть

Софт

Результат

Комментарий

Начало: старый Mac + HDD

Mac mini 2014 late i5 8GB

HDD LaCie 2TB

1 Гбит,
роутер Keenetic

Ubuntu/Snap

Nextcloud

90–100 МБ/с

Ограничение сети — 1 Гбит/с

Kubernetes: первый запуск

Mac mini 2018 i7 64GB 1TB 10GbE

NVMe 1TB + SSD Sata 3 в корпусе TB3

10 Гбит, роутер Netcraze Ultra + коммутатор 5*10 TP-Link TL-SX105

Deckhouse

Nextcloud

NetBird Self-Hosted

400–800 МБ/с через адаптер TB3/10Gbit

Удалось запустить это всё в K8s, разброс результатов не очень понимал — то с диска, то из памяти, основной целью было вообще запустить это всё

Kubernetes: финал

Mac mini 2018 i7 64GB 1TB 10GbE

NVMe 1TB + SSD Sata 3 в корпусе TB3

10 Гбит, роутер Netcraze Ultra + коммутатор 5*10 TP-Link TL-SX105

Deckhouse Managed PG

Managed Valkey

Nextcloud

NetBird Self-Hosted

987 МБ/с через адаптер TB3/10Gbit, 150–160 МБ/с при Wi-Fi 6E (2401 Мбит/с по роутеру)

Получилось! Результат был достигнут при чтении дважды двух и более больших файлов. Выяснил, что скорость 650 МБ/с — это предел для 1 файла. Те клиент Nextcloud распараллеливает загрузку через соединения к файлам. 2–3 фильма в папке синхронизации, прогрев пару раз и полка достигнута! А ларчик просто открывался…

Но если честно, главный вывод не про скорость.

Про железо и практичность. Лучшее соотношение цена/результат — фаза 3: старый Mac mini, второй SSD на 4 ТБ, адаптер 2,5 Гбит/с. Всё остальное быстрее, но дороже и сложнее. Если ваша задача — просто своё облако вместо «Яндекс Диска», это уже работает. Переход на 10 Гбит/с оправдан, только если есть другие нагрузки, любопытство или перфекционизм — и то, и другое, и третье у меня нашлось.

Про Kubernetes. Проработал с Kubernetes несколько месяцев и понял, что на самом деле я не вижу его. Я взаимодействую с ним через Cursor. А Cursor работает через API — универсальный язык между человеком и машиной, который легко понимает ИИ. Поэтому это всё так легко завелось.

Мне не надо думать об инфраструктуре, узлах, операционных системах и других аппаратных деталях отдельно. Я собрал кластер, им управляет Deckhouse через API, и всё. Дальше для меня это единое целое.

Про Managed Services. Самый неожиданный момент: переключение Postgres и Valkey на управляемые сервисы оказалось буквально заменой двух строчек в конфиге. И теперь обновления и бэкапы — не моя забота. В этом и есть смысл.

Про ИИ-инструменты. Cursor сделал возможным то, во что я бы раньше вообще не полез. Но главное — я научился его готовить: изучить сначала документацию, составить план, подтверждать каждый шаг, хранить версии. Без этого он рано или поздно запишет что-нибудь не туда.

Ну а пока ребята-разработчики пилят новые Managed Engines/Storage, у меня есть ещё одна задача:

  • Алиса, ты подслушиваешь?

  • Нет, я не подслушиваю… 

P. S.

Читайте также в нашем блоге: