KVM, LXC или OpenVZ: почему мы продаём только KVM

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

ИкИнженерная команда CheapServАвтор 6 мин чтения
Сервер, разделённый на изолированные светящиеся отсеки
На этой странице6
  1. Три способа поделить хост
  2. Чем вы жертвуете в контейнере
  3. Где контейнеры действительно лучше
  4. Что представляют собой наши тарифы VPS
  5. Как понять, что вам продают
  6. Честный итог

Под словом «VPS» в зависимости от провайдера скрываются три очень разные вещи: виртуальная машина KVM со своим ядром, контейнер LXC, использующий ядро хоста, или контейнер OpenVZ — из линейки, которая старше обоих вариантов. В прайс-листах редко указано, что именно вам продают. Мы продаём только KVM, и в этой статье объясняем, чем жертвуют два других варианта, где они объективно лучше и как определить, что продают вам.

Три способа поделить хост

KVM — это аппаратная виртуализация. На хосте работает гипервизор; каждый гость загружает собственное ядро на виртуальном оборудовании с выделенными страницами памяти и виртуальными процессорами, отображаемыми на реальные ядра. Гость не видит ни хост, ни других гостей, а хост не может заглянуть внутрь гостя без его содействия.

LXC (и его «родственники» в Proxmox и LXD) — это виртуализация на уровне операционной системы. Все контейнеры используют общее ядро хоста и разделены пространствами имён (namespaces) и cgroups. Такая виртуализация легче, контейнер загружается за секунду, а хост может прозрачно выдавать памяти больше, чем у него есть: контейнеры расходуют лишь ту память, к которой реально обращаются.

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

Чем вы жертвуете в контейнере

  • Собственное ядро. Никаких своих ядер, никаких модулей ядра, никаких изменений sysctl, которые хост не разрешил. WireGuard, ZFS, Docker с некоторыми драйверами хранилища, возможности nftables и всё, где сказано «требуется ядро 6.x», зависят от того, что запущено на хосте, а это нередко ядро многолетней давности.
  • Честная RAM. Память контейнера — это лимит cgroup на общий пул. Провайдеры могут продавать (и продают) больше RAM, чем есть на хосте, рассчитывая, что не все ею пользуются. Когда ставка не срабатывает, ваш процесс убивает OOM-killer из-за нехватки памяти, виноваты в которой не вы.
  • Docker без оговорок. Вложенным контейнерам нужны привилегированные флаги или трюки с user namespace, которые многие хосты отключают. На KVM Docker работает ровно так же, как на вашем ноутбуке.
  • Изоляция. Уязвимость ядра на хосте — это уязвимость в каждом контейнере на нём. Поверхность атаки гостя KVM — виртуальное оборудование, оно меньше по объёму и лучше проаудировано.
  • Swap, файловые системы, монтирование. Контейнеры получают то, что даёт им хост. Нельзя разбить диск на разделы, использовать другую файловую систему или смонтировать образ.

Где контейнеры действительно лучше

Плотность и цена. Хост, на котором работают 200 контейнеров LXC вместо 40 гостей KVM, может брать пятую часть цены, а для нагрузки, которая простаивает 95% времени — статического сайта, небольшого бота, личного прокси, — такая цена может быть честной. Загрузка занимает секунду вместо двадцати. Накладные расходы по памяти близки к нулю, поэтому контейнер на «512 MB» действительно отдаёт приложению все 512 MB, тогда как гость KVM тратит 100 MB на собственное ядро.

Проблемы начинаются, когда нагрузка не простаивает или когда провайдер рассчитывает на простой, а его нет. Жалобы на «steal time» и «случайные OOM kill», которыми заполнены хостинг-форумы, почти всегда относятся к перепроданным контейнерам.

Что представляют собой наши тарифы VPS

  • KVM на хостах с Linux: одно ядро хоста, которое контролируем мы, и одно гостевое ядро, которое контролируете вы.
  • RAM выделяется целиком: суммарный объём памяти гостей на хосте никогда не превышает физическую RAM хоста. Никаких balloon-драйверов, никаких гостей, чья память подкреплена свопом.
  • vCPU — это доли физических ядер под управлением справедливого планировщика; число vCPU в тарифе — та параллельность, которую вы получаете, а постоянная загрузка всех vCPU на 100% разрешена.
  • Диск — это выделенный каждому гостю объём NVMe, указанный на странице с ценами и контролируемый гипервизором; неиспользованная ёмкость возвращается в общий пул.
  • Драйверы virtio для диска и сети; загрузка UEFI, которая поддерживает любой дистрибутив и собственные ISO-образы из консоли.

Следствие в том, что всё, что описано в руководствах этого блога, — от хабов WireGuard до стеков Docker Compose и ZFS — работает без единого обращения к нам. Опция Custom ISO в форме заказа существует потому, что это настоящая виртуальная машина.

Как понять, что вам продают

Если в прайс-листе об этом не сказано, выполните внутри сервера одну из этих команд:

systemd-detect-virt       # kvm | lxc | openvz | none
cat /proc/1/environ | tr '\0' '\n' | grep -i container
uname -r                  # a 2.6 or 3.x kernel in 2025 means OpenVZ
ls /dev/kvm /boot/vmlinuz* 2>/dev/null   # present on KVM, absent in containers

На любом нашем сервере systemd-detect-virt выводит kvm, а uname -r — то ядро, которое установил ваш дистрибутив, потому что оно ваше.

Честный итог

KVMLXCOpenVZ
Своё ядро, модули, sysctlданетнет
Docker, WireGuard, ZFS из коробкидаиногдаредко
Хост может перепродавать RAMтолько с balloon-драйверами, которые мы не используемлегкозаложено в архитектуре
Время загрузки10–20 s~1 s~1 s
Накладные расходы ядра на гостя~100 MB~0~0
Годится для постоянной нагрузкидазависит от хостаобычно нет

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

Ик
Инженерная команда CheapServ

Те, кто создаёт конвейер развёртывания, панель управления и слой хранения данных.

Разверните первый сервер меньше чем за минуту.

Пополните баланс от $25 в BTC, ETH, XMR или USDT. Баланс не сгорает, а неиспользованные средства можно вернуть.

Создать аккаунт