ZIM-НИЙ SAAALEЗимние скидки: до −50% на старт и −20% на продление
до 31.01.2026 Подробнее
Выберите продукт

Kubernetes storage on a single-node VDS: local-path, Longhorn, OpenEBS

На одном узле Kubernetes выбор хранилища упирается в простоту, скорость и восстановление из бэкапов. Разберём local-path, Longhorn и OpenEBS на VDS: как создаются PVC, что с производительностью и снапшотами, и какой вариант выбирать под разные нагрузки.
Kubernetes storage on a single-node VDS: local-path, Longhorn, OpenEBS

Зачем вообще думать про storage в single-node Kubernetes

Один узел Kubernetes на VDS — нормальная и распространённая схема: небольшие прод-проекты, стенды, внутренние сервисы, CI, мониторинг. Но почти сразу всплывает вопрос: контейнеры эфемерны, а данные должны переживать рестарты Pod, пересоздания Deployment и обновления.

В Kubernetes это решается через PersistentVolumeClaim (PVC): приложение просит том нужного размера и режима доступа, а provisioner создаёт и подключает конкретное хранилище.

Ключевая особенность single node: у вас нет второй машины, чтобы реально «распределить» данные и пережить падение узла за счёт репликации на другой ноде. Поэтому выбор storage-решения превращается в баланс между простотой, производительностью, снапшотами/backup и тем, как именно вы будете восстанавливаться при аварии.

На одном узле любой вариант хранения остаётся локальным в физическом смысле. Разница между решениями — в автоматизации (PV/PVC), удобстве снапшотов и резервного копирования, а также в операционных рисках и цене по ресурсам.

Базовые понятия: PV/PVC/StorageClass и что важно именно для VDS

Чтобы сравнение было предметным, зафиксируем термины:

  • PVC — запрос на том (размер, access mode, класс хранения).
  • PV — реальный том, созданный под конкретный PVC (директория, устройство, dataset, образ).
  • StorageClass — профиль хранения: какой provisioner создаёт PV и с какими параметрами.
  • Access modes — на single node почти всегда используется ReadWriteOnce (RWO). ReadWriteMany (RWX) обычно требует сетевого хранилища или специальных CSI и редко оправдан на одном узле.

Для VDS практически важны три вещи:

  • Профиль диска (latency/IOPS): для БД, очередей, логов и TSDB «медленный слой» быстро становится бутылочным горлышком.
  • Сценарий аварии: что делаете при потере ноды или порче ФС — поднимаете новую ноду и разворачиваете данные из backup, или хотите быстро откатываться снапшотами?
  • Операционная сложность: чем больше компонентов (контроллеры, engines, сервисы хранения), тем больше мониторинга, обновлений и потенциальных «неочевидных» сбоев.

Если вы на этапе выбора железа/тарифа, ориентируйтесь на задачу: под базу и мониторинг чаще выгоднее взять VDS с быстрым диском, чем «умный» CSI поверх медленного хранилища.

Схема PV, PVC и StorageClass для single-node Kubernetes

local-path provisioner: самый простой вариант для single node

local-path provisioner — популярный дефолт в k3s и частый выбор для одного узла. Идея простая: PVC превращается в каталог на локальном диске ноды (в заранее заданной базовой директории), который монтируется в Pod.

Как это работает

Provisioner создаёт директорию под каждый PV и выставляет привязку к ноде (node affinity). На одном узле это практически идеальная модель: минимум абстракций и почти нулевая цена по CPU/RAM.

Плюсы

  • Производительность близка к нативной (это просто ФС хоста).
  • Простота: меньше компонентов — меньше точек отказа.
  • Прозрачность: данные — это файлы в директории, удобно дебажить и делать аварийные копии.

Минусы и типовые риски

  • Нет отказоустойчивости: потеря диска или ноды = потеря тома. Спасает только внешний backup.
  • Миграция на другой узел (если позже добавите ноды) не автоматическая: PV привязан к конкретной машине.
  • Снапшоты/backup нужно организовывать отдельно: на уровне приложения, файловой системы или внешними инструментами.

Практика: пример StorageClass и PVC

Ниже минимальные манифесты. В реальной установке имя класса может отличаться (в k3s часто уже есть local-path).

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-path
provisioner: rancher.io/local-path
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: app-data
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 20Gi

Для восстановления на single node заранее продумайте процедуру «поднять новый сервер → развернуть кластер → вернуть данные». В качестве отправной точки можно использовать статью про резервное копирование в S3-совместимое хранилище: бэкапы в S3 через restic и borg.

FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Longhorn: удобные снапшоты и backup, даже если узел один

