Основи віртуалізації

Віртуалізація — технологія, що дозволяє запускати декілька операційних систем на одному фізичному комп'ютері. Кожна така система працює у своєму ізольованому середовищі — віртуальній машині (VM).

Як це працює?

┌─────────────────────────────────────────────────────────────────┐
│                    ФІЗИЧНИЙ СЕРВЕР                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │                      Hypervisor                         │  │
│   │            (менеджер віртуальних машин)                 │  │
│   └─────────────────────────────────────────────────────────┘  │
│              │              │              │                    │
│              ▼              ▼              ▼                    │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐           │
│   │     VM 1    │  │     VM 2    │  │     VM 3    │           │
│   │   Ubuntu    │  │   Windows   │  │   Debian    │           │
│   │    ─────    │  │    ─────    │  │    ─────    │           │
│   │  Web Server │  │   Database  │  │   Backup    │           │
│   └─────────────┘  └─────────────┘  └─────────────┘           │
│                                                                 │
│   CPU: 32 cores    RAM: 128 GB    Storage: 4 TB               │
└─────────────────────────────────────────────────────────────────┘

Гіпервізор (hypervisor) — програма, що створює та керує віртуальними машинами. Вона розподіляє ресурси фізичного сервера між VM.

Типи гіпервізорів

Type 1 (Bare-metal)

Працює безпосередньо на залізі, без хостової ОС. Максимальна продуктивність та ізоляція.

┌───────────────────────────────────────────┐
│                 Type 1                    │
├───────────────────────────────────────────┤
│                                           │
│   ┌───────┐  ┌───────┐  ┌───────┐        │
│   │ VM 1  │  │ VM 2  │  │ VM 3  │        │
│   │(Guest)│  │(Guest)│  │(Guest)│        │
│   └───┬───┘  └───┬───┘  └───┬───┘        │
│       │          │          │             │
│   ┌───┴──────────┴──────────┴───┐        │
│   │      Hypervisor (Type 1)    │        │
│   │   Proxmox, ESXi, Hyper-V    │        │
│   └─────────────┬───────────────┘        │
│                 │                         │
│   ┌─────────────┴───────────────┐        │
│   │         Hardware            │        │
│   └─────────────────────────────┘        │
│                                           │
│   ✓ Максимальна продуктивність           │
│   ✓ Мінімальні накладні витрати          │
│   ✓ Використовується в дата-центрах      │
└───────────────────────────────────────────┘

Приклади Type 1:
- Proxmox VE — безкоштовний, на базі KVM/LXC
- VMware ESXi — комерційний, industry standard
- Microsoft Hyper-V Server — безкоштовний для Windows Server
- Citrix Hypervisor (XenServer) — enterprise рішення

Type 2 (Hosted)

Працює як програма поверх звичайної ОС. Простіший у використанні, але менш продуктивний.

┌───────────────────────────────────────────┐
│                 Type 2                    │
├───────────────────────────────────────────┤
│                                           │
│   ┌───────┐  ┌───────┐  ┌───────┐        │
│   │ VM 1  │  │ VM 2  │  │ VM 3  │        │
│   │(Guest)│  │(Guest)│  │(Guest)│        │
│   └───┬───┘  └───┬───┘  └───┬───┘        │
│       │          │          │             │
│   ┌───┴──────────┴──────────┴───┐        │
│   │    Hypervisor (Type 2)      │        │
│   │  VirtualBox, VMware WS      │        │
│   └─────────────┬───────────────┘        │
│                 │                         │
│   ┌─────────────┴───────────────┐        │
│   │      Host OS (Windows,      │        │
│   │      Linux, macOS)          │        │
│   └─────────────┬───────────────┘        │
│                 │                         │
│   ┌─────────────┴───────────────┐        │
│   │         Hardware            │        │
│   └─────────────────────────────┘        │
│                                           │
│   ✓ Простий у встановленні               │
│   ✓ Для розробки та тестування           │
│   ✗ Більші накладні витрати              │
└───────────────────────────────────────────┘

Приклади Type 2:
- VirtualBox — безкоштовний, кросплатформний
- VMware Workstation/Fusion — комерційний, потужний
- Parallels Desktop — для macOS
- QEMU — емулятор, часто з KVM

VM vs Containers

Характеристика Віртуальна машина Контейнер
Ізоляція Повна (окреме ядро) Рівень процесу
Розмір GB (повна ОС) MB (тільки застосунок)
Запуск Хвилини Секунди
Накладні витрати Значні (~10-20%) Мінімальні (~1-2%)
Гнучкість ОС Будь-яка ОС Тільки Linux*
Безпека Вища Нижча
Density 10-100 на сервер 100-1000+ на сервер

* Windows контейнери існують, але обмежені.

Коли використовувати VM?

✓ Потрібна повна ізоляція (multi-tenant)
✓ Різні операційні системи
✓ Legacy застосунки
✓ Compliance/Security вимоги
✓ Повний контроль над ОС

Приклади:
- Хостинг для клієнтів
- Windows сервер на Linux хості
- Тестування різних ОС
- Ізоляція критичних систем

Коли використовувати контейнери?

✓ Мікросервіси
✓ CI/CD пайплайни
✓ Швидке масштабування
✓ Однорідне середовище
✓ Розробка

Приклади:
- Веб-застосунки
- API сервіси
- Воркери/черги
- Тестове середовище

Гібридний підхід

На практиці часто комбінують:

