Виртуализация

Что такое KVM?

Также известно как: Kernel-based Virtual Machine
Определение

KVM is full hardware virtualisation built into the Linux kernel, giving each guest its own kernel and hardware-enforced isolation from other tenants. Because a KVM guest runs its own kernel, it can load kernel modules, run non-Linux operating systems, use real swap and support nested virtualisation.

Почему KVM важен

Поскольку гость KVM запускает собственное ядро, он может загружать модули ядра, запускать не-Linux операционные системы, использовать настоящий swap и поддерживать вложенную виртуализацию. Память, выделенная гостю KVM, действительно зарезервирована, что является практическим отличием от контейнерной виртуализации.

KVM на практике

Когда вы запускаете KVM-сервер, первое, что вы проверяете, — это /proc/cpuinfo в гостевой системе: если он не совпадает с флагами хоста, вы, скорее всего, видите паравиртуализированные обходные пути, а не полный KVM. Вы устанавливаете выделение памяти с реальными резервированиями: overcommit вызовет срабатывание OOM-киллера в гостевой системе, пока хост выглядит незагруженным. Если вы неправильно настроите вложенную виртуализацию, вы потеряете аппаратное ускорение страничной адресации, и гостевые системы будут работать на доле скорости. Ошибка стоит вам производительности, которую нельзя восстановить без перезагрузки.

Что люди часто понимают неправильно в отношении KVM

Люди предполагают, что KVM — это то же самое, что OpenVZ или LXC, потому что оба используют ядро Linux. Исправление: KVM даёт каждой гостевой системе собственное ядро, тогда как контейнеры используют ядро хоста. Вы можете загружать модули ядра и запускать не-Linux ОС только на KVM. Изоляция с общим пространством имён не обеспечивается аппаратно.

KVM — частые вопросы

Что означает KVM для производительности?

Аппаратная виртуализация KVM означает, что у каждой гостевой системы собственное ядро, поэтому производительность CPU и памяти близка к нативной. Память действительно резервируется, а не разделяется. Вы можете ожидать предсказуемой, изолированной пропускной способности по сравнению с контейнерами.

Можно ли запускать Windows на KVM?

Да, гостевая система KVM запускает собственное ядро, поэтому она может запускать не-Linux операционные системы, такие как Windows. Вам нужно будет загрузить ISO и подключить VNC-консоль. Лицензия Windows Server доступна как опция в некоторых регионах.

Где встречается KVM

Больше из раздела «виртуализация»

OpenVZ
OpenVZ — это контейнерная виртуализация, в которой каждый экземпляр разделяет ядро хоста, поэтому гости не могут загружать модули ядра или запускать другую операционную систему.
LXC
LXC — это нативная контейнеризация Linux, которая изолирует процессы с помощью namespace и cgroups, разделяя ядро хоста.
Гипервизор
Гипервизор — это программный слой, который создаёт и запускает виртуальные машины, распределяя между ними физические CPU, память и ввод-вывод.
Nested virtualisation
Вложенная виртуализация позволяет виртуальной машине самой запускать виртуальные машины, предоставляя гостю расширения виртуализации процессора.
vCPU
vCPU — это виртуальный процессор, предоставляемый гостевой системе, поддерживаемый временем планирования на физическом ядре или потоке.
cloud-init
cloud-init — стандартный механизм настройки виртуальной машины при первой загрузке, использующий метаданные, предоставляемые платформой.