Longhorn — CSI-хранилище от Rancher/SUSE, которое часто берут ради репликации между нодами. На single node репликация «внутри одного узла» не спасает от потери диска, но Longhorn всё равно может быть полезен как управляемый слой: снапшоты, бэкапы, UI, состояние томов.

Что вы реально получаете на single node

  • Снапшоты на уровне тома и понятный workflow отката.
  • Backup томов во внешний бэкенд (объектное хранилище или NFS, в зависимости от вашей схемы).
  • Наблюдаемость: видно состояние томов, ошибки replica/engine, прогресс backup-операций.

Цена удобств

  • Производительность: дополнительный слой хранения и фоновые операции (snapshot/backup) могут заметно ударить по latency и write IOPS. Для write-heavy БД нагрузку нужно измерять тестом.
  • Ресурсы: больше Pod и служебных компонентов, выше требования к CPU/RAM и диску.
  • Диагностика: появляется отдельный «storage-стек» со своими сбоями, логами и апгрейдами.

Практика: StorageClass с базовыми параметрами

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

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: longhorn
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
  numberOfReplicas: "1"
  staleReplicaTimeout: "30"

На что обратить внимание перед продом

  • Проверьте, как ведёт себя нагрузка при регулярных снапшотах и backup (пиковые записи).
  • Проверьте реальный restore на «пустой ноде»: развёртывание кластера с нуля и восстановление тома.
  • Отдельно проверьте заполнение диска: что будет с приложениями и самим Longhorn, когда место заканчивается.

OpenEBS: гибкий конструктор, но режим выбирайте осознанно

OpenEBS — это набор подходов к storage в Kubernetes: от максимально «локальных» вариантов (LocalPV) до более сложных движков вокруг ZFS/дисковых пулов. Для single node чаще всего рассматривают:

  • OpenEBS LocalPV — близко по смыслу к local-path, но с выбором варианта: hostpath, device, иногда LVM/ZFS в зависимости от поставки.
  • ZFS-подход — если вы готовы администрировать ZFS: получаете снапшоты/клоны и удобную отправку снапшотов для backup.

Плюсы OpenEBS на VDS

  • Гибкость: можно начать с LocalPV и усложнять по мере необходимости.
  • Контроль над устройствами: сценарии с отдельным диском/разделом под приложение (device) часто проще поддерживать, чем «всё в одной директории».
  • Снапшоты через ZFS (если выбран этот путь): удобно для частых откатов и отправки снапшотов в backup-репозиторий.

Минусы

  • Нужно выбрать правильный режим под задачу, иначе миграция PVC может занять время (и потребует окна).
  • Операционная сложность растёт, если вы уходите дальше LocalPV hostpath/device.
  • Производительность зависит от движка: LocalPV обычно быстрый, а ZFS и другие слои стоит тестировать под нагрузкой.

Пример: LocalPV hostpath StorageClass

Суть та же, что и у local-path: директория на хосте под каждый PV.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-hostpath
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
parameters:
  cas-type: "local-hostpath"
  basePath: "/var/openebs/local"

Один узел Kubernetes и варианты локального хранилища для PVC

Сравнение: local-path vs Longhorn vs OpenEBS на одном узле

Для быстрого выбора полезно сравнить по критериям, которые обычно важны на практике: производительность, backup/restore и операционная сложность.

Производительность

  • local-path: обычно лучший latency и IOPS, потому что это прямой доступ к ФС хоста.
  • OpenEBS LocalPV: близко к local-path; при режиме device может быть удобнее для «отдельного диска под БД».
  • Longhorn: чаще медленнее из-за дополнительного слоя и фоновых задач; на NVMe нередко приемлемо, но для активной БД тест обязателен.

Backup и восстановление

  • local-path: вы строите backup сами (на уровне приложения, файловых копий, снапшотов на хосте). Плюс — простота и предсказуемость.
  • Longhorn: сильная сторона — снапшоты и централизованный backup томов; но restore нужно регулярно проверять, а не «верить в кнопку».
  • OpenEBS: зависит от режима. LocalPV = как local-path, ZFS = мощно по снапшотам, но требует дисциплины и понимания ZFS.

Сложность поддержки

  • local-path: минимальная сложность, минимум компонентов.
  • OpenEBS: от «почти просто» (LocalPV) до заметно сложнее (ZFS-слой и его обслуживание).
  • Longhorn: больше компонентов и отдельный контур мониторинга, плюс аккуратные обновления Longhorn вместе с кластером.

Практические сценарии: что выбрать под тип нагрузки

База данных на single node (PostgreSQL/MySQL)