┌─────────────────────────────────────────────────────────────────┐
│                    Фізичний сервер                             │
├─────────────────────────────────────────────────────────────────┤
│   ┌─────────────────────────────────────────────────────────┐  │
│   │                    Proxmox VE                           │  │
│   └─────────────────────────────────────────────────────────┘  │
│                                                                 │
│   ┌───────────────────┐    ┌───────────────────┐              │
│   │      VM 1         │    │      VM 2         │              │
│   │    (Kubernetes)   │    │    (Database)     │              │
│   │  ┌─────┬─────┐    │    │                   │              │
│   │  │ Pod │ Pod │    │    │    PostgreSQL     │              │
│   │  └─────┴─────┘    │    │   (потрібна VM    │              │
│   │  (контейнери      │    │    для ізоляції)  │              │
│   │   всередині VM)   │    │                   │              │
│   └───────────────────┘    └───────────────────┘              │
│                                                                 │
│   ┌───────────────────┐    ┌───────────────────┐              │
│   │    LXC Container  │    │    LXC Container  │              │
│   │    (lightweight)  │    │      (nginx)      │              │
│   │     Monitoring    │    │                   │              │
│   └───────────────────┘    └───────────────────┘              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Популярні рішення

Proxmox VE

Безкоштовна платформа віртуалізації на базі Debian.

Можливості:
- KVM для повних VM
- LXC для Linux контейнерів
- Web-інтерфейс управління
- Кластеризація
- ZFS підтримка
- Backup/Restore

# Встановлення: завантажити ISO з proxmox.com
# Після встановлення — web-інтерфейс на https://server-ip:8006

Переваги:
- Безкоштовний (платна підписка опціональна)
- Активна спільнота
- Простий у використанні
- Добре документований

VMware vSphere/ESXi

Enterprise стандарт віртуалізації.

Можливості:
- vMotion (live migration)
- High Availability
- Distributed Resource Scheduler
- vSAN (software-defined storage)

Ціна: Безкоштовний ESXi обмежений, vSphere — комерційний.

VirtualBox

Найпопулярніший Type 2 гіпервізор для десктопів.

# Ubuntu/Debian
sudo apt install virtualbox

# Fedora
sudo dnf install VirtualBox

Переваги:
- Безкоштовний
- Кросплатформний
- Простий інтерфейс
- Snapshots

Недоліки:
- Повільніший за Type 1
- Не для production

KVM/libvirt

Вбудована віртуалізація в Linux kernel.

# Перевірка підтримки
egrep -c '(vmx|svm)' /proc/cpuinfo
# Якщо > 0 — підтримується

# Встановлення на Ubuntu
sudo apt install qemu-kvm libvirt-daemon-system virt-manager

# Створити VM через virt-manager (GUI)
# або virsh (CLI)

Технічні аспекти

Hardware-assisted virtualization

Сучасні процесори мають спеціальні інструкції для віртуалізації:

  • Intel VT-x — для Intel процесорів
  • AMD-V — для AMD процесорів
# Перевірити підтримку
cat /proc/cpuinfo | grep -E 'vmx|svm'

# vmx = Intel VT-x
# svm = AMD-V

Без апаратної підтримки віртуалізація працює через емуляцію — дуже повільно.

Nested virtualization

VM всередині VM. Корисно для тестування гіпервізорів.

# Увімкнути на KVM
echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm.conf

# Перевірити
cat /sys/module/kvm_intel/parameters/nested
# Y = увімкнено

Resource allocation

┌───────────────────────────────────────────┐
│           Resource Planning               │
├───────────────────────────────────────────┤
│                                           │
│  CPU:                                     │
│  - vCPU ≤ фізичні cores × 2-4            │
│  - Overcommit можливий для CPU           │
│                                           │
│  RAM:                                     │
│  - Сума RAM всіх VM ≤ фізична RAM        │
│  - НЕ overcommit RAM (swap = смерть)     │
│  - Залишити 2-4 GB для хоста             │
│                                           │
│  Storage:                                 │
│  - Thin provisioning економить місце     │
│  - SSD для VM дисків                     │
│  - Окремий storage для бекапів           │
│                                           │
└───────────────────────────────────────────┘

Практичне застосування

Домашня лабораторія

Один сервер з Proxmox:
├── VM: pfSense (роутер/файрвол)
├── VM: TrueNAS (файловий сервер)
├── LXC: Docker host
│   ├── Portainer
│   ├── Home Assistant
│   └── Media server
├── LXC: Pi-hole (DNS)
└── VM: Windows (для тестування)

Малий бізнес

Proxmox кластер (3 ноди):
├── VM: Domain Controller (Windows)
├── VM: File Server
├── VM: Database (PostgreSQL)
├── VM: Application Server
├── LXC: Backup server
└── LXC: Monitoring (Zabbix)

Development

VirtualBox на ноутбуці:
├── VM: Ubuntu Server (тестовий сервер)
├── VM: Kubernetes (minikube)
└── VM: Windows (для тестування)

Типові помилки

Недостатньо RAM

Проблема: VM повільна, свопить
Рішення: Додати RAM або зменшити виділену VM

CPU overcommit на production

Проблема: Всі VM повільні під навантаженням
Рішення: vCPU  physical cores для critical VMs

Один диск для всього

Проблема: I/O bottleneck
Рішення: Окремі диски для VM storage та backups

Відсутність бекапів

Проблема: Втрата VM = втрата всього
Рішення: Регулярні бекапи, тестування restore

Див. також

Шлях: infrastructure/virtualization-basics.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications