Основи віртуалізації¶
Віртуалізація — технологія, що дозволяє запускати декілька операційних систем на одному фізичному комп'ютері. Кожна така система працює у своєму ізольованому середовищі — віртуальній машині (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
Див. також¶
- Docker та контейнеризація — альтернатива VM
- Docker Compose — оркестрація контейнерів
- VPS та хмари — віртуалізація як сервіс
Шлях: infrastructure/virtualization-basics.md