Если база чувствительная к latency и fsync, чаще всего разумнее начинать с local-path или OpenEBS LocalPV (hostpath/device) и вкладываться в правильный backup на уровне СУБД. Для PostgreSQL полезно иметь отработанный PITR: резервное копирование и восстановление PostgreSQL через WAL (PITR).

Longhorn для БД имеет смысл включать только если вы осознанно принимаете цену по производительности ради удобных снапшотов и управляемого backup томов.

Мониторинг (Prometheus/VictoriaMetrics), логи, очереди

Здесь часто важнее управляемость и предсказуемое восстановление. Longhorn может быть удобен, если вы планируете регулярные снапшоты и выгрузку backup, а нагрузка укладывается в ресурс диска/CPU. Если упираетесь в скорость записи — local-path/OpenEBS LocalPV обычно проще и быстрее.

Dev/staging, pet-проекты, CI

local-path закрывает большинство потребностей: просто, быстро, без лишней инфраструктуры. Усложняйте только когда есть конкретная причина (например, быстрые откаты по снапшоту).

Виртуальный хостинг FastFox
Виртуальный хостинг для сайтов
Универсальное решение для создания и размещения сайтов любой сложности в Интернете от 95₽ / мес

Чеклист перед выбором: что проверить администратору

  • Где физически лежат данные: какой диск, какая ФС, есть ли отдельный volume под data.
  • Что будет при заполнении диска: алерты, поведение приложений, влияние на kubelet и storage-компоненты.
  • Как расширять PVC: поддерживает ли StorageClass allowVolumeExpansion и что нужно сделать внутри Pod/ФС после расширения.
  • Реальный restore: не «backup где-то есть», а подняли новую ноду и восстановили приложение из бэкапа в тесте.
  • План обслуживания: как обновляете Kubernetes и CSI, есть ли окно, какие шаги отката.

Бэкапы: минимально рабочие стратегии для single node

На одном узле важно принять базовый факт: storage-слой не заменяет резервное копирование. Независимо от того, используете вы Longhorn, OpenEBS или local-path, стратегия должна быть простой, повторяемой и проверяемой.

Стратегия A: backup на уровне приложения

Для баз данных и некоторых сервисов это самый контролируемый вариант: дампы, физические бэкапы, WAL/бинлоги, регламент проверки восстановления. Обычно это даёт лучшую консистентность, чем файловые копии PVC.

Стратегия B: снапшот тома + внешний backup

Подходит, когда приложение нормально переживает crash-consistent снапшоты или вы умеете «замораживать» запись. Longhorn и ZFS-сценарии OpenEBS упрощают такие операции, но тест восстановления обязателен.

Стратегия C: файловый backup PVC

Работает для статических данных (медиа, артефакты, репозитории). Для активно пишущих БД чаще всего нежелателен без механизмов консистентности.

Итоги: быстрый выбор без лишней теории

  • Нужны максимальная скорость и простота — берите local-path provisioner (или OpenEBS LocalPV) и инвестируйте в нормальный backup/restore-процесс.
  • Нужны снапшоты и управляемый backup томов — смотрите в сторону Longhorn, но обязательно измеряйте производительность на вашей нагрузке.
  • Нужна гибкость (hostpath/device/ZFS) и вы готовы администрировать слой храненияOpenEBS подходит, особенно в LocalPV-режиме для single node.

Какой бы вариант вы ни выбрали, на одном узле «выигрывает» не магия CSI, а дисциплина: мониторинг диска, регулярные бэкапы и проверка восстановления. Тогда storage в Kubernetes на VDS будет предсказуемым и не превратится в лотерею при первой же аварии.

Поделиться статьей

Вам будет интересно

HTTP/2 in Nginx: multiplexing, stream priorities, and where performance is lost OpenAI Статья написана AI (GPT 5)

HTTP/2 in Nginx: multiplexing, stream priorities, and where performance is lost

HTTP/2 обещает ускорение за счёт multiplexing и приоритетов потоков, но на практике всё упирается в TCP head-of-line blocking, TLS ...
Prometheus agents в 2025: node_exporter vs Grafana Alloy vs Telegraf OpenAI Статья написана AI (GPT 5)

Prometheus agents в 2025: node_exporter vs Grafana Alloy vs Telegraf

В 2025 «Prometheus + node_exporter» не всегда достаточно: больше удалённых площадок, NAT, динамических сервисов и требований к rem ...
MySQL online schema change: gh-ost vs pt-online-schema-change vs ALGORITHM=INPLACE OpenAI Статья написана AI (GPT 5)

MySQL online schema change: gh-ost vs pt-online-schema-change vs ALGORITHM=INPLACE

Онлайн-изменение схемы MySQL почти всегда упирается в metadata lock, финальный swap и поведение репликации под нагрузкой. Разберём ...